Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ShowModal, arbeitet das Programm weiter? (https://www.delphipraxis.net/32693-showmodal-arbeitet-das-programm-weiter.html)

Pseudemys Nelsoni 27. Okt 2004 12:03


ShowModal, arbeitet das Programm weiter?
 
moin,

im Form1 habe ich im OnShow folgendes stehen:

Zitat:

Form2.ShowModal
wenn ich mein programm nun starte sehe ich Form2, Form1 aber nicht.... ist ja auch klar, weil mein Form1 erst angezeigt wird wenn form 2 geschlossen wird....

was ist aber nun wenn ich möchte das das ShowModal mein programm nicht am arbeiten hindern soll? ich möchte halt das das Form1 nicht benutzt werden kann solange form2 offen ist...aber trotzdem sollte alles andere weiterarbeiten...ist das so? und wenn nicht, wie kann ich das tun?

Treffnix 27. Okt 2004 12:13

Re: ShowModal, arbeitet das Programm weiter?
 
Nein, bei Aufruf von Showmodal hält das aufrufende Formular an, bis das Modale Fenster geschlossen und ein Modalresult zurückgegeben wird.

Pseudemys Nelsoni 27. Okt 2004 12:17

Re: ShowModal, arbeitet das Programm weiter?
 
läuft das programm selbst aber weiter? z.b wenn ich nen serversocket habe....horcht der weiter und reagiert auch obwohl ein modales fenster offen is?

roderich 27. Okt 2004 12:20

Re: ShowModal, arbeitet das Programm weiter?
 
selbstverständlich "läuft" das Programm selbst weiter, auch wenn ein modales Form angezeigt wird. Das bedeutet nur, daß alle "darunterliegenden" nicht-modalen Fenster nicht fokussiert werden können und damit keine Maus/Tastaturevents empfangen.

Z.B. ein Timer oder ServerSocket auf besagtem Form1 würde weiter laufen, ebenso wie z.B. eine Message von "außen" ankommen würde.

Roderich

Pseudemys Nelsoni 27. Okt 2004 12:27

Re: ShowModal, arbeitet das Programm weiter?
 
moin,

dann frag mich mich, wieso wenn ich Form2 im Form1OnShow öffne, das Form1 selbst erst beim schliessen von Form2 angezeigt wird? irgendwie muss die message "WM_SHOW" ja gehalten worden sein...

freak4fun 27. Okt 2004 12:49

Re: ShowModal, arbeitet das Programm weiter?
 
hallo

wenn du das 2. Formular im OnSchow vom ersten aufrufst wird das 2. Formular vorm Zeigen aufgerufen, deshalb wird das 1. Formular erst beim beenden des 2. Form angezeigt.

mfg
freak

Pseudemys Nelsoni 27. Okt 2004 13:01

Re: ShowModal, arbeitet das Programm weiter?
 
also hält das programm doch an?

CalganX 27. Okt 2004 13:18

Re: ShowModal, arbeitet das Programm weiter?
 
Hi,
es hält leidiglich die aktuelle Methode auf. Der Rest des Programms, der im Hintergrund läuft, läuft ganz normal weiter.

Chris

Chewie 27. Okt 2004 14:09

Re: ShowModal, arbeitet das Programm weiter?
 
Zitat:

Zitat von Chakotay1308
Hi,
es hält leidiglich die aktuelle Methode auf. Der Rest des Programms, der im Hintergrund läuft, läuft ganz normal weiter.

Moment. Trotz so schönen Sachen wie Funktionen und Sprünge wird ein (single-threaded) Programm immer noch sequenziell ausgeführt. Und ein Konstrukt wie
Delphi-Quellcode:
Form2.ShowModal;
ist ein Funktionsaufruf. D.h. es wird in den entsprechenden Code verzweigt, dieser wird abgearbeitet und anschließend wird zurückgesprungen. Im Fall einer modalen Anzeige ist es aber so, dass die Funktion abgearbeitet wird solange das modale Fenster nicht geschlossen wird. Das heißt das Programm läuft nicht im Hintergrund weiter. Windows Messages werden zwar in der Nachrichtenwarteschlange abgelegt, aber vom Programm nicht verarbeitet.

Anders sieht es natürlich bei Anwendungen mit mehreren Threads aus.

malo 27. Okt 2004 14:54

Re: ShowModal, arbeitet das Programm weiter?
 
Ich hab das jetzt mal an 'nem simplen Beispiel getestet. Ein Form erstellt, ein Label und einen Timer draufplatziert.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  zeit := Zeit+1;
  Label1.caption := IntToStr(zeit);
end;
Dann im OnShow des Forms ein zweites Form mit ShowModal öffnen. Wenn man jetzt das Programm startet, einige Sekunden wartet und dann das Modale Form schließt, sieht man, dass das Mainform bereits einige Sekundenlang gearbeitet hat, also läuft das Mainform im Hintergrund weiter. Oder ist es irgendwie anders gemeint und ich hab was falsch verstanden?


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