Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MDi-Child ruft modales Fenster auf (https://www.delphipraxis.net/151643-mdi-child-ruft-modales-fenster-auf.html)

copris 26. Mai 2010 15:55


MDi-Child ruft modales Fenster auf
 
In einer MDI-Applikation kann das gleiche MDI-Fenster mehrmals geöffnet sein.
In diesem Fenster rufe ich ein Dialog-Fenster mit showmodal auf, was im zuletzt geöffneten Fenster funktioniert.
Wechsle ich nun zu einem anderen Fenster bekomme ich eine Fehlermeldung, ebenso wenn ich das zuletzt geöffnete Fenster schliesse.
ShowModal funktioniert immer nur mit dem zuletzt geöffnetem Fenster.

Wie muss ich das Lösen, dass ShowModal immer das Fenster mit dem aktuellen Fokus reagiert?

Aufruf MDI-Child aus Hauptfenster
Delphi-Quellcode:
procedure TfrmMain.CreatefrmStamm(const _Tag: integer; const Name: string);
  var
    Child: TfrmStamm;
  begin
    menuTxt := Name;
    _CountWindow := _CountWindow +1;
    Application.CreateForm(TfrmStamm, frmStamm);
  frmStamm.Caption := Name + '_' + IntToStr(MDIChildCount);
  end;
Aufruf Modales Fenster von MDI-Child
Delphi-Quellcode:
            with TpDlgNew.Create(self) do
              try
                ShowModal;
              finally
                Free;
                end;

Besten Dank für eure Antworten.

Olli73 26. Mai 2010 16:35

Re: MDi-Child ruft modales Fenster auf
 
Zitat:

Zitat von copris
In einer MDI-Applikation kann das gleiche MDI-Fenster mehrmals geöffnet sein.
Delphi-Quellcode:

    Application.CreateForm(TfrmStamm, frmStamm);
  frmStamm.Caption := Name + '_' + IntToStr(MDIChildCount);
  end;

Hallo!

Du schreibst leider nicht, welche Fehlermeldung an welcher Stelle kommt, aber wenn ich eine (MDI-)App programmiere, nehme ich die childs aus der Liste der automatisch erstellten Formulare UND vor allem auch die Variable aus dem erstellten Formular heraus, hier also frmStamm. Das Formular erstelle ich dann mit TfrmStamm.Create(Application) ...

Dann kommt man nämlich nicht mehr in Versuchung frmStamm.Irgendwas zu schreiben, was bei dir immer auf das zuletzt erzeugte Formular zeigt. Ich nehme mal an, dass ein solcher Aufruf den Fehler bei dir auslösen könnte...

Gruß,
Olli

rollstuhlfahrer 26. Mai 2010 17:22

Re: MDi-Child ruft modales Fenster auf
 
Zitat:

Zitat von copris
Delphi-Quellcode:
procedure TfrmMain.CreatefrmStamm(const _Tag: integer; const Name: string);
  var
    Child: TfrmStamm;
  begin
    menuTxt := Name;
    _CountWindow := _CountWindow +1;
    Application.CreateForm(TfrmStamm, frmStamm);
  frmStamm.Caption := Name + '_' + IntToStr(MDIChildCount);
  end;

Alleine das kann schon gar nicht funktionieren. Damit das funktioniert benötigst du eine class procedure. Du hast also das Formular erzeugt und rufst diese Prozedur auf. Darin erzeugt sich das Formular nochmals. Eines der beiden sieht man aber nicht, weil es noch wartet, sichtbar gemacht zu werden.
Bitte überdenke nochmals deine Struktur mit der MDI-Anwendung und befolge auch den Hinweis meines Vorredners.

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz