![]() |
VirtualTreeview NodeText geht verloren
Hallo,
habe ein Problem mit Virtual Tree View: In OnFocusChanging will ich mittels modalem Dialog, je nach Knoten, ein Passwort abfragen, da manche Knoten nicht für alle Anwender zugänglich sein sollen. Nur: sobald dieses modale Fenster aufgerufen wird, wird für den bisher dargestellten Knoten der Text nicht mehr angezeigt. Ich weiß aber nicht warum :-( Versuche mit vst.Invalidate(vst.FocussedNode) und anschließendem vst.Refresh haben nichts gebracht. Der Knoten bleibt auch nach Schließen des modalen Dialogs ohne Text. Klicke ich ihn an oder was anderes im baum wird alles richtig neu gezeichnet. Woran liegt das alles und wie kann ich das beheben? |
AW: VirtualTreeview NodeText geht verloren
Was heißt denn "nicht zugänglich"? Der Knoten ist ja offensichtlich sichtbar, sonst könnte man ihn ja nicht anklicken. Geht es rein um das Fokussieren oder um das, was durch das Fokussieren ausgelöst wird, wenn du darauf reagierst?
Grundsätzlich ist es keine gute Idee in dem Event mehr zu machen, als den Wechsel zu erlauben oder nicht. Einen Wechsel des Eingabefokus in dem Event würde ich vermeiden. |
AW: VirtualTreeview NodeText geht verloren
Hallo,
es geht darum, dass der Text des Knotens weg ist und das Auswahlrechteck, welches dann angezeigt wird, ist auch wesentlich kürzer als der Text der vorher dort stand. Ich versuche jetzt mal was mit einem Timer und Status merken zu basteln, mal schauen was rauskommt... |
AW: VirtualTreeview NodeText geht verloren
Hallo,
habe jetzt im OnFocusChanging das Allowed auf false gesetzt, wenn es noch keinen gemerkten Wert von NewNode gibt. Dann hab' ich mir NewNode gemerkt und einen Timer gestartet. In den hab' ich diese Passwortabfrage verlagert und wenn das richtige eingegeben wurde hab' ich das ausgeführt:
Delphi-Quellcode:
Das funktioniert allerdings wie bisher auch. Egal wie lange das
if CheckPassword(FNewFocussedNode) then
begin vst_Menu.FocusedNode := FNewFocussedNode; if Assigned(vst_Menu.FocusedNode) then vst_Menu.Selected[vst_Menu.FocusedNode] := true; FNewFocussedNode := nil; end; Timer Interval ist. Drehe ich es auf 1 Sek. hoch sehe ich auch deutlich, dass das Verschwinden des Knoten Texts schon auftritt, noch bevor der Passwort Dialog angezeigt wird! Noch was ist mir aufgefallen: wird ein falsches Passwort eingegeben, bleibt der Knoten Text auch nach Wegklicken aller Fehermeldungsdialoge verschwunden, bis ich einen anderen Knoten anklicke. Es hilft auch nicht den Knoten zu invalidieren und dann ein Refresh aufzurufen... Die Grundsätzliche Frage für mich wäre hier, warum der Knotentext überhaupt verschwindet. Hat da einer schon die "Fokussierter Knoten" Darstellung auf dem Bildschirm gelöscht, aber noch nicht als normalen Knoten darstellen Funktion aufgerufen? Ist das evtl. ein Bug im VST? Bzw. wie bekomme ich den entsprechenden Knoten geziehlt neugezeichnet? |
AW: VirtualTreeview NodeText geht verloren
Ich würde da nicht auf einen Bug im VST tippen, sondern dass dieses Event nicht dafür gedacht ist, was du da vor hast. Denn du möchtest während des Fokuswechsels den Fokus auf ein komplett anderes Control legen - das kann dann natürlich Nebeneffekte haben.
Kannst du das ggf. so umbauen, dass du die Passwort-Abfrage im
Delphi-Quellcode:
durchführst? Also so, dass der "unerlaubte Knoten" zwar ausgewählt werden kann, aber nur dann sinnvolles Zeug anzeigt (inkl. ggf. Subknoten etc.), nachdem das korrekte Passwort eingegeben wurde?
OnFocusChanged
|
AW: VirtualTreeview NodeText geht verloren
Darauf zielte meine (unbeantwortete) Frage ab. Eine Möglichkeit wäre ja z.B. auch, einfach wieder den Fokus zurück zu wechseln, wenn das Passwort falsch eingegeben wurde.
Zitat:
Statt eines Timers könntest du dir auch einfach mit PostMessage eine Nachricht schicken. |
AW: VirtualTreeview NodeText geht verloren
Und es könnte z.B. auch mitten in einem PaintLock/BeginUpdate hängen, während man das Event dort mit ShowMessage blockiert.
PostMessage, TThread.ForceQueue oder ähnliches, anstatt einem Timer, für ein einmaliges Event. |
AW: VirtualTreeview NodeText geht verloren
Hallo,
Bug im VST scheidet für mich inzwischen auch eher aus. Ich habe ein einfaches Testprogramm erstellt und versucht das nachzustellen. In dem einfachen Testprogramm funktioniert es wie es soll, selbst wenn der VST (was aber eigentlich keinen Unterschied machen sollte) auf einem modalen 2. Fenster sitzt. Einzige Unterschiede zwischen Testprogramm und meinem eigentlichen Programm:
Was mache ich in dem anderen Programm falsch? Ich habe dort auch mal den CellText des OnGetText Events geloggt und festgestellt, dass mein modaler Aufruf im OnFocusCHanging das triggert, die geloggten Werte sind aber alle richtig, auch der von dem bisher fokussierten Knoten der dann nicht mehr angezeigt wird. |
AW: VirtualTreeview NodeText geht verloren
Interessante neue Erkenntnis:
Das Zeichenproblem tritt nicht auf, wenn ich einen anderen Stil als "Windows" (der ja quasi ein nicht Stil ist) benutze! |
AW: VirtualTreeview NodeText geht verloren
1. Liefere in OnGetText einen festen Wert zurück --> ausschließen, dass es an den Daten liegt
2. Wenn es auch dann noch passiert, solltest du ja alle anderen Events der Reihe nach entfernen können. Und entweder findest du dabei das Problem oder es bleibt ein so weit entkernter Rumpf übrig, dass du ihn hier posten kannst. |
AW: VirtualTreeview NodeText geht verloren
Danke für die Idee. Ein fixer Text brachte keine Änderung (wie ich vermutete)
und ich hör' mal für heute auf daran zu arbeiten. Das zu vereinfachen um ein testbares Projekt zu erhalten dürfte sehr auswendig sein. Mal sehen... |
AW: VirtualTreeview NodeText geht verloren
Wenn du keine Daten brauchst, um das nachzustellen, solltest du alles andere ja rauswerfen können. Bis es entweder nicht mehr auftritt oder eben ein kleines Beispiel übrig ist. Du musst zwischendurch halt nur immer sichern.
|
AW: VirtualTreeview NodeText geht verloren
Hallo,
ich hab' jetzt mal eine zumindest temporäre und funktionierende Lösung: Vor dem Aufruf der Passwortabfrage BeginUpdate des Vst aufrufen, danach EndUpdate. Damit meint das Vst nicht irgendwas zeichnen zu müssen. Ich vemrute halt immer noch, dass zum Zeitpunkt des OnFocusChanging Aufrufes beim bisher fokussierten Knoten schon erste Zeichen operationen ausgeführt wurden, nur eben noch nicht komplett. |
AW: VirtualTreeview NodeText geht verloren
Ist "Windows" nicht ein Stil, welcher sich selbst so malt, wie Emba denkt, dass Windows aussieht?
|
AW: VirtualTreeview NodeText geht verloren
Zitat:
|
AW: VirtualTreeview NodeText geht verloren
Zitat:
aber das Programm verhält sich damit anders, als wenn da nichts drin steht .... drum war ich von ausgegangen, als wenn das wirklich ein "Skin" ist. :stupid: |
AW: VirtualTreeview NodeText geht verloren
Der Windows Stil hat bis 12.2 beim Stilwechseln zu Abstürzen geführt, die beim Wechsel zwischen den anderen Stilen in 12.1 schon korrigiert waren. Also ist das sicher kein Standard Stil. Sonst müsstet du auch eine Stildatei dafür finden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 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