![]() |
Komisches Modal Problem
Hi,
mal eine komische Beobachtung, vielleicht ein VCL Bug? Wenn ich per Code in einer Action ein Modales Form schließe und direkt danach ein neues öffne, wir das Schließen nicht ausgeführt :?: Ich habe in einer ActionList ein Execute Event:
Delphi-Quellcode:
So, und in AppAutoUpdate läuft ein einfaches Form-Erzeugen eines anderen Modal Forms. Wird auch per ShowModal angezeigt.
if (Sender = acTestButton) then
begin if Assigned(frmAboutBox) then frmAboutBox.Close; AppAutoUpdate.CheckNow; Exit; end; Ersetzte ich ShowModal per Show geht es :wall: Also kommt es wohl bei der Forms.pas innerhalb von ShowModal zu einem "Feature" welches mir nicht aus OH und täglicher Praxis bekannt ist. Weiß da jemand bescheid? Gruß Assertor P.S.: Nein, Application.ProcessMessages hilft nicht - und ja, es geht auch nicht mit ModalResult. Höchtens mit dem HolzHammer (.Release) ;) |
Re: Komisches Modal Problem
Moin Assertor,
wenn es zu Deinem sonstigen Programmablauf passt, probier' mal, ob Du das Close durch Hide ersetzen kannst. In D7 wird dann frmAboutBox geschlossen. Allerdings hat das bei mir dann noch den unschönen Nebeneffekt, dass nach dem Schliessen des AppAutoUpdate-Formulares das Hauptformular nicht mehr aktiv wird. :( Vielleicht sieht's bei D2006 anders aus. Evtl. findest Du ja den Fehler, wenn Du mal mit Debug-DCUs kompilierst und dann mal durchgehst, wo's in der VCL hakt. |
Re: Komisches Modal Problem
Hi Christian!
Die Idee ist gut, führt schon in die richtige Richtung. Das Modale frmAboutBox wird geschlossen, aber Du hast recht - das MainForm verliert den Focus... Debug-DCUs & Co sind an - geht das auch ohne - Sowas gibt es doch nur bei diesen seltenen Events namens "Release". :zwinker: Hmm, innerhalb von ShowModal von Forms.pas wird der Focusstate aller Fenster in einer SaveFocusedList gespeichert. Ich vermute nun mal das die Message vom Close(Modal) noch nicht abgearbeitet ist, bevor hier das Save stattfindet. Die frmAboutBox wird nach Verlassen von dem anderen Modal dann aber nachträglich geschlossen... Wie gesagt, komisch. Gruß Assertor |
Re: Komisches Modal Problem
Moin Assertor,
mach' mal nach dem Hide auch noch ein Close. Dann funktioniert's. Das das Hide alleine nicht tut, ist ja eigentlich auch logisch: :oops: :wall: Es ist schliesslich kein Close, und kehrt somit nicht zur aufrufenden Stelle zurück. Das Programm wartet schlicht an der ShowModal-Zeile, weil es ja nicht weiss, dass das aufgerufene Formular nicht mehr zu sehen ist. |
Re: Komisches Modal Problem
Morgen Christian,
Zitat:
Mann, da hätt ich drauf kommen müssen, einfach zuviel zu tun hier ;) Trotzdem ein werkwürdiges Verhalten - denn wenn ein Modal wirklich die Messageabarbeitung eines anderen Fensters stoppen würde, dürfte ja das TrayPopup des nicht-modalen Forms nicht die Actions zur Ausführung bringen - etwas inkonsequent. Besonders da es mit .Hide & .Close geht, mit ModalResult und .Close aber nicht :roll: Ich werde mal im QC stöbern, da ich die genaue Logik dahinter etwas wackelig finde... Gruß Assertor :dp: Edit: Mal was ganz brutales für einen Updater:
Delphi-Quellcode:
Da freuen sich die User ;)
// close all open modal forms
for i := 0 to Screen.FormCount - 1 do begin if (fsModal in Screen.Forms[i].FormState) then begin Screen.Forms[i].Hide; Screen.Forms[i].Close; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 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