Delphi-PRAXiS
Seite 2 von 3     12 3      

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 Bestimmte Zeilen einer TListbox färben (https://www.delphipraxis.net/69098-bestimmte-zeilen-einer-tlistbox-faerben.html)

Hansa 14. Jun 2007 12:21

Re: Bestimmte Zeilen einer TListbox färben
 
Ich würde mal in Betracht ziehen, die Objects-Methode zu benutzen. Die ist etwas versteckt (in den Items).

Delphi-Quellcode:
Listbox1.Items.AddObject()
-> F1

Da kann man schlicht etwas hinterlegen. In diesem Fall :

Delphi-Quellcode:
Record
  Anzeige : boolean;
end;

obscureSg 14. Jun 2007 20:25

Re: Bestimmte Zeilen einer TListbox färben
 
:( geht nicht!!! hier nochma ein code :



Delphi-Quellcode:
implementation

{$R *.DFM}


procedure ZeileFaerben(Zeile:integer;Farbe:integer;Listbox1:TListbox;
  Index:Integer;Rect:TRect);
begin
  if Index<>Zeile then
    Farbe:=clBlack;

  Listbox1.Canvas.Brush.Color:=clWhite;
  Listbox1.Canvas.Pen.Color:=Farbe;
  Listbox1.Canvas.FillRect(Rect);
  Listbox1.Canvas.Font.Color:=Farbe;
  Listbox1.Canvas.TextOut(Rect.Left,Rect.Top,Listbox1.Items[Index]);
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  if Control is TListbox then
  begin
    TListbox(Control).Canvas.FillRect(Rect);
    if TListbox(Control).Items.Strings[Index] = 'verliehen' then
      TListbox(Control).Canvas.Font.Color := clRed
    else
    if odSelected in State then
      TListbox(Control).Canvas.Font.Color := graphics.clHighlightText
    else
      TListbox(Control).Canvas.Font.Color := graphics.clBtnText;

    TListbox(Control).Canvas.TextOut(Rect.Left, Rect.Top, TListbox(Control).Items[Index]);
  end;
end;

end.

Klaus01 14. Jun 2007 20:29

Re: Bestimmte Zeilen einer TListbox färben
 
Delphi-Quellcode:
TListbox(Control).Canvas.FillRect(Rect);
    if TListbox(Control).Items.Strings[Index] = 'verliehen' then
      TListbox(Control).Canvas.Font.Color := clRed
Besteht der Eintrag in der Listbox auch nur aus "verliehen" oder
ist "verliehen" nur eine Bestandteil des Eintrages?


Und nocht etwas "geht nicht" ist eine nicht sehr hilfreiche Fehlerbeschreibung.
Grüße
Klaus

obscureSg 14. Jun 2007 20:44

Re: Bestimmte Zeilen einer TListbox färben
 
Es geht um eine "Verliehen" funktion für meine Filmdatenbank.da ist dann halt sag ich mal der Film : Oceans 11 Status: Verliehen.
In der Zeil eist halt das Wort verliehen drin. Wenn das in der Ganzen Listbox der Fall ist, soll jeweils die Zeile mit dem wort"verliehen" rote schreift erhalten. hört sich ja simpel an, isses nur leider nicht =(

Hansa 14. Jun 2007 20:47

Re: Bestimmte Zeilen einer TListbox färben
 
kurze Nebenfrage : gelingt es Dir, überhaupt eine Zeile der Listbox zu färben ? Die paar Zeilen könnten nämlich von mir sein, oder von Luckie. Der hatte mir mal bei sowas geholfen.

wg. roter Kasten : doch, ist einfach.

obscureSg 14. Jun 2007 20:50

Re: Bestimmte Zeilen einer TListbox färben
 
ich shcaffe es lediglich die schriftfarbe für alle zeilen der listbox zu färben. so ein "roter kasten" wäre auch eine hilfreiche sache.das klingt in meinen ohren aber noch schwerer =(

Klaus01 14. Jun 2007 20:51

Re: Bestimmte Zeilen einer TListbox färben
 
Wenn das Wort mit anderen Wörtern in der Zeile steht kannst Du es nicht
so
Delphi-Quellcode:
if TListbox(Control).Items.Strings[Index] = 'verliehen' then
abfragen.

Dann solltest Du mit pos(substring,String) anfangen.
z.B. so:

Delphi-Quellcode:
if pos('verliehen',TListbox(Control).Items.Strings[Index]) > 0 then
  // Zeile färben
Grüße
Klaus

obscureSg 14. Jun 2007 20:55

Re: Bestimmte Zeilen einer TListbox färben
 
hab ich jetzt auch probiert, geht aber auch nicht! der färbt die zeilen einfach garnicht!ich hatte es mal mit einer forschleife probiert sodass er bei der listbox1 von zeile 0 bis litbox1.items.count (letzten eintrag der listbox) nach dem wort"verliehen" sucht und diese zeile dann färben soll1 geht aber überhaupt nicht!


Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  if Control is TListbox then
  begin
    TListbox(Control).Canvas.FillRect(Rect);
    if pos('verliehen',TListbox(Control).Items.Strings[Index]) > 0 then
      TListbox(Control).Canvas.Font.Color := clRed
    else
    if odSelected in State then
      TListbox(Control).Canvas.Font.Color := graphics.clHighlightText
    else
      TListbox(Control).Canvas.Font.Color := graphics.clBtnText;

    TListbox(Control).Canvas.TextOut(Rect.Left, Rect.Top, TListbox(Control).Items[Index]);
  end;
end;

Klaus01 14. Jun 2007 21:03

Re: Bestimmte Zeilen einer TListbox färben
 
Zitat:

Zitat von Delphi Hilfe
Description

Use OnDrawItem to write a handler for drawing of the items in list boxes with the Style values lbOwnerDrawFixed, lbOwnerDrawVariable, or lbVirtualOwnerDraw. OnDrawItem occurs when the list box needs to display an item. OnDrawItem occurs only for owner-draw list boxes.

Dann klappt es auch mit dem Nachbarn.

Wenn der Style der Listbox(im Object Inspector) auf lbStandard steht (default) dann wird das Ereignis nicht ausgelöst.

Grüße
Klaus

Hansa 14. Jun 2007 21:04

Re: Bestimmte Zeilen einer TListbox färben
 
Zitat:

Zitat von obscureSg
..es lediglich die schriftfarbe für alle zeilen der listbox zu färben. so ein "roter kasten" wäre auch eine hilfreiche sache.das klingt in meinen ohren aber noch schwerer =(

Ähm, :mrgreen: der "rote Kasten" bezog sich auf mein Posting, weil irgendeiner vorher was abgeschickt hatte. :lol: Aber so könnte das schon aussehen. Suche nachher mal noch ein Beispiel. Das ist doch Kleinkram und muss gehen. :cat:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 Uhr.
Seite 2 von 3     12 3      

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