![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 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