AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Neues Formular "quasi-modal" öffnen

Ein Thema von sundance · begonnen am 20. Dez 2012 · letzter Beitrag vom 20. Dez 2012
Antwort Antwort
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#1

Neues Formular "quasi-modal" öffnen

  Alt 20. Dez 2012, 16:02
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.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: Neues Formular "quasi-modal" öffnen

  Alt 20. Dez 2012, 16:09
Vielleicht hilft ja FormStyle := fsStayOnTop

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Neues Formular "quasi-modal" öffnen

  Alt 20. Dez 2012, 16:13
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Neues Formular "quasi-modal" öffnen

  Alt 20. Dez 2012, 16:26
Wenn Du es mit es beispielsweise mit (self) als Owner erzeugst, kannst Du mit

Delphi-Quellcode:
procedure TPseudoMod.FormShow(Sender: TObject);
begin
  EnableWindow(TForm(Owner).Handle,true);
end;
das aufrufende Fenster bedienbar machen, Du müsstest Dir nur einen Mechanismus ausdenken, dass von dort nichts ungewolltes gestartet werden kann.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#5

AW: Neues Formular "quasi-modal" öffnen

  Alt 20. Dez 2012, 17:39
@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:
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.
Wenn ich dich richtig verstehe, müßte ich die CreateForm für das ChildWindow in die MainForm verlagern?

Geändert von sundance (20. Dez 2012 um 17:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Kalakmul
Kalakmul

Registriert seit: 11. Apr 2008
27 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Neues Formular "quasi-modal" öffnen

  Alt 20. Dez 2012, 18:06
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.
Wer fragt, ist ein Narr für 5 Minuten, wer nicht fragt, ist ein Narr ein Leben lang.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Neues Formular "quasi-modal" öffnen

  Alt 20. Dez 2012, 18:10
Nein, das Modal angezeigte Fenster müsste nur das Handle Deines Aufrufformulars kennen z.B.

Delphi-Quellcode:
procedure TPseudoMod.FormShow(Sender: TObject);
begin
  EnableWindow(Mainform.Handle,true);
end;
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 .....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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