Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TListBox: Unabhängig vom Inhalt einfärben (https://www.delphipraxis.net/60041-tlistbox-unabhaengig-vom-inhalt-einfaerben.html)

kurtm1 2. Jan 2006 10:07


TListBox: Unabhängig vom Inhalt einfärben
 
Also ich möchte die Zeilen einer ListBox verschieden einfärben, jedoch unabhängig davon, ob bzw. wieviele Items es gibt.

Wenn neue Items dazukommen, sollen diese natürlich dann drübergezeichnet werden, so dass die Hintergrundfarbe ganz normal bleibt.

Dies hier ist ein Ansatz, färbt jedoch nur die Zeilen ein, wo sich auch wirklich Items befinden (http://www.swissdelphicenter.com/de/showcode.php?id=248)

jim_raynor 2. Jan 2006 10:12

Re: TListBox: Unabhängig vom Inhalt einfärben
 
Wenn ich mich Recht erinnere gibts auch bei TListBox die Eigenschaft Color mit der du die Hintergrundfarbe festlegen kannst ...

kurtm1 2. Jan 2006 10:15

Re: TListBox: Unabhängig vom Inhalt einfärben
 
Zitat:

Zitat von jim_raynor
Wenn ich mich Recht erinnere gibts auch bei TListBox die Eigenschaft Color mit der du die Hintergrundfarbe festlegen kannst ...

ok ich habe das nicht explizit dazugeschrieben:
Die Zeilen sollen abwechselnd eine andere Farbe bekommen (1. Grau, 2. Schwarz, 3. Grau, etc.) -> so wie in dem Beispiel was ich oben dazugehängt habe

toms 2. Jan 2006 10:43

Re: TListBox: Unabhängig vom Inhalt einfärben
 
moechtest du, dass auch Zeilen gefaerbt werden, welche keinen Text haben?

kurtm1 2. Jan 2006 11:03

Re: TListBox: Unabhängig vom Inhalt einfärben
 
Zitat:

Zitat von toms
moechtest du, dass auch Zeilen gefaerbt werden, welche keinen Text haben?

genau dies würde ich brauchen, ja

Lannes 2. Jan 2006 12:11

Re: TListBox: Unabhängig vom Inhalt einfärben
 
Hallo,
Zitat:

Zitat von kurtm1
Zitat:

Zitat von toms
moechtest du, dass auch Zeilen gefaerbt werden, welche keinen Text haben?

genau dies würde ich brauchen, ja

und genau das macht der Code vom SwissDelphiCenter,
überprüf mal ob Du den richtig eingebaut hast.

Hansa 2. Jan 2006 17:43

Re: TListBox: Unabhängig vom Inhalt einfärben
 
Wahrscheinlich geht der Code vom SwissDelphiCenter. Aber der kommt mir doch reichlich kompliziert vor. Das hier müßte doch reichen :

Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  i : Integer;
begin
  for i := 1 to Listbox1.Items.Count do begin
    if Index mod 2 = 0 then begin
      Listbox1.Canvas.Brush.Color := clBlue;
      Listbox1.Canvas.FillRect(Rect);
      Listbox1.Canvas.TextOut(Rect.Left, Rect.Top, Listbox1.Items[Index]);
    end
    else
      Listbox1.Canvas.TextOut(Rect.Left, Rect.Top, Listbox1.Items[Index]);
  end;
end;
Bei mir sind die Zeilen jetzt abwechseln weiß oder blau. Egal, ob sie neu hinzukommen, oder bereits da sind. Was macht denn da der Swiss-Code wichtiges ? :gruebel:

Lannes 2. Jan 2006 17:50

Re: TListBox: Unabhängig vom Inhalt einfärben
 
Hallo,

der Code färbt auch Zeilen die noch nicht belegt sind.

Keldorn 2. Jan 2006 17:51

Re: TListBox: Unabhängig vom Inhalt einfärben
 
Zitat:

Zitat von Hansa
Bei mir sind die Zeilen jetzt abwechseln weiß oder blau. Egal, ob sie neu hinzukommen, oder bereits da sind. Was macht denn da der Swiss-Code wichtiges ? :gruebel:

Er färbt den Hintergrund auch bei den Zeilen, wo kein Item hinterlegt ist (siehe screenshot). Dort wird kein Ondrawitem ausgelöst und wäre somit nur mit deinem code nicht möglich.

edit: hier war kein roter Kasten :angel2:

Mfg Frank

Hansa 2. Jan 2006 18:29

Re: TListBox: Unabhängig vom Inhalt einfärben
 
Und wozu soll das gut sein ? :shock: Man braucht doch selbst dann nur dafür sorgen, daß genügend Zeilen für den sichtbaren Bereich vorhanden sind. Z.B. so in der Richtung :

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i : Integer;
begin
  for i := 1 to (ListBox1.Height DIV Listbox1.ItemHeight) do
    ListBox1.Items.Add('');
end;
Kommen dann noch welche dazu, werden die auch wie vorher abwechselnd gefärbt. Aber ich sehe gerade, daß der Tip von Peter Below ist. Das erklärt einiges. :mrgreen: Wahrscheinlich ist der Code auch uralt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz