![]() |
Neues Formular "quasi-modal" öffnen
Entschuldigung für den komischen Titel; es geht um folgendes:
Von meinem MainForm aus möchte ich gerne ein weiteres Formular (ChildForm) anzeigen, und zwar derart, dass ChildForm den Fokus bekommt und MainForm erst nach Schließen von ChildForm "weiterläuft". Üblicherweise mache ich das einfach, indem ich "ChildForm.ShowModal" aufrufe. Jetzt stellt sich mir die Aufgabe, dass (bei geöffnetem ChildForm) das Hauptfenster trotzdem vom Anwender bewegt werden kann, um z.B. im Explorerfenster dahinter etwas nachzusehen. Das geht mit ShowModal leider nicht. Wenn ich aber stattdessen "ChildForm.Show" aufrufe, wird es natürlich angezeigt, aber die Programmausführung läuft sofort mit der Anweisung nach "Show" weiter und wartet nicht, bis ich ChildForm geschlossen haben... Kennt jemand dafür eine praktikable Lösung? .sundance. |
AW: Neues Formular "quasi-modal" öffnen
Vielleicht hilft ja FormStyle := fsStayOnTop
Gruß |
AW: Neues Formular "quasi-modal" öffnen
K.A. ob das praktikabel ist.
Mainform eine boolean Variabe verpassen. Und eine Prozedur, die diese auf False setzt. Variable auf True setzen. 2tes From erzeugen und einem Event, z.B. On Close, diese Prozedur zuweisen. Form.Show. Dann eine Endlos-Schleife. while MyBool do Application.ProcessMessages; Dazu sollten natürlich auch alle Button usw. vom Main-Form deaktiviert werden, so dass es nur noch bewegt werden kann. |
AW: Neues Formular "quasi-modal" öffnen
Wenn Du es mit es beispielsweise mit (self) als Owner erzeugst, kannst Du mit
Delphi-Quellcode:
das aufrufende Fenster bedienbar machen, Du müsstest Dir nur einen Mechanismus ausdenken, dass von dort nichts ungewolltes gestartet werden kann.
procedure TPseudoMod.FormShow(Sender: TObject);
begin EnableWindow(TForm(Owner).Handle,true); end; |
AW: Neues Formular "quasi-modal" öffnen
@Jumpy:
Das könnte funktionieren! Ich werde mal testen, inwiefern die "Dauerschleife" unnötige Prozessorlast erzeugt. (Sollte aber eigentlich nicht der Fall sein, denn ein "leerlaufendes" Delphiprogramm läuft ja auch in der Message-Endlosschleife...) @Bummy: Aktuell werden die beiden Forms in der DPR-Datei erzeugt:
Delphi-Quellcode:
Wenn ich dich richtig verstehe, müßte ich die CreateForm für das ChildWindow in die MainForm verlagern?
program MKVX;
uses Forms, MyMainForm in 'MyMainForm.pas' {MainForm}, CoverForm in 'CoverForm.pas' {FormCover}; // <--- ChildForm {$R *.res} begin Application.Initialize; Application.CreateForm(TMainForm, MainForm); Application.CreateForm(TFormCover, FormCover); Application.Run; end. |
AW: Neues Formular "quasi-modal" öffnen
Ist das Problem nicht mit bordeigenen Mitteln von Windows lösbar?
Mit "Desktop anzeigen" (Windows Schnellstartleiste; unter Win7 unten rechts in der Taskleiste) hat man wieder einen bedienbaren Desktop und kann z. B. etwas im Explorer nachschauen. Mit ALT-TAB kann man dann zwischen der betreffenden Anwendung und dem Explorer wechseln. Ich weiß ja nicht, ob man in deiner Anwendung aus dem Explorer etwas sehr schlecht zu merkendes übertragen muss, sodass unbedingt beide Fenster nebeneinander stehen müssen. Dann geht es so natürlich nicht. |
AW: Neues Formular "quasi-modal" öffnen
Nein, das Modal angezeigte Fenster müsste nur das Handle Deines Aufrufformulars kennen z.B.
Delphi-Quellcode:
Du kannst auch eine Property für das Handle in das Form einbauen und diese vor dem Showmodal setzen, oder OnShow auf eine eigene Methode verbiegen, oder .....
procedure TPseudoMod.FormShow(Sender: TObject);
begin EnableWindow(Mainform.Handle,true); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 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 by Thomas Breitkreuz