AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Timer (Amateuerfrage)

Ein Thema von neus · begonnen am 16. Apr 2007 · letzter Beitrag vom 16. Apr 2007
Antwort Antwort
neus

Registriert seit: 15. Apr 2007
16 Beiträge
 
#1

Timer (Amateuerfrage)

  Alt 16. Apr 2007, 19:31
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;
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#2

Re: Timer (Amateuerfrage)

  Alt 16. Apr 2007, 19:34
Sleep friert die Form auch ein. Nimm die Prozedur DelayDelay.
  Mit Zitat antworten Zitat
neus

Registriert seit: 15. Apr 2007
16 Beiträge
 
#3

Re: Timer (Amateuerfrage)

  Alt 16. Apr 2007, 19:59
Zitat von fLaSh11:
Sleep friert die Form auch ein. Nimm die Prozedur DelayDelay.
Mir ist es schon fast peinlich, aber kannst du für mein Beispiel den kompletten Source machen ?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Timer (Amateuerfrage)

  Alt 16. Apr 2007, 20:04
Delphi-Quellcode:
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;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Timer (Amateuerfrage)

  Alt 16. Apr 2007, 20:05
Schau dir mal die Signatur an:
procedure Delay(Milliseconds: Integer); ist doch eigentlich selbsredend
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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