Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Große Probleme mit VirtualStringTree (https://www.delphipraxis.net/193070-grosse-probleme-mit-virtualstringtree.html)

Aviator 18. Jun 2017 19:06

AW: Große Probleme mit VirtualStringTree
 
Für den Fall könntest du mal den Automatismus vom VST ausprobieren. Aktiviere hierzu
Delphi-Quellcode:
toAutoSpanColumns
(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.

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.

SneakyBagels 18. Jun 2017 20:10

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;

Towmuz 19. Jun 2017 07:46

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:
OnInitNode
festlegen:

Delphi-Quellcode:
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;
Dann kann das händische Pinseln im
Delphi-Quellcode:
OnDrawText
raus und mit
Delphi-Quellcode:
OnGetText
dann:

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;

SneakyBagels 19. Jun 2017 08:03

AW: Große Probleme mit VirtualStringTree
 
Zitat:

habe jetzt nicht so ganz genau den Thread komplett gelesen,
Ist kein Problem und ich bedanke mich für die Hilfe aber das ist nicht das was ich suche. Ich suche eine Lösung die mir die zweite Zeile der ersten Spalte über alle Spalten hinweg durchgehend anzeigt.

Aviator 19. Jun 2017 08:39

AW: Große Probleme mit VirtualStringTree
 
Zitat:

Zitat von SneakyBagels (Beitrag 1374834)
Zitat:

habe jetzt nicht so ganz genau den Thread komplett gelesen,
Ist kein Problem und ich bedanke mich für die Hilfe aber das ist nicht das was ich suche. Ich suche eine Lösung die mir die zweite Zeile der ersten Spalte über alle Spalten hinweg durchgehend anzeigt.

Ich bin immer noch der Meinung, dass dir an der Stelle
Delphi-Quellcode:
toAutoSpanColumns
helfen müsste. Das hat nämlich genau den Effekt den du suchst.

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:
DefaultDraw
auf
Delphi-Quellcode:
False
setzen und auch selbst dort nichts zeichnen. Nur
Delphi-Quellcode:
toAutoSpanColumns
nimmt dir die Arbeit schon ab. :cyclops:

SneakyBagels 19. Jun 2017 08:43

AW: Große Probleme mit VirtualStringTree
 
Wie bereits erwähnt habe ich das schon getestet.
Die Texte zeichne ich bereits selber.

Towmuz 19. Jun 2017 09:17

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

SneakyBagels 19. Jun 2017 10:20

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 04:20 Uhr.
Seite 4 von 4   « Erste     234   

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