Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   VirtualStringTree Invalidate ruft intern nicht MeasureItem auf (https://www.delphipraxis.net/200310-virtualstringtree-invalidate-ruft-intern-nicht-measureitem-auf.html)

Bünni 8. Apr 2019 19:42

VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
Ich stehe gerade vor dem Problem, dass VST.Invalidate wohl nicht intern MeasureItem eines Nodes aufruft.
Wie bringe ich einen Node dazu sich zwangs-neuzuzeichenen und alle Events zu feuern?

Aviator 8. Apr 2019 21:49

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
Du könntest
Delphi-Quellcode:
ResetNode()
aufrufen. Das setzt den Status der Node zurück. Das bewirkt eben das, wie du schreibst, alle Events gefeuert werden.

Bünni 8. Apr 2019 21:51

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
Ist hier InvalidateNode oder ResetNode besser? ResetNode ruft intern auch InvalidateNode auf. Aber ResetNode macht noch andere Dinge die mir nichts sagen. Children hat der Node nicht.

Aviator 8. Apr 2019 21:54

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
Wenn du die Node nur neu zeichnen willst, dann rufe
Delphi-Quellcode:
InvalidateNode()
auf. Ob dabei das gewünschte MeasureItem Event gefeuert wird kann ich dir gerade nicht 100%ig aus dem Kopf sagen. Aber ich sage mal ja, da dieses Event sonst keinen Sinn machen würde.
Delphi-Quellcode:
ResetNode()
setzt den kompletten Status der Node zurück. Also auch den Zustand, ob die Node ChildNodes hat, ob der Status auf Expanded gesetzt ist, usw.

Aber probier es doch einfach mal in einem Testprojekt aus. Fang mit
Delphi-Quellcode:
InvalidateNode()
an. Das ist in 99% der Fälle ausreichend. :)

Bünni 8. Apr 2019 22:01

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
Habe eben schon mit Erfolg getestet. Ich bin irgendwie erstaunt, dass Invalidate MeasureItem nicht feuert, InvalidateNode aber schon.

hoika 9. Apr 2019 06:11

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
Hallo,
es geht hier um Performance.
Wenn man weiß, dass der Knoten nur neu gezeichnet werden soll (z.B. bei einer Farbänderung), brauch ich ja MeasureItem nicht.

Man muss halt ausprobieren, was im konkreten Fall notwendig ist.

Bünni 9. Apr 2019 11:23

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
In diesem konkreten Fall wird die Höhe des Nodes geändert.

Schokohase 9. Apr 2019 11:33

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
Zitat:

Zitat von Bünni (Beitrag 1429878)
In diesem konkreten Fall wird die Höhe des Nodes geändert.

Dann musst du in diesem konkreten Fall
Delphi-Quellcode:
InvalidateNode
aufrufen

Bünni 9. Apr 2019 11:43

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
Gehe ich richtig in der Annahme, dass wenn ich mehrere Nodes lösche ich nur RootNodeCount neu setzen muss und kein Invalidate; benötige?

Einen oder mehrere Nodes löschen RootNodeCount;
Einen Node bearbeiten InvalidateNode;

Aviator 9. Apr 2019 21:22

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
 
Vor dem Setzen von
Delphi-Quellcode:
RootNodeCount
sollte
Delphi-Quellcode:
VST.Clear()
ausgeführt werden. Ansonsten werden die Nodes u.U. nicht gelöscht.


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