![]() |
In VirtualStringTree nach Neuladen zurück auf vorigen Node
Hallo,
ich habe ein Problem nach einem Neuladen des VST wieder auf den alten Node zu kommen. Folgendes Vorgehen:
Wie kann ich verhindern, dass VST nach Neuladen nur mein GotoID() ausführt und nicht danach auch noch den MausKlick Da das VST in einem Frame liegt, wollte ich verhindern das Ereignis über GetMessages abzufangen. Vielleicht gibt es ja noch einen anderen Weg Danke Gerd |
AW: In VirtualStringTree nach Neuladen zurück auf vorigen Node
Zitat:
Ich mache es allgemein so:
Delphi-Quellcode:
In der Prozedure SetLVFocusByItemOID() steht dann am Ende in etwa folgendes:
focusedItemOID := GetLVFocusedItemOID(vlvList);
vlvList.BeginUpdate; try // Daten aktualisieren finally vlvList.EndUpdate; end; SetLVFocusByItemOID(vlvList, focusedItemOID);
Delphi-Quellcode:
Anmerkung: Ich setzte den VST schon sehr lange ein. Weil er in eigenen Frameworks eingebunden ist, auch nicht die aktuellste Version.
vlvList.ClearSelection;
vlvList.FocusedNode := Node; vlvList.Selected[Node] := True; Bis bald... Thomas |
AW: In VirtualStringTree nach Neuladen zurück auf vorigen Node
Im Grunde genommen hast du natürlich recht.
Es gibt aber noch Bearbeitungsmöglichkeiten, wo dann im Hintergrund an Dateien Änderungen vorgenommen werden. Zur Absicherung, ob das alle korrekt gelaufen ist, werden zuerst die Dateikorrekturen in die DB geladen und dann in VST angezeigt. Ich würde es heute nicht mehr so machen, aber ... |
AW: In VirtualStringTree nach Neuladen zurück auf vorigen Node
Du scheinst ja das neue Laden der Daten im OnEdited Event auszulösen. Das würde ich dann vielleicht nicht so machen. Vielleicht wäre es sinnvoller, auf das Post Event der Query oder eines anderen Events zu reagieren. Alternativ kannst du auch einen Timer starten, der kurz nach dem Abarbeiten von OnEdited ausgelöst wird. Ggf. noch mit einem
Delphi-Quellcode:
Flag oder so.
ReloadPending
Das Problem bei dir wird wohl sein, dass du den Tree bei der Abarbeitung seiner Routine blockierst und er danach erst weitermachen kann. Und somit dann das Click Event ausführt. Der VST ist ja recht gut programmiert, aber es kommt natürlich auch immer noch auf eure Event-Handler an. Da könnte es natürlich auch irgendwann mal knallen, wenn die Daten plötzlich unterm Hintern weggelöscht werden. |
AW: In VirtualStringTree nach Neuladen zurück auf vorigen Node
Das mit dem Timer hatte ich mir auch schon überlegt.
Lieber wäre mir aber schon ich könnte die Message irgendwie abfangen oder bereinigen. |
AW: In VirtualStringTree nach Neuladen zurück auf vorigen Node
evtl merkst Du dir die ID des Knotens und setzt den Knoten beim Neuinitialisieren mittels InitialStates und ivsSelected, wenn er vorbei kommt
allerdings könnte er dann immer noch außerhalb des sichtbaren Bereiches liegen. Ansonsten würde ich den Knoten direkt im Vst verschieben, anstatt alles neu zu laden |
AW: In VirtualStringTree nach Neuladen zurück auf vorigen Node
Ein Timer ist gar nicht nötig. Es sollte reichen dir selbst mit PostMessage eine Nachricht zu schicken. Die wird dann hinter den vorhandenen Nachrichten in die Warteschlange eingereiht, also auch hinter den noch anstehenden Mausereignissen (bei Drag & Drop, sprich wenn man mit der Maus noch nicht fertig ist, geht das natürlich z.B. nicht).
|
AW: In VirtualStringTree nach Neuladen zurück auf vorigen Node
Zitat:
|
AW: In VirtualStringTree nach Neuladen zurück auf vorigen Node
Empfang der Nachricht:
Delphi-Quellcode:
Senden der Nachricht:
const
MyMessage = WM_APP + 100; type TBlubForm = class(TForm) protected procedure WmMyMessage(var Msg: TMessage); message MyMessage; end; implementation procedure TBlubForm.WmMyMessage(var Msg: TMessage); begin Reload... end;
Delphi-Quellcode:
Mehr dazu hier:
PostMessage(Handle, MyMessage, 0, 0);
// PostMessage wartet nicht auf Abarbeitung der Nachricht ![]() |
AW: In VirtualStringTree nach Neuladen zurück auf vorigen Node
Super, das funktioniert einwandfrei. Danke für deine Hilfe.
Und wenn man es so sieht eigentlich auch ganz einfach |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 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