![]() |
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; |
AW: Zeile in Listbox färben
Wenn du jeden einzelnen Schritt erfragst, wird es Jahre dauern bis du das Programm fertig schreibst. Nicht falsch verstehen, aber was hältst du von Learning by Doing?
|
AW: Zeile in Listbox färben
Eine Frage noch @DeddyH: Wo bekomme ich in der 2.Variante (die bessere) den Sender her (der wird doch nicht übermittelt oder?)?
|
AW: Zeile in Listbox färben
Normalerweise heißt der erste Parameter immer Sender, er hat übersehen, dass der bei DrawItem Control heißt. ;-) Einfach durch Control ersetzen, dann gehts.
|
AW: Zeile in Listbox färben
Control kennt aber kein Canvas? Jedenfalls sagt er mit undefinierter Bezeichner 'Canvas'!
|
AW: Zeile in Listbox färben
Zitat:
Delphi-Quellcode:
.
(Control as TListbox)
Übrigens, das geht auch und ist vielleicht übersichtlicher
Delphi-Quellcode:
TListBox(Control).Canvas
|
AW: Zeile in Listbox färben
Vielen Dank! Jetzt klappts! Teilweise war ich ja sehr beratungsresistent:oops:! Danke für eure Gedult!
|
AW: Zeile in Listbox färben
Zitat:
|
AW: Zeile in Listbox färben
Beim harten Cast musst du dir sicher sein können, das der Sender wirklich eine TListbox oder Nachfahre ist!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:03 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