![]() |
das DELAY unterbrechen ....
Hallo!
Mein 12 Stunden Delay funktioniert schon! Aber sobald ich diesen in der Laufzeit aktiviert habe, lassen sich zwar andere Aktionen im Programm weiterhin ausführen, jedoch kann ich es einfach nicht schließen und muss zum Taskmanager greifen bzw. per STRG + F2 zurück ins Delphi. Es scheint als würde ich das Programm nur regulär schließen können (mit Form1.Close), wenn es nicht gerade die Delay Prozedur ausführt. Ich will aber eine Funktion integrieren mit der man das Delay unterbrechen kann.Wenn der Benutzer z.b. nicht unbedingt 12 Stunden warten will. Geht das irgendwie? Hier die DELAY Sache:
Code:
begin
lTick:=GetTickCount; repeat Application.ProcessMessages; until (GetTickCount-lTick>=12*3600*1000); end |
Hi !
Setze dir in das OnClose-Ereigniss eine Variable bAbbruch (auf true setzten, beim initialisieren auf false !!!) und erweitere die Schleife folgendermassen:
Delphi-Quellcode:
Gruß, Helld
...
until ((GetTickCount-lTick>=12*3600*1000) [B]or (bAbbruch)[/B]); ... |
Ich hab ins Form1 ein OnClose Eregnis "bAbbruch" gesetzt .... bis hierhin alles okay. Jetzt komm ich ja direkt in den Quelltext mit der Prozedur
Code:
Und was muss ich hier zwischen begin und end reinschreiben?
procedure TForm1.bAbbruch(Sender: TObject; var Action: TCloseAction);
Meine until Zeile habe ich auch erweitert .... die sieht jetzt so aus
Code:
Unter VAR hab ich bAbbruch als boolean gesetzt-
until (GetTickCount-lTick>=12*3600*1000) or bAbbruch;
Achja und gleich am Anfang bei Form1.Create hab ich bAbbruch auf FALSE gesetzt. Das ist alles aber es will nicht klappen. |
bAbbruch ist eine Funktion und eine Prozedur? Zu unsicher! Nimm einen anderen Namen für die Funktion.
Dann solltest du im OnClose schreiben
Delphi-Quellcode:
Chris
bAbbruch := true;
|
Hallo,
ich glaube ihr habt da aneinander vorbeigeredet. babbruch soll doch eine variable und keine Prozedur oder funktion sein. Erstelle einfach eine globale variable, die du direkt als false deklarierst, also so:
Code:
var
vabbruch : boolean = false; und dann erweiterst du die delay schleife so, wie chris das schon geschrieben hat:
Code:
also einfach die abbruchbedingung, die du im Moment verwendest durch diese hier ersetzen.
until ((GetTickCount-lTick>=12*3600*1000) or (bAbbruch));
Jetzt musst du nurnoch einen Butto erstellen, in dem du deine variable auf true setzt. Das bewirkt, dass der delay unterbrochen wird, und du dein Programm beenden kannst. Gruß Jan |
In Ordnung ich hab jetzt folgendes eingestellt:
1. Im Deklarationsteil hab ich
Code:
2. TForm1.FormCreate hat im OnClose Fenster des Objektinspektors babbruch
var
vabbruch : boolean = false; 3. Die babbruch Prozedur dazu sieht so aus
Code:
4. Trotz der Abbruchbedingung
procedure TForm1.bAbbruch(Sender: TObject; var Action: TCloseAction);
begin vAbbruch := true; end;
Code:
schließt sich das Delphi Programm NICHT beim klicken des kleinen schwarzen kreuzes ganz rechts oben im Fenster (biSystemMenu) .... auch ALT + F4 schließt das Programm nicht. Es scheint als liefe diese Delay Funktion dennoch weiter. :cry:
until (GetTickCount-lTick>=12*3600*1000) or (vAbbruch = true);
|
Schon mal mit F7 debuggt? :roll:
|
Hey !
Also, ich habe es ausprobiert und es geht !!! Hier der Code :
Delphi-Quellcode:
GRuß, Helld
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public vAbbruch : boolean; { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); begin repeat beep; Application.ProcessMessages; until (1000<1) or vAbbruch; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin vAbbruch:=true; end; procedure TForm1.FormCreate(Sender: TObject); begin vAbbruch:=false; end; end. |
Danke vielmals!!!
Es lag bei mir ... hab da an ner bestimmten Stelle totalen Müll verzapft ... sozusagen ne UNTIL Anweisung die nie durchbrochen wurde :roll: Danke für die Hilfe ... jetzt funzt alles .... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz