Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Text von Auswahlfeld der Combobox einfärben (https://www.delphipraxis.net/50662-text-von-auswahlfeld-der-combobox-einfaerben.html)

FBrust 29. Jul 2005 10:17


Text von Auswahlfeld der Combobox einfärben
 
Hallo,

ich möchte in einer Combobox ein bestimmtes Item farblich markieren, alle anderen sollen weiterhin die Font-Farbe der Combobox behalten. Die Combobox wird zur Laufzeit über eine Schleife mit Texten gefüllt. Wenn nun einer dieser Werte ein bestimmtes Kriterium erfüllt, soll der Text in dem "Ausklappfeld" z. b. blau dargestellt werden, der Hintergrund soll weiß bleiben.


Ich habe schon (testweise, da fehlt noch die if-Bedingung für das Kriterium)
Delphi-Quellcode:
cbEn.Canvas.Font.Color := clGreen;
versucht, aber das wird geflissentlich ignoriert... :?:


und
Delphi-Quellcode:
cbEn.Font.Color
ändert ja die Farbe der ganzen Combobox.


Hat vielleicht jemand einen Tip?


Gruß
Frank

Sidorion 29. Jul 2005 10:43

Re: Text von Auswahlfeld der Combobox einfärben
 
Du musst den style der combobox auf csOwnerDrawFixed stellen und im event OnDrawItem kannst du dann prüfen, obs der Eintrag ist, der mit dem Text übereinstimmt. (wird index übergeben) Hier kannst du dann die Einfärbung realisieren.

freak24 29. Jul 2005 10:45

Re: Text von Auswahlfeld der Combobox einfärben
 
Das sieht ungefähr so aus :wink:
Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
 if Kriterium then
  Combobox1.Canvas.Font.Color := clBlue
 else
  Combobox1.Canvas.Font.Color := Combobox1.font.color;
 Combobox1.Canvas.FillRect(rect);
 combobox1.Canvas.TextOut(rect.Left,rect.Top,combobox1.Items.Strings[index])
end;

Olli 29. Jul 2005 11:10

Re: Text von Auswahlfeld der Combobox einfärben
 
Dann wirst du selber das Zeichnen übernehmen müssen. Ist ganz ähnlich wie bei Listboxen, aber um das Zeichnen wirst du nicht herumkommen.

CBS_OWNERDRAWFIXED oder CBS_OWNERDRAWVARIABLE setzen und dann WM_DRAWITEM abfangen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz