Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Auf den canvas einer TListView zeichnen? (https://www.delphipraxis.net/215872-auf-den-canvas-einer-tlistview-zeichnen.html)

softtouch 19. Sep 2024 15:10

Auf den canvas einer TListView zeichnen?
 
Ich muss etwas auf den canvas einer listview zeichnen (linien um genauer zu sein, vertikal von einem item zu einem bestimmten anderen item).
Leider hat das listview control ja keinen onPaint event, wie kann ich das also realisieren?

Uwe Raabe 19. Sep 2024 15:34

AW: Auf den canvas einer TListView zeichnen?
 
Da bietet sich vielleicht
Delphi-Quellcode:
OnAdvancedCustomDraw
an, wobei das Zeichnen dann abhängig von
Delphi-Quellcode:
Stage
erfolgen sollte (vermutlich
Delphi-Quellcode:
cdPostPaint
).

softtouch 19. Sep 2024 15:43

AW: Auf den canvas einer TListView zeichnen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe ich schon versucht:

Delphi-Quellcode:
if stage=tcustomdrawstage.cdPostPaint then
begin
  sender.Canvas.MoveTo(0,0);
  sender.Canvas.LineTo(400,400);
end;
Da tut sich nichts. Und wenn ich folgendes mache:

Delphi-Quellcode:
sender.Canvas.MoveTo(0,0);
sender.Canvas.LineTo(400,400);
dann sieht es aus wie im Bild.

Uwe Raabe 19. Sep 2024 15:53

AW: Auf den canvas einer TListView zeichnen?
 
Ja, das ist etwas unvollständig implementiert. Um das OnAdvancedCustomDraw auszulösen muss auch ein OnAdvancedCustomDrawItem verdrahtet sein. Der Event muss aber nichts tun.

Kannst du mal ein Bild machen, wie es aussehen soll?

softtouch 19. Sep 2024 15:56

AW: Auf den canvas einer TListView zeichnen?
 
Die listview soll einfach normal wie immer aussehen, und soll einfach nur eine Linie von 0,0 - 400,400 haben (das ist natürlich nur zum Testen).
ich kann auch kein transparentes Panel drüber legen und in dem zeichnen, dann kann ich die items nicht mehr selektieren.

jaenicke 19. Sep 2024 16:12

AW: Auf den canvas einer TListView zeichnen?
 
Dafür wäre die TVirtualTreeView bestens geeignet. Die einfache TListView verwendet ich so gut wie gar nicht mehr...

Uwe Raabe 19. Sep 2024 16:14

AW: Auf den canvas einer TListView zeichnen?
 
Zitat:

Zitat von softtouch (Beitrag 1541228)
Die listview soll einfach normal wie immer aussehen, und soll einfach nur eine Linie von 0,0 - 400,400 haben

In deinem Screenshot geht die Linie ja auch von 0,0 - 400,400. Oben links wird sie halt vom Column-Header übermalt. Willst du denn auch in den Headerbereich malen?

softtouch 19. Sep 2024 18:06

AW: Auf den canvas einer TListView zeichnen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nein, eigentlich will ich dioe Linie rechts am Ende der letzten Spalte zeihcne, und zwar von item x nach item y.

So ungefähr wie im Bild.

Uwe Raabe 19. Sep 2024 19:17

AW: Auf den canvas einer TListView zeichnen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Etwa so?

Der Code dazu im OnAdvancedCustomDraw:
Delphi-Quellcode:
  if Stage = TCustomDrawStage.cdPostPaint then
  begin
    var R1 := Sender.Items[2].DisplayRect(drBounds);
    var R2 := Sender.Items[8].DisplayRect(drBounds);
    var P1 := TPoint.Create(R1.Right, R1.CenterPoint.Y);
    var P2 := TPoint.Create(R2.Right, R2.CenterPoint.Y);
    P2.X := ARect.Right - 10;
    P1.X := P2.X - 10;
    Sender.Canvas.Pen.Color := clRed;
    Sender.Canvas.Pen.Width := 2;
    Sender.Canvas.MoveTo(P1.X, P1.Y);
    Sender.Canvas.LineTo(P2.X, P1.Y);
    Sender.Canvas.LineTo(P2.X, P2.Y);
    Sender.Canvas.LineTo(P1.X, P2.Y);
  end;

softtouch 19. Sep 2024 19:36

AW: Auf den canvas einer TListView zeichnen?
 
Kommt leider keine Linie bei mir.
cdPostPaint kommt bei mir nicht, immer nur cdPrePaint.

Edit: Jetzt gehts. Die 2 anderen customdraw events waren weg.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 Uhr.
Seite 1 von 2  1 2      

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