Für mich klang das so, als würde dieses Event nur aufgerufen, wenn ich ein neues Item hinzufüge zB Listbox1.Items.Add('WasAuchImmer');
Bei OnDrawIten wird jedes Mal gezeichnet wenn es nötig ist. OnMeasureItem wird nur ein mal ausgeführt, z. B. bei deinem Add.
Zum Code. Den muss man nicht so komplex machen wie hier:
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem
(Control: TWinControl;
Index: Integer;
Rect: TRect; State: TOwnerDrawState) ;
var
myColor: TColor;
myBrush: TBrush;
begin
myBrush := TBrush.Create;
with (Control
as TListBox).Canvas
do
begin
myColor := TLBColor(Listbox1.Items.Objects(
index)).Color;
myBrush.Style := bsSolid;
myBrush.Color := myColor;
Windows.FillRect(
handle, Rect, myBrush.Handle) ;
Brush.Style := bsClear;
TextOut(Rect.Left, Rect.Top,
(Control
as TListBox).Items[
Index]) ;
MyBrush.Free;
end;
end;
Im Grunde reicht es, was Farbe angeht, das:
Delphi-Quellcode:
begin
with (Control as TListBox).Canvas do
begin
...
Brush.Color := myColor;
...
end;
end;
Zum empfehlen ist sich an die Listbox ein Objekt mit Infox anzuhängen. Kein großer Aufwand, aber bei OnDrawItem kann man sich die nötigen Infos bezüglich Farbe und weitere Formatierung da rausholen.
Im Anhang habe ich ein kleines Beispiel das zeigt wie das mit dem angehängtem Objekt funktioniert und wie man jeden Item individuell einfärben kann: