Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schleife abbrechen (https://www.delphipraxis.net/121389-schleife-abbrechen.html)

KeyBe 26. Sep 2008 16:56


Schleife abbrechen
 
Hallo,
ich möchte gern mit Hilfe einer Checkbox eine Schleife abbrechen können. Nur leider bleibt die form nicht aktiv.
Das ist die Procedure:

Code:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
url : string;
Zaehler, Anzahl : integer;
begin
speedbutton1.visible:=false;
Anzahl:=strtoint(edit2.text);
Zaehler:=0;
repeat
ShellExecute(Application.Handle,'open','Hilfsprogramm.exe',''{Parameter},'',SW_HIDE);
sleep(30000);
url:=edit1.text;
ShellExecute(Handle,'open',PAnsiChar(url),nil,nil,SW_HIDE);
sleep(5000);
Zaehler:=Zaehler+1;
Application.ProcessMessages;
until (Zaehler=Anzahl) or (Checkbox1.checked);
speedbutton2.visible:=true;
showmessage('Prozess abgeschlossen');
end;
Wo ist der Fehler?
Danke im Voraus!

sirius 26. Sep 2008 16:58

Re: Schleife abbrechen
 
Zitat:

Zitat von KeyBe
Nur leider bleibt die form nicht aktiv.

35 Sekunden schlafen ist auch zu viel.

KeyBe 26. Sep 2008 17:01

Re: Schleife abbrechen
 
liegt es also einzig und allein an der zeit?
diese zeitspanne ist aber notwendig, weil das ausführen von "hilfsprogramm" in etwa so lange dauert.
wie kann ich das problem lösen?

Zacherl 26. Sep 2008 17:08

Re: Schleife abbrechen
 
ShellExecuteEx und WaitForSingleObject sollten dir helfen. Damit kannst du in deinem Programm fortführen, sobald das externe Programm beendet ist.

KeyBe 26. Sep 2008 17:10

Re: Schleife abbrechen
 
Danke, ich werds gleich mal ausprobieren

sirius 26. Sep 2008 17:13

Re: Schleife abbrechen
 
Zitat:

Zitat von KeyBe
liegt es also einzig und allein an der zeit?
diese zeitspanne ist aber notwendig, weil das ausführen von "hilfsprogramm" in etwa so lange dauert.
wie kann ich das problem lösen?

Gehe über einen Timer. Du musst immer so schnell wie möglich aus einer Methode ruas, sonst bleibt das Programm hängen.


Edit: WaitforsingelObject dürfte nicht helfen. Das bleibt das Programm ja genauso hängen. :gruebel:

Apollonius 26. Sep 2008 17:24

Re: Schleife abbrechen
 
Ich bin für MsgWaitForMultipleObjects.


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