![]() |
AW: Große Probleme mit VirtualStringTree
Für den Fall könntest du mal den Automatismus vom VST ausprobieren. Aktiviere hierzu
Delphi-Quellcode:
(glaube so heißt es) in den TreeOptions und füge dann nur in Col1 (bzw. in der Column, ab der der Text angezeigt werden soll) den Text ein. Bei den nachfolgenden Columns lässt du den CellText leer.
toAutoSpanColumns
Der VST verlängert dann automatisch den Text über die anderen Spalten hinweg. Ob das mit Multiline funktioniert weiß ich nicht. Die Node Höhe sollte da aber keine Rolle spielen. |
AW: Große Probleme mit VirtualStringTree
Funktioniert alles leider nicht.
Ich brauche leider ja auch die anderen Columns. Chaotisch aber so sieht es aus
Delphi-Quellcode:
procedure TForm2.VSTDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: string; const CellRect: TRect;
var DefaultDraw: Boolean); var Data: TVSTData; DrawFormat: Cardinal; R: TRect; s: string; begin DefaultDraw := False; R := CellRect; if Column = 0 then R.Left := R.Left + VST.Indent; Data := Node.GetData<TVSTData>; // TargetCanvas.TextOut(CellRect.Left, CellRect.Top + 2, Text); DrawFormat := DT_NOPREFIX or DT_VCENTER; // or DT_SINGLELINE; // if Data.bHasDescription then // R.Top := R.Top - 14; // Winapi.Windows.DrawTextW(TargetCanvas.Handle, PWideChar(Text), Length(Text), R, DrawFormat); if Data.bHasDescription and (Column = 0) then begin s := '123 123 123 123 123 ' + sLineBreak + '123 123 123 123 123 123 123 123 123 123 '; // R.Top := R.Top + 28; // TargetCanvas.TextOut(CellRect.Left, CellRect.Top + 18, s); Winapi.Windows.DrawTextW(TargetCanvas.Handle, PWideChar(s), Length(s), R, DrawFormat); end else if (Column = 0) then Winapi.Windows.DrawTextW(TargetCanvas.Handle, PWideChar(Text), Length(Text), R, DrawFormat); end; |
AW: Große Probleme mit VirtualStringTree
Moin,
habe jetzt nicht so ganz genau den Thread komplett gelesen, aber ich glaub du könntest in diesem Fall auch einfach im
Delphi-Quellcode:
festlegen:
OnInitNode
Delphi-Quellcode:
Dann kann das händische Pinseln im
procedure TForm2.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
begin if Length(VST.GetNodeData<TDeinObject>(Node).Col1) > 10 then begin VST.MultiLine[Node] := True; VST.NodeHeight[Node] := 40; // oder sonstwas wie´s dir passt end end;
Delphi-Quellcode:
raus und mit
OnDrawText
Delphi-Quellcode:
dann:
OnGetText
Delphi-Quellcode:
procedure TForm2.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
var s: string; begin case Column of 0: begin if Length(VST.GetNodeData<TDeinObject>(Node).Col1) > 10 then begin s := 'blablalblabla' + #13#10 + 'blablabla'; end else begin s := 'blabla'; end; CellText := s; end; end; end; |
AW: Große Probleme mit VirtualStringTree
Zitat:
|
AW: Große Probleme mit VirtualStringTree
Zitat:
Delphi-Quellcode:
helfen müsste. Das hat nämlich genau den Effekt den du suchst.
toAutoSpanColumns
Alternativ kannst du auch das Zeichnen des Textes selbst übernehmen mit dem DrawText Event und einfach dann an den Zellen in denen nichts gezeichnet wird
Delphi-Quellcode:
auf
DefaultDraw
Delphi-Quellcode:
setzen und auch selbst dort nichts zeichnen. Nur
False
Delphi-Quellcode:
nimmt dir die Arbeit schon ab. :cyclops:
toAutoSpanColumns
|
AW: Große Probleme mit VirtualStringTree
Wie bereits erwähnt habe ich das schon getestet.
Die Texte zeichne ich bereits selber. |
AW: Große Probleme mit VirtualStringTree
Liste der Anhänge anzeigen (Anzahl: 2)
Ah na denn, siehe Grafik ob ich´s nun richtig verstanden hab :D
ansonsten Bsp.Projekt im Anhang. Für sowas gibt´s das AfterItemPaint, wenn du das im OnDrawText benutzt kannst du das Rectangle zwar definieren wie du willst, es wird trotzdem jedesmal die Column (also auch die NachbarColumns) neu gezeichnet, und somit deine übermalte Column kurz gezeichnet und dann gleich wieder überpinselt. Edit: TreeView Version 6.4.1. aber das sollte wohl kaum einen Unterschied machen |
AW: Große Probleme mit VirtualStringTree
Bild sieht gut aus. Ich teste das gleich mal!
Ich antworte gleich auch im Detail nur habe gerade keine zeit. Also: ich teste das gleich und melde mich :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr. |
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