Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zeichnen in TListeView SubItem?
bruce185 - Do 10.11.11 11:58
Titel: Zeichnen in TListeView SubItem?
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:
Delphi-Quelltext
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
Narses: Topic aus Multimedia / Grafik verschoben am Do 10.11.2011 um 14:01
Horschdware - Do 10.11.11 13: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.
bruce185 - Do 10.11.11 13: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:
Delphi-Quelltext
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:
Delphi-Quelltext
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.
Teekeks - Do 10.11.11 13:30
Was öfter mal hilft:
Die voreingestellte farbe merken, dann deine eigenen Sachen machen und danach die gemerkte Farbe wieder zurück stellen.
bruce185 - Do 10.11.11 13: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
Narses: 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:
Delphi-Quelltext
1:
| frmMain.Liste.DoubleBuffered := true; |
Gruss
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!