Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   VirtualStringTree stellt DefaultText (Node) nicht dar (https://www.delphipraxis.net/189529-virtualstringtree-stellt-defaulttext-node-nicht-dar.html)

norwegen60 21. Jun 2016 14:49

VirtualStringTree stellt DefaultText (Node) nicht dar
 
Hallo zusammen,

eigentlich sollte VirtualStringtree bei einem einfachen
Delphi-Quellcode:
  Node:=VST.AddChild(nil);
  VST.AddChild(Node);
zwei Knoten anlegen die mit dem DefaulText "Node" beschriftet sind.
Nach der Umstellung auf Delphi 10 und Update von VirtualStringtree auf 6.3 geht das nicht mehr. Weiß jemand warum nicht?

Grüße
Gerd

Zacherl 21. Jun 2016 15:03

AW: VirtualStringTree stellt DefaultText (Node) nicht dar
 
Neues Projekt und nichts geändert in den VST Properties?

Edit: Grade auf 6.3 geupdated und kann das Problem bestätigen. Die Nodes werden zwar angelegt, aber der Text bleibt leer.

norwegen60 2. Jul 2016 19:16

AW: VirtualStringTree stellt DefaultText (Node) nicht dar
 
Hat jemand eine Idee woran das liegt? Bin mal mit dem Debugger durch und meine, dass die Variablekorrekt initialisiert wird.

Zacherl 4. Jul 2016 19:06

AW: VirtualStringTree stellt DefaultText (Node) nicht dar
 
Zitat:

Zitat von norwegen60 (Beitrag 1341823)
Hat jemand eine Idee woran das liegt? Bin mal mit dem Debugger durch und meine, dass die Variablekorrekt initialisiert wird.

Bist du auf dieses alte Standardverhalten denn wirklich angewiesen? OnGetText() mit
Delphi-Quellcode:
CellText := 'Node'
zu implementieren, würde dies als Workaround (zumindest für die Runtime) wiederherstellen.

Habe kurz mal überflogen und die internen Variablen sind zu Begin tatsächlich auch korrekt mit DefaultText initialisiert, aber werden dann irgendwo später wieder resetted. Wo genau und warum, habe ich grade aber noch nicht sehen können.

norwegen60 5. Jul 2016 10:51

AW: VirtualStringTree stellt DefaultText (Node) nicht dar
 
Nein angewiesen bin ich nicht. Setze den Text eben in OnGetText wenn ich nur schnelle was testen will.
Es hätte mich eher interessiert, wo die Info verloren geht.

Zacherl 5. Jul 2016 15:20

AW: VirtualStringTree stellt DefaultText (Node) nicht dar
 
Habe die Stelle gefunden, allerdings kann ich zu der Logik dahinter nichts sagen.

Zeile 33794:
Delphi-Quellcode:
lEventArgs := TVSTGetCellTextEventArgs.Create(PaintInfo.Node, PaintInfo.Column);
DoGetText(lEventArgs);
Hierbei wird der CellText nicht initialisiert:
Delphi-Quellcode:
constructor TVSTGetCellTextEventArgs.Create(pNode: PVirtualNode; pColumn: TColumnIndex; pExportType: TVTExportType);
begin
  Self.Node := pNode;
  Self.Column := pColumn;
  Self.ExportType := pExportType;
end;
Die GetText() Methode enthält allerdings noch die Initialisierung mit dem DefaultText:
Delphi-Quellcode:
function TCustomVirtualStringTree.GetText(Node: PVirtualNode; Column: TColumnIndex): string;

var
  lEventArgs: TVSTGetCellTextEventArgs;

begin
  Assert(Assigned(Node), 'Node must not be nil.');
  lEventArgs := TVSTGetCellTextEventArgs.Create(Node, Column);
  lEventArgs.CellText := FDefaultText;
  DoGetText(lEventArgs);
  Exit(lEventArgs.CellText)
end;

Aviator 5. Jul 2016 16:17

AW: VirtualStringTree stellt DefaultText (Node) nicht dar
 
Zitat:

Zitat von Zacherl (Beitrag 1342020)
Habe die Stelle gefunden, allerdings kann ich zu der Logik dahinter nichts sagen.

Genau so ging es mir auch. Mich hatte das Problem auch interessiert, wobei ich nie auf diesen Standardtext Wert gelegt hatte. Habe diese Stelle auch schon direkt am gleichen Tag entdeckt, an dem dieser Post eröffnet wurde. Über den StackTrace kam man dort sehr gut hin. Nur wusste ich nichts damit anzufangen und habe dann auch hier nichts dazu geschrieben. :oops::roll:

Habe nämlich die Stelle nicht gefunden, an der
Delphi-Quellcode:
lEventArgs
plötzlich den NodeText nicht mehr beinhaltet. Der wird einfach nach dem Aufruf von DoGetText plötzlich leer wenn ich mich richtig erinnere.

Zacherl 5. Jul 2016 19:08

AW: VirtualStringTree stellt DefaultText (Node) nicht dar
 
Zitat:

Zitat von Aviator (Beitrag 1342030)
Habe nämlich die Stelle nicht gefunden, an der
Delphi-Quellcode:
lEventArgs
plötzlich den NodeText nicht mehr beinhaltet. Der wird einfach nach dem Aufruf von DoGetText plötzlich leer wenn ich mich richtig erinnere.

Ja, bzw. ist bereits leer, wenn er an DoGetText übergeben wird. Zumindest bei dem Call, der aus der DoPaintNode Methode in Zeile 33795 kommt. Da wurde nach dem Erzeugen der EventArgs wohl einfach die Zuweisung des Standardtextes vergessen. Bei allen anderen Pfade zur DoGetText Methode enthält der CellText korrekterweise den DefaultText.


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