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 ShowModal im Hintergrund vs. Show mit Rückgabewerten (https://www.delphipraxis.net/144414-showmodal-im-hintergrund-vs-show-mit-rueckgabewerten.html)

Schwedenbitter 7. Dez 2009 13:37


ShowModal im Hintergrund vs. Show mit Rückgabewerten
 
Hallo,

ich habe - möglicherweise - eine Anfängerfrage, weiß aber leider nicht, wie ich mich dem Problem nähern kann:

Ich habe ein Client-Programm, was vollständig ereignisgesteuert läuft. Der TClientSocket ist im Hauptformular. Die relativ umfangreichen Einstellungsmöglichkeiten für das gesamte Programm und so auch für TClientSocket werden in einer separaten Form amgeboten.
Rufe ich nun diese Form mit .ShowModal auf, kann ich zwar auf die Tasten reagieren. Mein Hauptprogramm wird aber logischer Weise nicht weiter ausgeführt. Rufe ich das mit .Show auf, läuft mein Programm zwar weiter. Ich weiß aber leider nicht, wie ich auf die Tasten im Setup-Formular reagieren kann. Mir fiele nur ein, es zur allergrößten Not über Messages zu machen.

Gibt es für mein Problem eine einfache Lösung?

Falls Ihr bessere Ideen für den Titel habt, nur her damit. Auch für weiterführende Stichpunkte zum Suchen wäre ich schon dankbar.

Gruß, Alex

hoika 7. Dez 2009 14:26

Re: ShowModal im Hintergrund vs. Show mit Rückgabewerten
 
Hallo,

warum soll das Programm während der Einstellungen
einfach so weiterlaufen ?

Davon abgesehen läuft das ganze TClientXXX-Dingens ja eh weiter (OnReceive usw.).


Heiko

Schwedenbitter 7. Dez 2009 15:08

Re: ShowModal im Hintergrund vs. Show mit Rückgabewerten
 
Danke für die Antwort.
Zitat:

Zitat von hoika
Hallo,

warum soll das Programm während der Einstellungen
einfach so weiterlaufen ?

Weil das Programm auf Befehle des Servers reagiert und damit wiederum ein weiteres Programm steuert.
Zitat:

Zitat von hoika
Davon abgesehen läuft das ganze TClientXXX-Dingens ja eh weiter (OnReceive usw.).

Heiko

Wirklich?
Das werde ich dann mal ausprobieren. Das Problem ist nur, dass das Programmieren von Server und Client nicht ganz ohne ist und ich weder Lust noch Kraft habe um da Zeit reinzustecken, um später festzustellen, dass es nicht geht.
Zumal die Hilfe zu .ShowModal etwas anderes dazu sagt. Dort steht, dass der Ablauf des Programms abgebrochen wird, bis das Modal angezeigte Fenster wieder geschlossen ist.

Gruß, Alex

hoika 7. Dez 2009 16:09

Re: ShowModal im Hintergrund vs. Show mit Rückgabewerten
 
Hallo,

damit ist gemeint,
dass der Nzuter das Form nicht benutzen kannst.

Lass aber z.B. mal nen Timer mitlaufen,
der ein Label aktualisiert.
Während des ShowModal läuft der weiter.


Heiko

Schwedenbitter 7. Dez 2009 16:52

Re: ShowModal im Hintergrund vs. Show mit Rückgabewerten
 
Das ist mir schon klar.

Ich habe folgendes probiert:
Delphi-Quellcode:
Unit Unit1;

Interface

Uses
   Forms, Controls, StdCtrls, Classes, ExtCtrls;

Type
   TForm1   = Class(TForm)
               Timer1   : TTimer;
               Button1   : TButton;
               Procedure Button1Click(Sender: TObject);
               Procedure Timer1Timer(Sender: TObject);
              End;

Var
   Form1      : TForm1;

Implementation

Uses
   Unit2, Unit3;

{$R *.dfm}

Procedure TForm1.Button1Click(Sender: TObject);
Begin
   Form2.ShowModal;
End;

Procedure TForm1.Timer1Timer(Sender: TObject);
Begin
   Timer1.Enabled:=False;
   Form3.ShowModal;
   Timer1.Enabled:=True;
End;

End.
Wenn nun Fenster 3 kommt, kann ich nicht mehr auf den Button (zum Öffnen von 2) von Fenster 1 klicken. Das ist OK, weil Fenster 2 in meinem Programm vom Client.Socket geöffnet wird. Ist Fenster 2 aber schon offen, öffnet sich Fenster 3 und ich kann mit Fenster 2 ebenfalls nichts mehr anfangen.
Da stellt sich mir bloß am Rande auch die Frage: Obwohl beide Fenster mit ShowModal angezeigt werden. Warum schafft es Fenster 3 immer, sich "vorzudrängeln"?

Falls das nicht verständlich ist, muss ich wegen meines Problems wohl etwas weiter ausholen:
Mein Programm hat im Grunde kein MainForm. Es wird nur im SystemTray angezeigt, hat ein Popup und je nach dem, welcher Menüeintrag gewählt wird, kommt das eine oder andere Fenster zum Vorschein. Die einzige Ausnahme soll das Fenster mit den Systemmitteilungen sein. Die Fenster sind daher quasi gleichrangig.

Gruß, Alex

hoika 7. Dez 2009 17:09

Re: ShowModal im Hintergrund vs. Show mit Rückgabewerten
 
Hallo,

aha !!!
Warum nicht gleich so ?

Dann würde ich .Show nehmen und mit Nachrichten arbeiten.


Heiko


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