Thema: Delphi ListBox

Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#25

AW: ListBox

  Alt 6. Jun 2014, 14:13
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:
Angehängte Dateien
Dateityp: zip BeispielFarbigeItems.zip (2,3 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat