AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls VirtualStringTree Invalidate ruft intern nicht MeasureItem auf
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

Ein Thema von Bünni · begonnen am 8. Apr 2019 · letzter Beitrag vom 9. Apr 2019
Antwort Antwort
Bünni

Registriert seit: 4. Mär 2019
67 Beiträge
 
#1

VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 8. Apr 2019, 20:42
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?
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 8. Apr 2019, 22:49
Du könntest ResetNode() aufrufen. Das setzt den Status der Node zurück. Das bewirkt eben das, wie du schreibst, alle Events gefeuert werden.
  Mit Zitat antworten Zitat
Bünni

Registriert seit: 4. Mär 2019
67 Beiträge
 
#3

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 8. Apr 2019, 22:51
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.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 8. Apr 2019, 22:54
Wenn du die Node nur neu zeichnen willst, dann rufe 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. 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 InvalidateNode() an. Das ist in 99% der Fälle ausreichend.
  Mit Zitat antworten Zitat
Bünni

Registriert seit: 4. Mär 2019
67 Beiträge
 
#5

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 8. Apr 2019, 23:01
Habe eben schon mit Erfolg getestet. Ich bin irgendwie erstaunt, dass Invalidate MeasureItem nicht feuert, InvalidateNode aber schon.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 9. Apr 2019, 07:11
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.
Heiko
  Mit Zitat antworten Zitat
Bünni

Registriert seit: 4. Mär 2019
67 Beiträge
 
#7

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 9. Apr 2019, 12:23
In diesem konkreten Fall wird die Höhe des Nodes geändert.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#8

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 9. Apr 2019, 12:33
In diesem konkreten Fall wird die Höhe des Nodes geändert.
Dann musst du in diesem konkreten Fall InvalidateNode aufrufen
  Mit Zitat antworten Zitat
Bünni

Registriert seit: 4. Mär 2019
67 Beiträge
 
#9

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 9. Apr 2019, 12:43
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;
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: VirtualStringTree Invalidate ruft intern nicht MeasureItem auf

  Alt 9. Apr 2019, 22:22
Vor dem Setzen von RootNodeCount sollte VST.Clear() ausgeführt werden. Ansonsten werden die Nodes u.U. nicht gelöscht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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