Avatar billede headtaker Nybegynder
21. december 2003 - 15:13 Der er 9 kommentarer og
1 løsning

Hvordan kan jeg bruge repeat over flere procedure ?

Her ses en knap, som sender et ping og lukker 2 programmer hvis der er modtaget noget på det afsendte ping. Mit spørgsmål er nu hvordan kan jeg få programmet til at blive ved med at pinge indtil at der er modtaget noget ?
Jeg har prøvet med repeat men det virker kun indenfor en procedure :-(

procedure TForm1.KnapClick(Sender: TObject);

var

  WindowInfo : TFindWindowStruct;

begin

  EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));

  ICMP.OnReply := ICMPReply;
  ICMP.ReceiveTimeout := 1000;
  Knap.Enabled := False; try
    ICMP.Host := edtHost.Text;
    ICMP.Ping;
  finally Knap.Enabled := True; end;


end;

procedure TForm1.ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);

var
  search: string;
  search2: string;
  luk : HWND;

begin

    if (ReplyStatus.BytesReceived > 0) then
  search := edit1.Text;
  luk :=  FindWindow(nil, PChar(search));
  if SendMessage(ListBox1.Handle, lb_selectstring, - 1, Longint(PChar(search))) <> LB_ERR then
    SendMessage(luk, WM_SYSCOMMAND,SC_CLOSE,0);

  if (ReplyStatus.BytesReceived > 0) then
  search := edit2.Text;
  luk :=  FindWindow(nil, PChar(search));
  if SendMessage(ListBox1.Handle, lb_selectstring, - 1, Longint(PChar(search))) <> LB_ERR then
    SendMessage(luk, WM_SYSCOMMAND,SC_CLOSE,0);

end;
Avatar billede Slettet bruger
21. december 2003 - 15:34 #1
Kan du ikke bruge en timer og sætte Active til false når du har modtaget noget??
Avatar billede headtaker Nybegynder
21. december 2003 - 16:26 #2
hhmm......hvis jeg viste hvad du mener så kunne jeg nok, gider du give et eksempel?
Avatar billede martinlind Nybegynder
21. december 2003 - 16:29 #3
repeat
  procedure 1
  procedure 2
  ...

until


/Martin
Avatar billede Slettet bruger
21. december 2003 - 16:30 #4
Du putter en TTimer fra system paletten på formen:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  WindowInfo : TFindWindowStruct;
begin

  EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));

  ICMP.OnReply := ICMPReply;
  ICMP.ReceiveTimeout := 1000;
  Knap.Enabled := False; try
    ICMP.Host := edtHost.Text;
    ICMP.Ping;
  finally Knap.Enabled := True; end;
end;

procedure TForm1.ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);

var
  search: string;
  search2: string;
  luk : HWND;

begin

    if (ReplyStatus.BytesReceived > 0) then
  search := edit1.Text;
  luk :=  FindWindow(nil, PChar(search));
  if SendMessage(ListBox1.Handle, lb_selectstring, - 1, Longint(PChar(search))) <> LB_ERR then
    SendMessage(luk, WM_SYSCOMMAND,SC_CLOSE,0);

  if (ReplyStatus.BytesReceived > 0) then
  search := edit2.Text;
  luk :=  FindWindow(nil, PChar(search));
  if SendMessage(ListBox1.Handle, lb_selectstring, - 1, Longint(PChar(search))) <> LB_ERR then
    SendMessage(luk, WM_SYSCOMMAND,SC_CLOSE,0);
  Timer1.Active := False;
end;

Så kører den koden som før var i knap1 en gang hvert sekund, og når ICMPReply bliver kørt stopper timeren
Avatar billede headtaker Nybegynder
21. december 2003 - 17:03 #5
meget smart, kan jeg ikke få min knap til at starte den timer, sådan at timeren ikke er startet når programmet starter men bare efter jeg har trykket på knappen ?
husk at skrive det som svar så jeg kan give dig piont for dit svar :-)
Avatar billede Slettet bruger
21. december 2003 - 17:05 #6
Jo, du sætter bare Active på timeren til False og når du trykker på knappen sætter du den til True igen :)
Avatar billede headtaker Nybegynder
21. december 2003 - 17:07 #7
hhmmm....når jeg skriver Timer1.Active := False; får jeg denne fejl

[Error] Unit1.pas(177): Undeclared identifier: 'Active'

hvorfor?
Avatar billede Slettet bruger
21. december 2003 - 17:10 #8
Ups, det er Enabled istedet for Active :)
Avatar billede headtaker Nybegynder
21. december 2003 - 17:11 #9
ahah.....meget bedre, tak for hjælpen :-)
Avatar billede Slettet bruger
21. december 2003 - 17:19 #10
Hvis du vil have den til at køre hurtigere/langsommere kan du ændre på Interval.

Og takker for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester