TListbox: eine Zeile einfärben

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

TListbox: eine Zeile einfärben

Beitrag von malabarista »

Ich möchte gerne bei TListbox einzelne Zeilen in rot darstellen.
Wie ist das möglich ? Oder geht das nicht ?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: TListbox: eine Zeile einfärben

Beitrag von m.fuchs »

Dann musst du selber zeichnen. Stell den Style der ListBox auf lbOwnerDrawFixed und mach dann folgendes in OnDrawItem:

Code: Alles auswählen

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState);
var
  ListCanvas: TCanvas;
begin
  ListCanvas := TListBox(Control).Canvas;
  if Index = 3 then begin
    ListCanvas.Pen.Color := clRed;
    ListCanvas.Brush.Color := clRed;
    ListCanvas.Rectangle(ARect);
  end;
  ListCanvas.TextOut(ARect.Left + 1, ARect.Top + 1, TListBox(Control).Items[Index] );
end;


Sollte natürlich noch ein wenig angepasst werden, damit es vertikal schön zentriert ist oder Ähnliches.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: TListbox: eine Zeile einfärben

Beitrag von malabarista »

Da habe ich mich nicht richtig ausgedrückt:
Ich wollte nur den Text rot, der Hintergrund sollte weiss bleiben.
Aber mit .Font.Color klappt das.
Dankeschön !

Antworten