![]() |
Timer (Amateuerfrage)
Hi,
mir macht dieses Delphi langsam mehr Spaß als PHP und mein Grundkurs C++ =). Je mehr ich probiere umso mehr Fragen kommen mir aber auf. Jetzt stehe ich davor: "Ich lasse ein Programm laufen, kann aber ads Formular nicht mehr verschieben." Es sieht also so aus wie als wenn das Programm abgestürtzt ist und keine Rückmeldung gibt. In meinen Beispiel wird ein Ping geschickt mit Pausen. Aber solange er die Schleife ping, kann man das Formular nicht bewegen und das sieht irgendwie doof aus. Was kann ich da tun. Wie verwende ich in meinem Beispiel den Timer , dass er mal funktioniert ?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin max:=100; i:=1; ProgressBar1.Max:=max; while i < max do begin IdIcmpClient1.Host := Form1.Edit1.Text; IdIcmpClient1.Ping(); If IdIcmpClient1.ReplyStatus.BytesReceived > 0 Then ListBox1.Items.Add(IntToStr(i) + ' ' + IdIcmpClient1.Host+' erreichbar '+ IntToStr(IdIcmpClient1.ReplyStatus.BytesReceived)) else ListBox1.Items.Add(IntToStr(i) + ' ' + IdIcmpClient1.Host+' nicht erreichbar'); i:=i+1; sleep(StrToInt(Edit2.Text)); ProgressBar1.Position:=i; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled:=False; Form1.Refresh; Application.ProcessMessages; Timer1.Enabled:=True; end; |
Re: Timer (Amateuerfrage)
Sleep friert die Form auch ein. Nimm die Prozedur
![]() |
Re: Timer (Amateuerfrage)
Zitat:
|
Re: Timer (Amateuerfrage)
Delphi-Quellcode:
Grüße
procedure Delay(Milliseconds: Integer);
var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWord(Milliseconds); while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; if Application.Terminated then Exit; Milliseconds := Tick - GetTickcount; end; finally CloseHandle(Event); end; end; procedure TForm1.Button1Click(Sender: TObject); begin max:=100; i:=1; ProgressBar1.Max:=max; while i < max do begin IdIcmpClient1.Host := Form1.Edit1.Text; IdIcmpClient1.Ping(); If IdIcmpClient1.ReplyStatus.BytesReceived > 0 Then ListBox1.Items.Add(IntToStr(i) + ' ' + IdIcmpClient1.Host+' erreichbar '+ IntToStr(IdIcmpClient1.ReplyStatus.BytesReceived)) else ListBox1.Items.Add(IntToStr(i) + ' ' + IdIcmpClient1.Host+' nicht erreichbar'); i:=i+1; delay(StrToInt(Edit2.Text)); // <---- ProgressBar1.Position:=i; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled:=False; Form1.Refresh; Application.ProcessMessages; Timer1.Enabled:=True; end; Klaus |
Re: Timer (Amateuerfrage)
Schau dir mal die Signatur an:
Delphi-Quellcode:
ist doch eigentlich selbsredend
procedure Delay(Milliseconds: Integer);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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