AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auf den canvas einer TListView zeichnen?

Ein Thema von softtouch · begonnen am 19. Sep 2024 · letzter Beitrag vom 20. Sep 2024
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#1

Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 16:10
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 16:34
Da bietet sich vielleicht OnAdvancedCustomDraw an, wobei das Zeichnen dann abhängig von Stage erfolgen sollte (vermutlich cdPostPaint ).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#3

AW: Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 16:43
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.
Miniaturansicht angehängter Grafiken
project2_psksy3hehd.png  
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

AW: Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 16:53
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#5

AW: Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 16:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.592 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 17:12
Dafür wäre die TVirtualTreeView bestens geeignet. Die einfache TListView verwendet ich so gut wie gar nicht mehr...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 17:14
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#8

AW: Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 19:06
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.
Miniaturansicht angehängter Grafiken
lv.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#9

AW: Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 20:17
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;
Miniaturansicht angehängter Grafiken
19-09-2024_20-13-30.png  
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#10

AW: Auf den canvas einer TListView zeichnen?

  Alt 19. Sep 2024, 20:36
Kommt leider keine Linie bei mir.
cdPostPaint kommt bei mir nicht, immer nur cdPrePaint.

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

Geändert von softtouch (19. Sep 2024 um 20:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz