Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zeile einer ListBox einfärben (https://www.delphipraxis.net/65622-zeile-einer-listbox-einfaerben.html)

ghost007 18. Mär 2006 23:34


Zeile einer ListBox einfärben
 
Hallo,
ich möchte z.b. die 5te zeile einer listbox grün einfärben.
Wie mach ich das?

Matze 18. Mär 2006 23:43

Re: Zeile einer ListBox einfärben
 
Hi, das geht so in der Art:

Delphi-Quellcode:
// ListBox-Style muss auf "lbOwnerDrawFixed" sein
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  if Index = 4 then // 5. Zeile
  begin
    ListBox1.Canvas.Brush.Color := clRed;
    ListBox1.Canvas.Pen.Color := clWhite;
    ListBox1.Canvas.Rectangle(Rect);

    ListBox1.Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, ListBox1.Items[Index]);
  end;
end;
Aber bemühe doch bitte die Suchfunktion, das wurde schon oft gefragt.

ghost007 18. Mär 2006 23:51

Re: Zeile einer ListBox einfärben
 
da hab ich blos 1 problem ...
wenn ich nen button nehm und mach onclick
Delphi-Quellcode:
ListBox1.Items.Add('test');
Dann kann man die einträge oberhalb von der 5ten zeile nicht lesen =/

Sharky 19. Mär 2006 06:23

Re: Zeile einer ListBox einfärben
 
Zitat:

Zitat von ghost007
... kann man die einträge oberhalb von der 5ten zeile nicht lesen =/

Hai ghost007,

das liegt an einem kleinen Fehler im Code von Matze ;-)
Da sein .TextOut innerhalb des Blocks mit der IF-Abfrage steht wird das Item nur für die fünfte Zeile gezeichnet.

So wird ein Schuh draus:
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (control as TListBox) do
  begin
    if Index = 4 then // Farben für die 5. Zeile ändern.
    begin
      Canvas.Brush.Color := clRed;
      Canvas.Pen.Color := clWhite;
      Canvas.Rectangle(Rect);
    end;
    Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]); // Item wird immer gezeichnet
  end;
end;

ghost007 19. Mär 2006 09:28

Re: Zeile einer ListBox einfärben
 
Vielen danke, damit hat sich die sache erledigt :) :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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