Delphi-PRAXiS
Seite 1 von 2  1 2      

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 modales Fenster ohne Benutzerakt. selbst schliessen lassen (https://www.delphipraxis.net/84817-modales-fenster-ohne-benutzerakt-selbst-schliessen-lassen.html)

DelphiManiac 22. Jan 2007 12:27


modales Fenster ohne Benutzerakt. selbst schliessen lassen
 
Hallo ich stehe vor folgendem Problem:

Ich zeige ein Bitte warten Form an.

Delphi-Quellcode:
  aSCIAuswahl:=TSCIAuswahlGUI.Create(self);
  modalresult:=aSCIAuswahl.ShowModal;
Jetzt muss ich das Formular sich selbst nach einiger Zeit selbst schliessen lassen, aber wo packe ich dass
Delphi-Quellcode:
Self.ModalResult:=mrOK;
hin??
Im FormCreate bewirkt es nicht, dass was es soll.. (es bleibt offen).

Danke schonmal
Gruß DelphiManiac

marabu 22. Jan 2007 12:30

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
Hallo,

das Warten ist ja wohl kein Selbstzweck. Also schließt du die Form nicht im FormCreate() sondern nach Beendigung deiner Arbeit.

Grüße vom marabu

DelphiManiac 22. Jan 2007 12:33

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
@marabu

Ja ich warte in meinem Fenster auf eine Antwort der Schnittstelle. Aber wo packe ich das Warten auf meine Antwort hin?
Angenommen (so wie es zZ. ist, ich packe es ins FormCreate) dann kann ich es ja nicht sich selbst schliessen lassen...

Vielleicht hast du eine Idee?

Pfoto 22. Jan 2007 12:33

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
Hallo!

Ich mache es so:

Das "Bitte-Warten-Fenster" mit .Show starten,
das Anwendungsfenster auf .enabled:= false setzten.

Dann den Prozess im Hauptfenster vornehmen.
Während dieser Abarbeitung kannst du auf diese Weise auch
den aktuellen Fortschritt über eine Progressbar ausgeben.

Schließlich das Extra-Fenster mit .Close schließen.
das Hauptfenster dann auf .enabled:= true setzen.

Gruß

Pfoto

hoika 22. Jan 2007 12:35

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
Hallo,

im FormActivate ein

Application.ProcessMessages

und nach Abchluss der Arbeiten dort

PostMessage(Handle, WM_CLOSE, 0, 0);


Heiko

sirius 22. Jan 2007 12:39

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
Na, wie bekommst du denn mit, ob deine Schnittstelle geantwortet hat?

DelphiManiac 22. Jan 2007 12:45

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
Indem ich in meinem Fenster 'Bitte warten' anzeige
und beim Empfang von 25 Bytes (das überpüfen mache ich in einer Schleife (ja ich weiss pollen ist unschön... :? ) aus
meiner Überprüfungsschleife rausspringe..

Es soll dann das Fenster durch 2 Situationen geschlossen werden.

1. 25 Byte sind da (raus aus der blöden Schleife) =>ModalResult:=mrOK;
2. Der Benutzer klickt abbrechen => ModalResult:=mrCancel;

sirius 22. Jan 2007 12:48

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
Und genau da kannst du es doch auch hinschreiben.

(manchmal gibt es zum Pollen keine Alternative)

DelphiManiac 22. Jan 2007 12:52

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
Hi, ersteinmal ein Riesen Dank, dass ihr so zeitnah antwortet :-D

Ich habe das auch gemacht und poste meiner Form die WM_Close Nachricht, dannach schliesst es,
so wollte ich das auch, aber mein Button Abbrechen funktioniert dann nicht, zurzeit habe ich es so:

Delphi-Quellcode:
procedure TWaitForLoaderGUI.FormActivate(Sender: TObject);
begin
  while (aSCI.GetQBytes <> 25) do
  begin
    Application.ProcessMessages;
    Sleep(1);
    if Self.ModalResult <> mrNone then exit;
    if Application.Terminated then exit;
  end;

  Self.ModalResult:=mrOk;
  PostMessage(Self.Handle, WM_CLOSE, 0, 0);
end;

procedure TWaitForLoaderGUI.BitBtn1Click(Sender: TObject);
begin
  Self.ModalResult:=mrCancel; // Hier soll er das Form schliessen...
end;

hoika 22. Jan 2007 13:14

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
Hallo,

setzte im OnButtonClick eine Form-Variable (bUserCancel),
die wird im FormCreate auf False gesetzt,
und checke die in deiner Schleife zusätzlich mit.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr.
Seite 1 von 2  1 2      

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