Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

VirtualStringTree, CellPaint und der grafische Offset

  Alt 5. Jul 2016, 18:37
Hallo!

Ich bastle derzeit an einem neuen VST-Descendant und stehe dabei (wie schon einige Male in der Vergangenheit) vor folgendem Problem:

Einige Zeichenroutinen wie z.B. OnAfterCellPaint übergeben ein eigenes Canvas-Objekt und ein CellRect. Dabei bildet der VST sozusagen ein mehrfach virtuelles Koordinatensystem, das mir regelmäßig Kopfzerbrechen bereitet.

Delphi-Quellcode:
procedure TForm1.TreeAfterCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellRect: TRect);
begin
 // ...
end;
Dabei bildet TargetCanvas lediglich das Rechteck des jeweiligen Nodes ab, CellRect dann das Rechteck der mit Column angegebenen Spaltenzelle. Den horizontalen Offset relativ zu Tree.ClientRect bekomme ich notfalls über Header.Columns[n].Width heraus. Allerdings finde ich wirklich keine Möglichkeit, den vertikalen Offset relativ zu Tree.ClientRect zu bestimmen. Zur Verdeutlichung ein kleines Kunstwerk im Anhang...

Relevant wird das Ganze, wenn man Mausereignisse innerhalb einer Zelle abfangen will, weil dort OwnerDraw-Elemente vorhanden sind die interaktive Mausbedienung ermöglichen sollen. Dann muss ich von den globalen Mauskordinaten auf die relativen Control-Koordinaten (ClientToScreen und umgekehrt) herunter rechnen, komme dann aber mit den weiteren "Unter-Koordinatensystemen" nicht weiter weil ich nicht ermitteln kann, wo sich der aktuelle Node im Viewport befindet.

Grüße
Cody
Miniaturansicht angehängter Grafiken
image1.png  
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat