@sh17
Er steht immer oben direkt am Anfang. Ich will ihn aber vertikal Zenriert.
Normalerweise kalkuliert er über das Ereignis onMeasureItem ja automatisch die Nodeheight, sodas die Zellenhöhe dem
Text angepasst wird. Ich habe diesen Wert dann einfach noch was hinzuadiert, weil ich über und unter dem Text noch einen
Abstand will. Auch habe ich versucht im onbeforecellpaint selber zu Zeichen, jedoch Zeichnet er dann alles in der
selben Zeile. Von OG Karotte habe ich diesen Codeschnipsel bekommen, jedoch muss bei VST irgendwas an den Ereignisroutinen geädert worden sein. Bei der aktuelle Version sind verschiedene Parameter in der Ereignisroutine nicht mehr verfügbar
Delphi-Quellcode:
procedure TfrmMain.MyVSTBeforeCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node:
PVirtualNode; ItemRect: TRect; var CustomDraw: Boolean); //var Customdraw existiert bei mir nicht.
var
S: WideString;
MyData: PTMyNodeData;
TheRect: TRect;
begin
MyNodeData := Sender.GetNodeData(Node); // Daten holen
S := System.Copy(MyNodeData.Text, 1, Length(MyNodeData.Text)); // Text holen
// <-- hier Berechnung für TheRect (Ausmasse der zubefüllenden Zelle; müsste ItemRect entspr.) einfügen
Windows.DrawTextW(TargetCanvas.Handle, PWideChar(S), Length(S),
TheRect, DT_EXPANDTABS or DT_SINGLELINE or DT_END_ELLIPSIS or
DT_CENTER or DrawTextBiDiModeFlagsReadingOnly); // Text ausgeben (DT_CENTER => Zentriert im 'TheRect')
CustomDraw := True; // Damit der VST die Zelle nicht nochmal zeichnet ???
end;