Wieso nutzt Du nicht das Event und fragst da den Status mit IF ab ? Ist der Ping erfolgreich, führe Deinen Code aus, ist der Ping nicht Erfolgreich gib eine Meldung aus zum Beispiel.
Das wird bei 'nem Programmablauf in der Form aber nicht funktionieren:
Delphi-Quellcode:
procedure irgendwie;
begin
if a = b then begin
irgendwas;
end else begin
if Ping_Erfolgreich('xxx.xxx.xxx.xxx') then begin
MachWennPingErfolgreich;
end else begin
MachWennPingNichtErfolgreich;
end;
end;
end;
Nur mal so als Idee:
Ping_Erfolgreich sei also eine Funktion, dann könnte man dadrin eventuell sowas machen:
Delphi-Quellcode:
var
fPingOk;
function Ping_Erfolgreich(aAddress : String) : Boolean;
var
i : Integer;
iSleep : Integer;
begin
fPingOk := False;
i := 0;
iSleep := 100;
Ping.Address := aAddress;
Ping.Ping;
repeat
i := i + iSleep;
Sleep(iSleep);
Application.ProcessMessages; // oder sonstwasfürnenschleifeninhalt
until fPingOk or (i > Ping.TimeOut);
Result := fPingOk;
end;
In dem Ereignis der Pingkomponente, in dem man feststellen kann, ob das Ping erfolgreich war, wird bei Erfolg fPingOk auf True gesetzt.
Ist zwar unelegant und Objektorientierung sieht anders aus, aber es mag erstmal gehen.
Ansonsten halt eine Ableitung der Pingkomponente schreiben, die beim Ping eben wartet und in 'nem Attribut über Erfolg oder Misserfolg informiert.
Sprich: Meine obige "Krücke" in 'ner Komponente kapseln.