![]() |
Zeile in Listbox färben
Hallo liebe Community,
wie kann man die oberste Zeile einer während der Laufzeit erzeugten Listbox färben (Hintergrundfarbe z.B. rot)? Liebe Grüße loirad |
AW: Zeile in Listbox färben
Hier mein Beispiel für ein Zebraeffekt. Eventuell musst du es anpassen:
Zitat:
|
AW: Zeile in Listbox färben
Zitat:
Delphi-Quellcode:
Es war ja nur nach 1. Zeile gefragt.
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); var begin if Index = 1 then begin // oder Index = 0 ? selber testen Listbox1.Canvas.Brush.Color := clRed; Listbox1.Canvas.FillRect(Rect); Listbox1.Canvas.TextOut(Rect.Left,Rect.Top,Listbox1.Items[Index]); end; end; Für "Zebra-Effekt" reicht es, statt bei 1 bei (Index mod 2) dementsprechend einzugreifen. |
AW: Zeile in Listbox färben
Also ich weiß nicht ob das ausreicht. Wenn man der einen Zeile Zitat folgt, dann vielleicht ja, aber ich schätze er will auch den Rest sehen. Und nach meinem Verständnis fehlt da was. Vielleicht klappt es in neueren Versionen von Delphi, aber bei D7 nicht unbedingt.
|
AW: Zeile in Listbox färben
Vielen Dank für die Antworten! Ich werde es mal ausprobieren!
Eine Frage: Wo bekomme ich die Prozedure DrawItem her bei ender während der Laufzeit erzeugten Listbox? |
AW: Zeile in Listbox färben
Zitat:
Zuerst die Zeichenmethode implamentieren und dann der Listbox zuweisen die zur Laufzeit erzeugt wurde.
Delphi-Quellcode:
// Nachdem die Listbox erzeugt wurde:
DeineErzeugteListBox.OnDrawItem := DeineListBoxDrawItem; // Wobei DeineListBoxDrawItem die Zeichenmethode ist |
AW: Zeile in Listbox färben
Durch Zuweisung. Du erzeugst doch zur Laufzeit eine ListBox, oder? Dort gibst du der Komponente bestimmte Eigenschaften, wie Parent, Width oder Height. Genauso kannst du auch eine Prozedur zuweisen. Z. B. MyListBox.OnClick
Delphi-Quellcode:
Edit:
private
{ Private-Deklarationen } procedure MyListBoxClick(Sender: TObject); ... procedure TForm1.MyListBoxClick(Sender: TObject); begin ShowMessage('Eigene OnClick Prozedur nach Klick auf Button1'); end; procedure TForm1.ListBox1Click(Sender: TObject); begin ShowMessage('Original OnClick Prozedur'); end; procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.OnClick := MyListBoxClick; end; In deinem Fall natürlich OnDrawItem |
AW: Zeile in Listbox färben
Vielen Dank! Ich probiers heute noch aus! Danke für die Antworten:thumb:
Edit: Und wie kann ich die Parameter übergeben? |
AW: Zeile in Listbox färben
Du rufst die Methode ja nicht selbst auf. Das macht die Komponente, schließlich weist du deshalb die Methode als Eventbehandlung zu.
Die Parameter übergibt dann auch die Komponente. |
AW: Zeile in Listbox färben
Welche Parameter willst Du denn übergeben? Wenn das Ereignis gefeuert wird, stehen da eh schon die Daten der gemeinten Listbox drin. Übrigens solltest Du besser den Sender auswerten statt die Instanz hartzucoden. Also statt
Delphi-Quellcode:
besser
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin Listbox1.Canvas.Brush.Color := clRed;
Delphi-Quellcode:
dann kannst Du den Handler auch mehreren Listboxen zuweisen.
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin (Sender as TListbox).Canvas.Brush.Color := clRed; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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 by Thomas Breitkreuz