Autor Beitrag
Holg_i
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mi 08.05.13 16:46 
Hallo an alle,

ich möchte folgendes realisieren:

Mein Programm läuft ganz normal ab. Sollte ich ein Formular (ShowModal) so muss der Anwender ja erst das Formular beenden bevor er mit dem Programm weiter arbeiten kann. Doch ich möchte das Programm auch auf keine Ereignisse mehr reagiert (OnTimer und Co).

In meinem Programm sprechen sehr viele Routinen auf Ereignisse an. Mehre Timer, RS232 eingäng, TCP/IP u.s.w

Ich stelle mir das so wie beim Debug vor wenn ich ein Brakpoint setze.

Hätte Ihr ein Lösungsansatz für D7?
ChrisCross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124
Erhaltene Danke: 12

Windows 10 64 bit
Delphi XE6 Starter
BeitragVerfasst: Mi 08.05.13 18:51 
Hallo Holg_i,

versuche einfach einmal sleep. Dahinter muss die Sekundenanzahl. Vielleicht könnte man da auch einfügen, bis das Formular beendet warten.

_________________
Christoph
Unser Mathelehrer: Das ist der letzte Matheblock in dieser Woche … Er hat aber gerade erst angefangen. Was die gute und was die schlechte Nachricht ist, kann sich jeder selbst aussuchen.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 08.05.13 19:59 
Besser als die SLEEP-Function ist die SetWaitableTimer-Function.

Ein SLEEP-Ersatz besteht aus:
- CreateWaitableTimer
- SetWaitableTimer
- WaitForSingleObject (z.B. modales Fenster wird geschlossen)

Test: Button1 klicken, gleich anschliessend Button2 klicken
Obwohl Timer1 unter Button1Click nur 10 Sek. läuft, wird erst nach Ablauf von Timer2 das Ende von Timer1 angezeigt.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure TForm1.Button1Click(Sender: TObject); // Timer1
var
AlarmTimer : THandle;
Zeit : Large_Integer;
begin
Label1.Caption:='Running...';
AlarmTimer := CreateWaitableTimer(nil, False, nil);
CancelWaitableTimer(AlarmTimer);
Zeit.QuadPart := 10 * (-10000000); // 10 Sekunden-Test
SetWaitableTimer(AlarmTimer, Zeit.Quadpart, 0nilnil, False);
while WaitForSingleObject(AlarmTimer, 20) <> Wait_Object_0 do // Beispiel: 20msec
begin
  Application.ProcessMessages;
end;
Label1.Caption:='Ready';
end;

procedure TForm1.Button2Click(Sender: TObject); // Timer2
var
AlarmTimer : THandle;
Zeit : Large_Integer;
begin
Label2.Caption:='Running...'; Application.ProcessMessages;
AlarmTimer := CreateWaitableTimer(nil, False, nil);
CancelWaitableTimer(AlarmTimer);
Zeit.QuadPart := 30 * (-10000000); // 30 Sekunden-Test
SetWaitableTimer(AlarmTimer, Zeit.Quadpart, 0nilnil, False);
while WaitForSingleObject(AlarmTimer, INFINITE) <> Wait_Object_0 do
begin
  Application.ProcessMessages; // ACHTUNG - Programm tut NICHTS!!!
end;
Label2.Caption:='Ready';
end;


Zuletzt bearbeitet von hathor am Mi 08.05.13 21:50, insgesamt 4-mal bearbeitet
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Mi 08.05.13 20:20 
user profile iconChrisCross hat folgendes geschrieben Zum zitierten Posting springen:
sleep. Dahinter muss die Sekundenanzahl

Millisekunden ;)
ausblenden Delphi-Quelltext
1:
sleep(1000); //1 sek "sleepen"					

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
ChrisCross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124
Erhaltene Danke: 12

Windows 10 64 bit
Delphi XE6 Starter
BeitragVerfasst: Do 09.05.13 12:24 
:oops: stimmt

_________________
Christoph
Unser Mathelehrer: Das ist der letzte Matheblock in dieser Woche … Er hat aber gerade erst angefangen. Was die gute und was die schlechte Nachricht ist, kann sich jeder selbst aussuchen.