仔细看看你的类的定义,我这可以
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,winsock;type
PIPOptionInformation = ^TIPOptionInformation;
TIPOptionInformation=packed record
TTL: Byte;
TOS: Byte;
Flags: Byte;
OptionsSize: Byte;
OptionsData: PChar;
end;
PIcmpEchoReply = ^TIcmpEchoReply;
TIcmpEchoReply = packed record
Address: DWORD;
Status: DWORD;
RTT: DWORD;
DataSize:Word;
Reserved: Word;
Data: Pointer;
Options: TIPOptionInformation;
end;
TIcmpCreateFile = function: THandle; stdcall;
TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;
TIcmpSendEcho =
function(IcmpHandle:THandle;
DestinationAddress:DWORD;
RequestData: Pointer;
RequestSize: Word;
RequestOptions: PIPOptionInformation;
ReplyBuffer: Pointer;
ReplySize: DWord;
Timeout: DWord ):DWord; stdcall;
TMyPing = class(TForm)
PingEdit: TEdit;
Label1: TLabel;
StatusShow: TMemo;
exebtn: TButton;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure exebtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction); private
{ Private declarations }
hICMP: THANDLE;
IcmpCreateFile : TIcmpCreateFile;
IcmpCloseHandle:TIcmpCloseHandle;
IcmpSendEcho: TIcmpSendEcho;
public
WSAData:TWSAData;
{ Public declarations }
end;var
MyPing: TMyPing;implementation{$R *.DFM}procedure TMyPing.Button1Click(Sender: TObject);
begin
//Tmyping.??点后没有任何反应
//myping.??点后也没有任何反应//为什么在按钮exebtn的CLICK事件里可以,这里却不行?
end;procedure TMyPing.exebtnClick(Sender: TObject);
var
IPOpt:TIPOptionInformation;// IP Options for packet to send
FIPAddress:DWORD;
pReqData,pRevData:PChar;
pIPE:PIcmpEchoReply;// ICMP Echo reply buffer
FSize: DWORD;
MyString:string;
FTimeOut:DWORD;
BufferSize:DWORD;
begin
if PingEdit.Text <> '' then
begin
FIPAddress:=inet_addr(pchar(Pingedit.text));
FSize := 40;
BufferSize := SizeOf(TICMPEchoReply) + FSize;
GetMem(pRevData,FSize);
GetMem(pIPE,BufferSize);
FillChar(pIPE^, SizeOf(pIPE^), 0);
pIPE^.Data := pRevData;
MyString := '-------Hello,World!---------------';
pReqData := PChar(MyString);
FillChar(IPOpt, Sizeof(IPOpt), 0);
IPOpt.TTL := 64;
FTimeOut := 4000;
IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),
@IPOpt, pIPE, BufferSize, FTimeOut);
try
try
if pReqData^ = pIPE^.Options.OptionsData^ then
begin
StatusShow.Lines.Add(PChar(PingEdit.Text) + '-----'
+IntToStr(pIPE^.DataSize) + '-----' +IntToStr(pIPE^.RTT));
end;
except
showmessage('没有找到Ip地址!');
end;
finally
FreeMem(pRevData);
FreeMem(pIPE);
end;
end
else
showmessage('请输入Ip地址');
end;
// 通过上面的编程,我们就实现了Ping功能的界面操作。实际上,ICMP协议的功能还
//有很多,都可以通过对Icmp.dll的函数调用来实现。
procedure TMyPing.FormCreate(Sender: TObject);
var
hICMPdll: HMODULE;
begin // Load the icmp.dll stuff
WSAStartup(2,WSAData);
hICMPdll := LoadLibrary('icmp.dll');
@ICMPCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile');
@IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle');
@IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');
hICMP :=IcmpCreateFile;
StatusShow.Text := '';
StatusShow.Lines.Add('目的IP地址-----字节数----返回时间(毫秒)');
end;
// 接下来,就要进行如下所示的Ping操作的实际编程过程了。procedure TMyPing.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WSACleanup();
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,winsock;type
PIPOptionInformation = ^TIPOptionInformation;
TIPOptionInformation=packed record
TTL: Byte;
TOS: Byte;
Flags: Byte;
OptionsSize: Byte;
OptionsData: PChar;
end;
PIcmpEchoReply = ^TIcmpEchoReply;
TIcmpEchoReply = packed record
Address: DWORD;
Status: DWORD;
RTT: DWORD;
DataSize:Word;
Reserved: Word;
Data: Pointer;
Options: TIPOptionInformation;
end;
TIcmpCreateFile = function: THandle; stdcall;
TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;
TIcmpSendEcho =
function(IcmpHandle:THandle;
DestinationAddress:DWORD;
RequestData: Pointer;
RequestSize: Word;
RequestOptions: PIPOptionInformation;
ReplyBuffer: Pointer;
ReplySize: DWord;
Timeout: DWord ):DWord; stdcall;
TMyPing = class(TForm)
PingEdit: TEdit;
Label1: TLabel;
StatusShow: TMemo;
exebtn: TButton;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure exebtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction); private
{ Private declarations }
hICMP: THANDLE;
IcmpCreateFile : TIcmpCreateFile;
IcmpCloseHandle:TIcmpCloseHandle;
IcmpSendEcho: TIcmpSendEcho;
public
WSAData:TWSAData;
{ Public declarations }
end;var
MyPing: TMyPing;implementation{$R *.DFM}procedure TMyPing.Button1Click(Sender: TObject);
begin
//Tmyping.??点后没有任何反应
//myping.??点后也没有任何反应//为什么在按钮exebtn的CLICK事件里可以,这里却不行?
end;procedure TMyPing.exebtnClick(Sender: TObject);
var
IPOpt:TIPOptionInformation;// IP Options for packet to send
FIPAddress:DWORD;
pReqData,pRevData:PChar;
pIPE:PIcmpEchoReply;// ICMP Echo reply buffer
FSize: DWORD;
MyString:string;
FTimeOut:DWORD;
BufferSize:DWORD;
begin
if PingEdit.Text <> '' then
begin
FIPAddress:=inet_addr(pchar(Pingedit.text));
FSize := 40;
BufferSize := SizeOf(TICMPEchoReply) + FSize;
GetMem(pRevData,FSize);
GetMem(pIPE,BufferSize);
FillChar(pIPE^, SizeOf(pIPE^), 0);
pIPE^.Data := pRevData;
MyString := '-------Hello,World!---------------';
pReqData := PChar(MyString);
FillChar(IPOpt, Sizeof(IPOpt), 0);
IPOpt.TTL := 64;
FTimeOut := 4000;
IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),
@IPOpt, pIPE, BufferSize, FTimeOut);
try
try
if pReqData^ = pIPE^.Options.OptionsData^ then
begin
StatusShow.Lines.Add(PChar(PingEdit.Text) + '-----'
+IntToStr(pIPE^.DataSize) + '-----' +IntToStr(pIPE^.RTT));
end;
except
showmessage('没有找到Ip地址!');
end;
finally
FreeMem(pRevData);
FreeMem(pIPE);
end;
end
else
showmessage('请输入Ip地址');
end;
// 通过上面的编程,我们就实现了Ping功能的界面操作。实际上,ICMP协议的功能还
//有很多,都可以通过对Icmp.dll的函数调用来实现。
procedure TMyPing.FormCreate(Sender: TObject);
var
hICMPdll: HMODULE;
begin // Load the icmp.dll stuff
WSAStartup(2,WSAData);
hICMPdll := LoadLibrary('icmp.dll');
@ICMPCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile');
@IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle');
@IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');
hICMP :=IcmpCreateFile;
StatusShow.Text := '';
StatusShow.Lines.Add('目的IP地址-----字节数----返回时间(毫秒)');
end;
// 接下来,就要进行如下所示的Ping操作的实际编程过程了。procedure TMyPing.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WSACleanup();
end;end.
解决方案 »
- 求助!!! 如何把一个使用了 indy9组件IdTCPServer的程序变成一个w2000服务??
- 怎么让 bsNone的form能Sizeable呢? 急,在线等啊,大侠指教~~~
- 如何自动生成一个订单号,且动生成的订单号是连续的,不重复的,用户环境为多用户环境,一个订单包含多条订购记录.
- dbgrid问题急求解决
- 关于activex方法的返回值类型的问题。
- Delphi6中如何用ADO连接SQL Server 2000???
- 帮帮我!~~~~(200分请求帮助)
- 简单:使用insert into,要求temp的结构与源表完全还是部分相同?
- 难道开发OA系统一定要用Loutus吗?
- 如何在Delphi程序中使用加了口令的Paradox数据库?
- 急急急!!!我想做一个对指定的网页填写数据的程序,请问如何编写?如何实现?用什么原理?(高分相赠!!)
- 谁用过 raize 的控件,是免费的吗?哪里有下
//myping.??点后也没有任何反应//为什么在按钮exebtn的CLICK事件里可以,这里却不行?没有问题,你的程序是不是paste过来的,双击button1,看看对应的是不是上面的过程。
起作用的,你注释下列3行代码再F9一下。还有就是CTRL+space键强制让它出来,不过
CTRL+space键跟windows输入法热键冲突,windows输入法改成其他的就好了。
procedure TTMyPing.Button1Click(Sender: TObject);
begin
//Tmyping.??点后没有任何反应
//myping.??点后也没有任何反应
//为什么在按钮exebtn的CLICK事件里可以,这里却不行?
end;