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 Combobox mit Icons Darstellung nicht korrekt (https://www.delphipraxis.net/92821-combobox-mit-icons-darstellung-nicht-korrekt.html)

Chemiker 26. Mai 2007 17:43


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:
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;
Vielleicht kann einer von euch mir einen Tipp geben.

Bis bald Chemiker

mkinzler 26. Mai 2007 17:46

Re: Combobox mit Icons Darstellung nicht korrekt
 
Warum programmierst du ein vorhandenes Feature selber nach?

bitsetter 26. Mai 2007 18:29

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:
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;
Dann allerdings ohne ItemIndex.

Chemiker 27. Mai 2007 09:13

Re: Combobox mit Icons Darstellung nicht korrekt
 
Hallo mkinzler,

Zitat:

Zitat von mkinzler
Warum programmierst du ein vorhandenes Feature selber nach?

Welche Feature von der Combobox meinst Du??



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

Hawkeye219 27. Mai 2007 09:40

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:

Zitat von mkinzler
Warum programmierst du ein vorhandenes Feature selber nach?

Vielleicht wollte Markus auf die Komponente Delphi-Referenz durchsuchenTComboBoxEx hinweisen.

Gruß Hawkeye

Chemiker 27. Mai 2007 17:39

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