Autor Beitrag
Christoph Englmann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: Fr 15.04.05 15:06 
Hallo,

such schon seit einiger zeit im forum nach der thematik Hintergrundfarbe einer Zeile/Text einer Listbox ändern...
hab auch einiges gefunden, nur leider erscheint bei mir nachdem ich nachfolgenden Quellcode erstellt habe und die Eigenschaft OwnerDraw auf true gestellt habe trotz vorhandener Daten ein leere listbox...
hier mein code
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
procedure TFormHauptfenster.Verkehrsmeldungen_Laden;

var
  i :integer;

begin
  //Listview vorbereiten
  lstviewMeldungen.Items.Clear;
 if lstviewMeldungen.Columns.Count < 2 then
 begin
  for i := 0 to 7 do
  begin
    lstviewMeldungen.columns.Add;
  end;
 end;
  lstviewMeldungen.Columns[0].Caption := 'Nr.';
  lstviewMeldungen.Columns[0].Width := 50;
  lstviewMeldungen.Columns[1].Caption := 'Ereignis';
  lstviewMeldungen.Columns[1].Width := 70;
  lstviewMeldungen.Columns[2].Caption := 'Datum/Zeit';
  lstviewMeldungen.Columns[2].Width := 80;
  lstviewMeldungen.Columns[3].Caption := 'Ort';
  lstviewMeldungen.Columns[3].Width := 110;
  lstviewMeldungen.Columns[4].Caption := 'Von';
  lstviewMeldungen.Columns[4].Width := 120;
  lstviewMeldungen.Columns[5].Caption := 'Bis';
  lstviewMeldungen.Columns[5].Width := 120;
  lstviewMeldungen.Columns[6].Caption := 'Prio.';
  lstviewMeldungen.Columns[6].Width := 50;
  lstviewMeldungen.Columns[7].Caption := 'Beschreibung';
  lstviewMeldungen.Columns[7].Width := 150;

  lstviewMeldungen.Repaint;


Query1.SQL.Clear;
Query1.SQL.Add('select * from VZM_VERKEHRSMELDUNGEN WHERE ( (DEL <> ''TRUE'') OR (DEL is null) ) order by ID asc');
Query1.Active := true;


if Query1.RecordCount <> 0 then
begin
  Query1.First;
  repeat
    if Query1.FieldByName('DEL_DATE').AsString <>'' then
  begin
    Farbe := 'rot';
  end else
  begin
    Farbe := 'schwarz';

  end;
    lstviewMeldungen.Items.Add;
    i := lstviewMeldungen.Items.Count-1;
    lstviewMeldungen.Items.Item[i].Caption := Query1.FieldByName('ID').AsString;
    lstviewMeldungen.Items.Item[i].SubItems.Add(Query1.FieldByName('EREIGNIS').asstring);
    lstviewMeldungen.Items.Item[i].SubItems.Add(Query1.FieldByName('DATUM').asstring);
    lstviewMeldungen.Items.Item[i].SubItems.Add(Query1.FieldByName('ORT').asstring);
    lstviewMeldungen.Items.Item[i].SubItems.Add(Query1.FieldByName('VON').asstring);
    lstviewMeldungen.Items.Item[i].SubItems.Add(Query1.FieldByName('BIS').asstring);
    lstviewMeldungen.Items.Item[i].SubItems.Add(Query1.FieldByName('PRIORITAET').asstring);
    lstviewMeldungen.Items.Item[i].SubItems.Add(Query1.FieldByName('BESCHREIBUNG').asstring);
  Query1.Next;
  until Query1.Eof;

end;


end;



procedure TFormHauptfenster.lstviewMeldungenDrawItem(
  Sender: TCustomListView; Item: TListItem; Rect: TRect;
  State: TOwnerDrawState);
begin


if Farbe = 'rot' then 
begin
//  lstviewMeldungen.Canvas.Font.Color := clRed;
//  lstviewMeldungen.Canvas.Pen.Color := clRed;
  lstviewMeldungen.Canvas.Brush.Color := clRed;
end;

if Farbe = 'schwarz' then 
begin
//  lstviewMeldungen.Canvas.Font.Color := clblack;
//  lstviewMeldungen.Canvas.Pen.Color := clblack;
  lstviewMeldungen.Canvas.Brush.Color := clblack;
end;




end;




danke für jede hilfe
christoph
xasx
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 34

WinXP Pro, Win 2k3 ServEnt
D2k5 PE, VS 2005
BeitragVerfasst: Fr 15.04.05 15:17 
Du musste, denke ich, den Text und den Hintergrund noch manuell zeichnen.
Es genügt nicht, einfach nur die Farben festzulegen.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 15.04.05 15:20 
Hallo

du haust Listbox und Listview durcheinander.

Wenn du owderdraw und drawitem verwendest, bist du fürs Zeichnen selber verantwortlich. Du setzt nur die Farbe, ausgegeben wird nix. Es kommt drauf an, was dui machen willst, wenn es einfach ist, dann laß ownerdraw auf false und nutze das oncustomdrawitem-ereignis und setz dort nur die Farbe.

Mfg frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Christoph Englmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: Fr 15.04.05 16:09 
danke, bin schon ein schritt weiter, allerdings wird jetzt entweder der gesamte hintergrund der listview schwarz oder rot gefärbt.
ich möchte aber je nach eintrag eine Zeile schwarz oder aber rot haben...

danke
christoph
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 15.04.05 16:26 
na, dann machs doch einfach ;). wann wird eine Zeile rot oder schwarz geschrieben? das weißt du doch sicher an dem Imem selber, oder? Das zu zeichnende Item wird doch mitübergeben und das kannst du auswerten und die Farbe entsprechend setzen.
Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Christoph Englmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: Fr 22.04.05 17:23 
hallo danke nochmal,

ja ist mir schon klar, aber frage:
wie kann ich die farbe entsprechend setzen?
entweder er schreibt mir alles rot, oder aber alles schwarz...
wie mach ich es dass eine zeile rot und die nächsten beiden schwarz geschrieben werden??

danke
sunlooker
Hält's aus hier
Beiträge: 1

WinXP SP2, Suse 9.2
D2005 ARC
BeitragVerfasst: Do 09.06.05 10:03 
Hey du!

Ich hatte grad das gleiche Problem wie du, und ich habs folgendermaßen gelöst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TMainForm.BillViewCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
         if (Item.Index mod 2) = 1 then
              begin
              BillView.Canvas.Brush.color := clwhite;
              end else
              begin
              BillView.Canvas.Brush.color := $00DFF4FF;
              end;
end;


somit hat in der liste jede zweite Zeile eine andere Hintergrundfarbe, der Text wird korrekt angezeigt, und selbst beim späteren draufklicken verändert sich die farbe nicht.

Hoffe das hilft dir noch weiter!