Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Virtual String Tree Node-Text versetzen? (https://www.delphipraxis.net/191425-virtual-string-tree-node-text-versetzen.html)

a.def 14. Jan 2017 12:45


Virtual String Tree Node-Text versetzen?
 
Ist es irgendwie möglich einen den Text eines Nodes im Virtual String Tree etwas weiter nach links zu setzen?
Genauer gesagt möchte ich das bei allen Nodes mit
Delphi-Quellcode:
Sender.GetNodeLevel(Node)
> 0 machen.

Ich weiß wie ich Texte und Hintergründe färbe aber obiges Problem bekomme ich nicht gelöst.

Edit
ich denke ich habe es geschafft. Nur ob schön, weiß ich nicht

Delphi-Quellcode:
procedure TForm1.VSTDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: string; const CellRect: TRect; var DefaultDraw: Boolean);
var
 DrawFormat: Cardinal;
 R: TRect;
begin
 if (Sender.GetNodeLevel(Node) > 0) and (Node.ChildCount = 0) then
  begin
   DefaultDraw := False;
   R := CellRect;
   R.Left := R.Left - TVirtualStringTree(Sender).Indent;

   DrawFormat := DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE;
   Windows.DrawTextW(TargetCanvas.Handle, PWideChar(Text), Length(Text), R, DrawFormat);
  end;
end;

Aviator 14. Jan 2017 13:32

AW: Virtual String Tree Node-Text versetzen?
 
Es gibt diverse Möglichkeiten. Entweder so wie du es gemacht hast mit OwnerDraw oder aber auch über die Eigenschaften des Trees. Schau dir mal die Properties
Delphi-Quellcode:
TextMargin
und
Delphi-Quellcode:
Indent
an.

Bei unterschiedlichen Einzügen pro Level bietet sich entweder Indent, oder vielleicht in dem Fall noch besser, OwnerDraw an.

Vielleicht solltest du aber die
Delphi-Quellcode:
Canvas.TextOut()
Procedure verwenden anstatt
Delphi-Quellcode:
Windows.DrawTextW()
. Macht zwar schlussendlich keinen Unterschied, lässt sich aber vielleicht besser handlen. Das
Delphi-Quellcode:
TargetCanvas
hast du ja bereits als Parameter übergeben bekommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 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