Einzelnen Beitrag anzeigen

DSCHUCH

Registriert seit: 6. Jun 2007
Ort: Dresden
185 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Abarbeitungsreihenfolge Modale Ereignisse (ergänzung: aus DLL)

  Alt 26. Feb 2013, 19:43
Hallo, danke für die Antworten.

Theoretisch schön und gut. Praktisch fehlt mir die technische Validierung der Aussagen.

1) Ist irgendwo niedergeschrieben / technisch validiert, dass ich caFree in CloseAction nicht für Modale Formulare nehmen darf? Ich glaube das nämlich nicht, da es A) richtig funktioniert und B) ich erwarten würde, das dann eine Exception ala "eine sichtbare Form kann nicht modal gemacht werden" wirft.

2) Ist die frage, wieso es nachgewiesener maßen in der richtigen Reihenfolge abgearbeitet wird. Ein ModalResult löst ein Close (hier caFree), dieses aber kein direktes Destroy der Form aus. Der Code wird richtig abgearbeitet und erst anschliessend wird das Modale Form destroyed (siehe Bsp im Anhang)

2.1) Interessanterweise passiert etwas mergwürdiges, wenn man MessageBoxes einbaut: diese werden nämlich in der falschen Reihenfolge angezeigt. Bsp siehe Anhang: Vergleiche Ausgaben im DebugMemo und die MessageBoxes, bei aktivierter CheckBox "Bei Close und Free MessageBox"

3) zusäzlich habe ich das ganze im Bsp im Anhang nochmal in eine DLL gepackt. Über die beiden Buttons kann man das gleiche Form nun einmal innerhalb der Exe und einmal über DLL-Aufruf starten. Dabei fällt auf, dass das Verhalten komplett anders ist: Anwendungsicon der Form fehlt (soweit klar, keine Ressource) ABER: das Modale Form verhält sich anders: es blinkt nicht, wenn man auf das dahinterliegende Hauptform clickt, weiterhin passiert hier genau der effekt, dass die Anwendung plötzlich die Z-Reihenfolge verliert: klickt der Anwender jetzt einmal unten auf den falschen TaskbarIcon, ist die Anwendung geblockt da das modale Formular im Hintergrund verschwunden ist. (besonders interessant, wenn kein TaskbarIcon...)




*2) immer nil als Owner übergeben. Übergibt man Application als Owner ist das messbar langsamer
weil unter Umständen mehrere 100 - 1000 Mal die Methode Notify aufgerufen wird.
dazu gibt es einen sehr ausführlichen artikel auf about.com: http://delphi.about.com/od/kbcurt/ss...iccreateno.htm
Miniaturansicht angehängter Grafiken
modalimhintergrund.jpg  
Angehängte Dateien
Dateityp: zip TestModal.zip (1,19 MB, 5x aufgerufen)
  Mit Zitat antworten Zitat