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 Zwei Forms Modal anzeigen (https://www.delphipraxis.net/153626-zwei-forms-modal-anzeigen.html)

Win32.API 10. Aug 2010 15:42

Zwei Forms Modal anzeigen
 
Hallo,

ist es Möglich zwei Forms _gleichzeitig_ Modal anzuzeigen? Gibt es da einen "Hack" oder Ähnliches? Habe schon versucht eine andere Form per
Delphi-Quellcode:
Enabled := true
wiederzubeleben, leider ohne Erfolg.

Grüße,
Win32.API

himitsu 10. Aug 2010 15:45

AW: Zwei Forms Modal anzeigen
 
Modal geht eigentlich nur Einmal. (also jeweils für die letzte Modal aufgerufene Form).

Ich weiß jetzt nicht wie Delphi die nichtmodalen Forms sperrt, aber eventuell kann man diese Forms auch selber sperren und würde/könnte dann seine Forms nichtmodal, aber dennoch fast wie modal, anzeigen.

bzw., was passiert, wenn du die erste Form modal (ShowModal) und danach die zweite Form nicht modal (nur via Show im OnGreate/OnShow der Ersten) anzeigst?

Uwe Raabe 10. Aug 2010 17:45

AW: Zwei Forms Modal anzeigen
 
Das geht schon, allerdings nur verschachtelt.

Man erstelle ein neues Form, platziere einen Button darauf und schreibe folgenden Code in den ButtonClick-Event:

Delphi-Quellcode:
procedure TForm.Button1Click(Sender: TObject);
var
  Form: TForm;
begin
  Form := TForm.Create(Application);
  try
    Form.ShowModal;
  finally
    Form.Free;
  end;
end;

himitsu 10. Aug 2010 18:31

AW: Zwei Forms Modal anzeigen
 
geht eben nicht, denn jeder Aufruf irgendeines .ShowModal sperrt alle Forms, welche zu diesem Zeitpunkt schon angezeigt werden.

Heißt also, daß du mit Form2 in deinem Button die Form1 auch mit sperren würdest.


Probier es einfach mal aus:
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
var
  f: TForm5;
begin
  f := TForm5.Create(self);
  f.Caption := 'ShowModal ' + TimeToStr(now);
  f.ShowModal;
  f.Free;
end;

procedure TForm5.Button2Click(Sender: TObject);
var
  f: TForm5;
begin
  f := TForm5.Create(self);
  f.Caption := 'Show ' + TimeToStr(now);
  f.Show;
  // f wird von seinem Parent freigegeben,
end;

Win32.API 10. Aug 2010 18:54

AW: Zwei Forms Modal anzeigen
 
Zitat:

Zitat von himitsu (Beitrag 1040876)
geht eben nicht, denn jeder Aufruf irgendeines .ShowModal sperrt alle Forms, welche zu diesem Zeitpunkt schon angezeigt werden.

Heißt also, daß du mit Form2 in deinem Button die Form1 auch mit sperren würdest.


Probier es einfach mal aus:
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
var
  f: TForm5;
begin
  f := TForm5.Create(self);
  f.Caption := 'ShowModal ' + TimeToStr(now);
  f.ShowModal;
  f.Free;
end;

procedure TForm5.Button2Click(Sender: TObject);
var
  f: TForm5;
begin
  f := TForm5.Create(self);
  f.Caption := 'Show ' + TimeToStr(now);
  f.Show;
  // f wird von seinem Parent freigegeben,
end;

Danke, so gehts! :thumb:

Nach ein bisschen Nachdenken und Debuggen bin Ich noch auf Folgende Lösung gekommen:
Delphi-Quellcode:
EnableWindow(Form3.Handle, True)
.

Grüße

Uwe Raabe 10. Aug 2010 19:37

AW: Zwei Forms Modal anzeigen
 
Zitat:

Zitat von himitsu (Beitrag 1040876)
geht eben nicht, denn jeder Aufruf irgendeines .ShowModal sperrt alle Forms, welche zu diesem Zeitpunkt schon angezeigt werden.

Heißt also, daß du mit Form2 in deinem Button die Form1 auch mit sperren würdest.

Weiß ich doch :wink: Die Frage war aber "ist es Möglich zwei Forms _gleichzeitig_ Modal anzuzeigen?" und das geht. Man kann halt immer nur in dem aktuell modalen arbeiten. Womöglich war die Frage nicht richtig formuliert?

himitsu 10. Aug 2010 19:42

AW: Zwei Forms Modal anzeigen
 
Zitat:

Habe schon versucht eine andere Form per Enabled := true wiederzubeleben, leider ohne Erfolg.
Das hat mich denken lassen, er möchte beide Forms "aktiv" haben.

Win32.API 11. Aug 2010 06:42

AW: Zwei Forms Modal anzeigen
 
Ja, war meinerseits unglücklich Formuliert, Sorry. :dp:

olaf 11. Aug 2010 08:36

AW: Zwei Forms Modal anzeigen
 
Hallo,

eine Möglichkeit wäre, wenn ich dein Problem richtig verstehe, Formsyle auf stayontop für beide Forms zu setzen und den Aufruf mit

application.normalizetopspots;
form.showmaodal;

und in onclose

application restoretopspots.

Olaf


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