![]() |
Combobox mit Icons Darstellung nicht korrekt
Hallo,
ich habe ein Problem mit einer Combobox in der mit Hilfe einer ImageList für jeden Eintrag ein anderes Icon angezeigt werden soll. Das funktioniert auch soweit, aber mit einem Schönheitsfehler das immer das zuletzt benutzte Icon in allen Einträgen angezeigt wird. Erst wenn man mit dem Mauszeiger über die Einträge der aufgeklappten Combobox geht, wird das richtige Icon angezeigt.
Delphi-Quellcode:
Vielleicht kann einer von euch mir einen Tipp geben.
procedure TFormMSEinrichten.ComboBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState); begin Combobox1.Canvas.Brush.Color:= clWhite; Combobox1.Canvas.FillRect(rect); if ComboBox1.ItemIndex = 0 then begin ImageList1.Draw(ComboBox1.Canvas, rect.Left+2, rect.Top+3,1); end; if ComboBox1.ItemIndex = 1 then begin ImageList1.Draw(ComboBox1.Canvas, rect.Left+2, rect.Top+3,0); end; ComboBox1.Canvas.Font.Color:= clblack; ComboBox1.Canvas.TextOut(32,rect.Top+4,Combobox1.Items[index]); end; Bis bald Chemiker |
Re: Combobox mit Icons Darstellung nicht korrekt
Warum programmierst du ein vorhandenes Feature selber nach?
|
Re: Combobox mit Icons Darstellung nicht korrekt
Hi,
das kommt weil der ItemIndex beim Aufklappen der Combobox -1 und nicht 0 oder 1 ist. Eventuell könntest du es so abändern:
Delphi-Quellcode:
Dann allerdings ohne ItemIndex.
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin Combobox1.Canvas.Brush.Color:= clWhite; Combobox1.Canvas.FillRect(rect); if Index(*ComboBox1.ItemIndex *)= 0 then begin ImageList1.Draw(ComboBox1.Canvas, rect.Left+2, rect.Top+3,1); end; if Index(*ComboBox1.ItemIndex*) = 1 then begin ImageList1.Draw(ComboBox1.Canvas, rect.Left+2, rect.Top+3,0); end; ComboBox1.Canvas.Font.Color:= clblack; ComboBox1.Canvas.TextOut(32,rect.Top+4,Combobox1.Items[index]); end; |
Re: Combobox mit Icons Darstellung nicht korrekt
Hallo mkinzler,
Zitat:
Hallo bitsetter, das ist die Lösung gewesen danke! Durch diese Änderung verhält sich nun die ComboBox wie sie soll.
Delphi-Quellcode:
procedure TFormMSEinrichten.ComboBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState); begin Combobox1.Canvas.Brush.Color:= clWhite; Combobox1.Canvas.FillRect(rect); if Index = 0 then ImageList1.Draw(ComboBox1.Canvas, rect.Left+2, rect.Top+3,1); if Index = 1 then ImageList1.Draw(ComboBox1.Canvas, rect.Left+2, rect.Top+3,0); ComboBox1.Canvas.Font.Color:= clblack; ComboBox1.Canvas.TextOut(32,rect.Top+4,Combobox1.Items[index]); end; Bis bald Chemiker |
Re: Combobox mit Icons Darstellung nicht korrekt
Hallo Chemiker,
hast du in deiner Routine den Übergabeparameter State absichtlich ignoriert? Bei deiner Vorgehensweise ist der selektierte Eintrag nur noch durch ein Fokusrechteck gekennzeichnet. Windows-Standard ist aber ein Hinterlegen des Eintrags in einer anderen Farbe. Zitat:
![]() Gruß Hawkeye |
Re: Combobox mit Icons Darstellung nicht korrekt
Hallo Hawkeye,
ich habe bis heute schlicht weg übersehen, dass diese Komponente mir zur Verfügung steht. War schon ziemlich blöd von mir, das Rad noch mal zu erfinden. Danke für den Tipp. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz