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 Rückkehr nach Showmodal (https://www.delphipraxis.net/151579-rueckkehr-nach-showmodal.html)

Spezi 23. Mai 2010 22:58


Rückkehr nach Showmodal
 
Hallo,

habe die Suche schon benutzt, aber ich schaff es einfach nicht mein Problem zu beheben.

Und zwar öffne ich aus meinem Hauptformular ein anderes per showmodal.
(Erst erzeuge ich sie mittels Application.CreateForm und durch die nächste Anweisung wird sie modal angezeigt.)

Das Zweite Formular kann man nur über einen Button schliessen, in dem unter anderem das abläuft:
Delphi-Quellcode:
self.Hide();
Habe es auch schon mit Close versucht, aber das Problem ist, dass mein Hauptformular deaktiviert bleibt, ich kann es nur noch über den Taskmanager oder Delphi beenden. Es reagiert auf gar keine Klicks oder Ähnliches.

Habe auch schon nach dem ShowModal in der Prozedur meines Hauptformulars self.refresh oder self.SetFocus aufgerufen, genutzt hat es nichts.

Wodurch kommt dieses Verhalten, und wie kann ich es umgehen?

MfG
spezi

Luckie 23. Mai 2010 23:03

Re: Rückkehr nach Showmodal
 
Zeig doch mal den ganzen Code von dem Aufruf.

Spezi 23. Mai 2010 23:08

Re: Rückkehr nach Showmodal
 
Also, die Prozedur wird in einem Timer ausgelöst:
Delphi-Quellcode:
procedure Tmainform.die_prozedur();
begin
  timer1.enabled:=false;
  Application.CreateForm(Tform2, form2);
  form2.showmodal();
  self.setfocus();
end;
Und dieses setfocus bringt eben nichts.
Genauso wenig wie refresh.
Und mir fällt auch keine andere Möglichkeit ein...

mkinzler 23. Mai 2010 23:08

Re: Rückkehr nach Showmodal
 
Ein modales Fenster schlieest man in dem man ModalResult einen Wert zuweist.

daywalker9 23. Mai 2010 23:11

Re: Rückkehr nach Showmodal
 
Zitat:

Zitat von Spezi
Delphi-Quellcode:
procedure Tmainform.die_prozedur();
begin
  timer1.enabled:=false;
  Application.CreateForm(Tform2, form2);
  form2.showmodal();
  self.setfocus();
end;

Übrigends kannst du auch einfach in der Prozedure die Form ohne Application.CreateForm erzeugen. Und die in einer lokalen Variable halten:

Delphi-Quellcode:
procedure Tmainform.die_prozedur();
var meineForm : TForm2;
begin
  timer1.enabled:=false;
  meineForm := TForm2.Create(Application);
  if meineForm.showmodal = mrOk then
    begin
    end;
   meineForm.Free;
  self.setfocus();
end;

Sir Rufo 23. Mai 2010 23:17

Re: Rückkehr nach Showmodal
 
Also wenn dann doch so (um den Speicherlecks vorzubeugen)
Delphi-Quellcode:
procedure Tmainform.die_prozedur();
begin
  Timer1.Enabled := False;
  with TForm2.Create( nil ) do
    try

      if ShowModal = mrOK then
        begin
          // alles mögliche abarbeiten
        end;

    finally
      Free;
    end;

  // self.setfocus(); <- das sollte nicht notwendig sein
end;

daywalker9 23. Mai 2010 23:28

Re: Rückkehr nach Showmodal
 
;) Stimmt, vergessen

Spezi 23. Mai 2010 23:32

Re: Rückkehr nach Showmodal
 
Danke, klappt wunderbar :thumb:

Das es so simpel wäre, hätte ich nicht gedacht :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 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