Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
700 Beiträge
 
Delphi 12 Athens
 
#4

AW: Verwendung von TTitleBarPanel mit ModalPopupMode := pmAuto

  Alt 22. Mär 2024, 12:20
Es ist wohl ein Bug aber der beste workaround wäre meiner Meinung nach, modal genutzte Forms nicht in die autocreate-Liste aufzunehmen sondern nach Bedarf zu erzeugen und danach auch sofort wieder zu zerstören. Man braucht dann auch keine Form-Variable, die läßt sich sozusagen "internalisieren" wenn man der Formklasse eine public class function nach dem folgenden Muster spendiert

Auf diese Weise kommt man auch nicht in Versuchung, eine Form als Datenspeicher zu mißbrauchen.
Das wäre wahrscheinlich der richtige Weg und würde auch viele andere Probleme ersparen. Unsere Legacy-Software macht allerdings genau den Fehler an so vielen Stellen, dass sich der Code leider nicht ohne Weiteres refaktorieren lässt.

Mit SetWindowPos im TForm2.FormShow funktioniert es schon besser, weil das Fenster ja noch nicht gezeigt wird. Das ist aber natürlich immer noch ein Hack, den ich eigentlich gerne anders lösen würde. Lässt sich das pmAuto vielleicht umgehen? Ich habe die Dokumentation allerdings schon so verstanden, dass das die "empfohlene" Variante ist. Aber wenn es tatsächlich ein Bug ist, muss es wahrscheinlich erstmal bei dem SetWindowPos-Workaround bleiben.
Du kannst für jedes Form individuell den PopupMode ändern oder z. B. explizit den PopupParent auf das aktive Form setzen, bevor Du ShowModal aufrufst, aber selbst wenn das funktioniert erfordert es natürlich auch eine entsprechende Änderung an vielen Stellen der existierenden Anwendung.

Ansonsten bleibt nur, die verantwortliche Stelle im VCL-Kode zu suchen und zu fixen. Tritt das Problem auch in Delphi 11.x auf? Falls nicht würde ich die Änderungen am VCL-Kode für "moderneres" Erscheinungsbild von MDI-Anwendungen im Verdacht haben; da wurde einiges verschlimmbessert, was auch nicht-MDI Anwendungen torpedieren kann.
Peter Below
  Mit Zitat antworten Zitat