📄 singleping.pas
字号:
unit SinglePing;
interface
uses
Classes,IdIcmpClient,SysUtils;
type
SglPingThrd = class(TThread)
private
{ Private declarations }
protected
GetIPStr:String;
SaveIPList:TStrings;
MyIcmpClient:TIdIcmpClient;
Procedure SaveIP;
Procedure PingIP;
Procedure UpdatePanel;
Procedure MyIdIcmpClientReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
procedure Execute; override;
public
Constructor Create(PngIP:String;EchoIPList:TStrings;TimeO:Integer);
Destructor Destroy;override;
end;
implementation
uses Hsearch;
Constructor SglPingThrd.Create(PngIP:String;EchoIPList:TStrings;TimeO:Integer);
begin
inherited Create(True);
self.FreeOnTerminate:=True;
GetIPStr:=PngIP;
SaveIPList:=EchoIPList;
MyIcmpClient:=TIdIcmpClient.Create(nil);
MyIcmpClient.Protocol:=1;
MyIcmpClient.BufferSize:=1024;
MyIcmpClient.Port:=0;
MyIcmpClient.ReceiveTimeout:=TimeO;
MyIcmpClient.OnReply:=MyIdIcmpClientReply;
end;
Procedure SglPingThrd.MyIdIcmpClientReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
if (AReplyStatus.ReplyStatusType=rsEcho) then
begin
if(AReplyStatus.FromIpAddress=GetIPStr) then
begin
Synchronize(SaveIP);
end;
end;
end;
Procedure SglPingThrd.SaveIP;
begin
SaveIPList.Insert(0,GetIPStr);
end;
Procedure SglPingThrd.PingIP;
begin
MyIcmpClient.Host:=GetIPStr;
MyIcmpClient.Ping;
end;
procedure SglPingThrd.UpdatePanel;
begin
NetSearch.Panel1.Caption:='当前探测:'+GetIPStr+
'共完成:'+IntToStr(PingCount)+'个IP地址';
NetSearch.Panel1.Update;
end;
procedure SglPingThrd.Execute;
begin
PingCount:=Pingcount+1;
PingIP;
Synchronize(UpdatePanel);
NetSearch.Timer1.Enabled:=False;
self.Terminate;
end;
Destructor SglPingThrd.Destroy;
begin
MyIcmpClient.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -