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 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.

Keldorn 2. Jan 2006 18:50

Re: TListBox: Unabhängig vom Inhalt einfärben
 
warum denn nicht?
In deinem code könntest du diese Items aber dann auch anklicken und müßtets den Rest des Codes auch noch daraufhin anpassen, denn die leeren Items willst du ja nicht wirklich weiterverarbeiten oder ;) ? Wenn du die Liste sortierst, kommst du auch nicht weiter.

robinWie 3. Jan 2006 09:22

Re: TListBox: Unabhängig vom Inhalt einfärben
 
Ich hatte gedacht mal sowas in die Playlist von einem Programm einzubauen, aber das soll nur ein Item gefärbt werden und es muss dann mit einem Timer order so ständig aktualisiert werden. Hab schon ein bischen rumprobiert aber es funktioniert nicht.
Kennt das jemand 'ne lösung?

kurtm1 3. Jan 2006 12:02

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

Zitat von Lannes
Hallo,

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

Das stimmt, allerdings wird nur dann gefärbt, wenn eben mindestens ein Item in der Listbox ist

Lannes 3. Jan 2006 12:52

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

@robinWie:
Deine zusätzliche Frage in diesem Thread steht genau im Gegensatz zum Titel:
Zitat:

Unabhängig vom Inhalt einfärben
Mit Hier im Forum suchenListBox AND Farbe findest Du so um die 30 Threads,
da ist bestimmt etwas passendes dabei :wink:
Wenn Du dann noch Probleme hast,
kannst Du in einem eigenem Thread eine diesbezügliche Frage stellen.


@kurtm1:
Erstell doch in die ListBox einen leeren Eintrag.
Entweder im OnCreate der Form mit:
Delphi-Quellcode:
ListBox1.Items.Add('');
oder im Objekt-Inspektor bei der Eigenschaft Items,
indem Du mit der Taste [Enter] einen Zeilenumbruch im String-Editor erzeugst.
Dann musst Du nur darauf achten,
das vor dem Füllen der Listbox der leere Eintrag gelöscht wird.


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