Zeichnen in TListeView SubItem?
spacer
Autor Nachricht
bruce185
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 282

winXP
D7 Ent
BeitragVerfasst: Do 10.11.11 12:58 
Hallo,
wenn ich versuche einen Rect in TListView SubItem zu zeichnen, dann wird die komplette fläche von z.B. SubItem = 3 gefüllt, was ich nicht möchte.

So hab ich es versucht:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TfrmMain.ListeCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
if SubItem = 3 then
begin
Liste.Canvas.Brush.Color := clRed;
Liste.Canvas.Brush.Style := bsSolid;
Liste.Canvas.FillRect(rect(0, 0, 10, 5));
end
else begin
Liste.Canvas.Brush.Color := clWhite;
end;
end;


Ich danke euch schonmal für die Hilfe.


Moderiert von user profile iconNarses: Topic aus Multimedia / Grafik verschoben am Do 10.11.2011 um 14:01
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: Do 10.11.11 14:05 
Ich weiss ja nicht genau, was du vorhast... aber:

Unter Umständen mag es dir helfen, nicht FillRect, sondern FrameRect zu verwenden.

Zum anderen mag es in deinem Interesse sein, den ursprünglichen Text wieder manuell zu zeichnen, da dieser (wenn ich mich richtig erinnere) in deinem Fall überschrieben (/-zeichnet) werden dürfte.

_________________
Delphi: XE - OS: Windows 7 Professional x64
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bruce185 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 282

winXP
D7 Ent
BeitragVerfasst: Do 10.11.11 14:20 
Danke Dir.
Mit FrameRect funktioniert das auch nicht.
Ich möchte einfach ein Rechteck mit der breite von z.B. 10 Pixel in ListView Spalte nr 3 zeichnen, aber er füllt immer die komplette Spalte aus.
Ich denke wegen dieser Zeile:
ausblenden Delphi-Quelltext markieren
1:
Liste.Canvas.Brush.Color := clRed;


Das müsste ja irgendwie machbar sein, eine bestimmte breite von TRect in Spalte nr 3 in Farbe rot zu zeichnen.

Danke schonmal.

Edit: Ich hab es jetzt so gelöst:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  if subitem<>4 then begin
DefaultDraw:=True;
exit;
end;
DefaultDraw:=False;
r:=item.DisplayRect(drBounds);
for i:=0 to 3 do
r.left:=r.left+Liste.Columns[i].Width;
r.right:=r.left+Liste.Columns[4].Width-20;
Liste.Canvas.Brush.color:=clGreen;
Liste.canvas.FillRect(r);


Danke trotzdem für die Hilfe.


Zuletzt bearbeitet von bruce185 am Do 10.11.11 14:31, insgesamt 1-mal bearbeitet
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Teekeks
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 204
Erhaltene Danke: 22

OpenSUSE 11.4
Lazarus 0.9.31
BeitragVerfasst: Do 10.11.11 14:30 
Was öfter mal hilft:
Die voreingestellte farbe merken, dann deine eigenen Sachen machen und danach die gemerkte Farbe wieder zurück stellen.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bruce185 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 282

winXP
D7 Ent
BeitragVerfasst: Do 10.11.11 14:34 
Ich habe das jetzt gelöst und oben mein Beitrag editiert wie ich es gelöst habe.

Ich danke dir trotzdem für die Hilfe.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Hallo nochmal,
wenn ich jetzt mehrere Einträge in der ListView habe und über Repaint neu zeichne, dann Flackert die Liste extrem.
Ich habe versucht DoubleBuffered einzusetzen, leider hilft mir das auch nicht weiter.

Kann mir da Vielleicht jemand Weiterhelfen?

Danke schonmal.

Edit: Ich hab für die Form DoubleBuffered gesetzt gehabt, deshalb hat es für die Liste nicht funktioniert.
Damit funktioniert es jetzt:
ausblenden Delphi-Quelltext markieren
1:
frmMain.Liste.DoubleBuffered := true;


Gruss
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home