请问各位老大,调用form1.Button1Click(self);过程和直接在Form中单击Button1完全一样吗?
我写一个基于Indy的程序时遇到问题如下:
procedure TForm1.tcpserver01Execute(AThread: TIdPeerThread);
var ......
begin
...
AThread.Connection.ReadStream(TmpStream,-1, True);
...
form1.Button1Click(self);//此处调用Click过程
...
end;
//此处是Button1的Click事件
procedure TForm1.Button1Click(Sender: TObject);
var n:integer;
begin
//播放键盘鼠标操作消息纪录回放链
for n:=0 to 1000 do
begin
EventArr[n].time:=0;
EventArr[n].hwnd:=0;
end;
PlayLog:=0;
//下面这行运行不正常
hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,HInstance,0);
end;
发现用鼠标单击Button1时
hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,HInstance,0);
可以正常运行,但tcpserver01Execute调用时上面语句运行不了,但其它的行可以运行,百思不得其解。
希望高手指点,必然给分
我写一个基于Indy的程序时遇到问题如下:
procedure TForm1.tcpserver01Execute(AThread: TIdPeerThread);
var ......
begin
...
AThread.Connection.ReadStream(TmpStream,-1, True);
...
form1.Button1Click(self);//此处调用Click过程
...
end;
//此处是Button1的Click事件
procedure TForm1.Button1Click(Sender: TObject);
var n:integer;
begin
//播放键盘鼠标操作消息纪录回放链
for n:=0 to 1000 do
begin
EventArr[n].time:=0;
EventArr[n].hwnd:=0;
end;
PlayLog:=0;
//下面这行运行不正常
hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,HInstance,0);
end;
发现用鼠标单击Button1时
hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,HInstance,0);
可以正常运行,但tcpserver01Execute调用时上面语句运行不了,但其它的行可以运行,百思不得其解。
希望高手指点,必然给分
解决方案 »
- delphi 回调函数,传值
- 在Delphi中如何调用VC中编写的控件,请大家帮帮忙!
- 如何实现闪烁标签label??
- 怎样选择多列作为主键(PrimaryKey)
- 报表问题,在数据只剩下几个时的情况下怎么把报表中的表格都显出来?!
- 下面代码这个符号$表是什么意思,如果是16进制,为什么不直接$1,而是$00000001
- 竞猜 中国队:巴西比分,8:00以后不用来,明天接贴
- 要求xjljm公开向大家赔礼道歉(看来此论坛无能人也!无人会回答此问题!)
- 大家节日快乐,节日大送分
- ADOQuery的问题2???
- FastReport如何禁止用户双击修改报表?同时又可以用代码调用修改报表?
- 如何新建文件夹和怎样检测文件夹是否存在
改为:
form1.Button1Click(Nil);
或者
form1.Button1Click(form1.Button1);
方法都不行。
我在procedure TForm1.Button1Click(Sender: TObject);方法最后加了一句
memo1.Lines.Add('Done');此语句可以正常运行,但hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,HInstance,0);语句就是不执行,
深度忧闷中.................
form1.Button1.Click; //此处调用Click过程
=====================================================================
程序是一个基于Indy的遇到问题如下:
1、是Indy IdTcpServer组件的Execute过程
procedure TForm1.tcpserver01Execute(AThread: TIdPeerThread);
var ......
begin
...
AThread.Connection.ReadStream(TmpStream,-1, True);
...
form1.Button1Click(self);//此处调用Click过程
...
end;
2、//是Button1的Click事件
procedure TForm1.Button1Click(Sender: TObject);
var n:integer;
begin
..........
PlayLog:=0;
//下面这行运行不正常
hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,HInstance,0);
end;
3、下面是SetwindowsHookEx函数调用的PlayProc函数Function PlayProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
begin
canPlay:=1;
Result:=0;
if iCode < 0 then //必须将消息传递到消息链的下一个接受单元
Result := CallNextHookEx(hPlay,iCode,wParam,lParam)
else if iCode = HC_SYSMODALON then canPlay:=0
else if iCode = HC_SYSMODALOFF then canPlay:=1
else if ((canPlay =1 )and(iCode=HC_GETNEXT)) then
begin
if bDelay then begin
bDelay:=False;
Result:=50;
end;
pEventMSG(lParam)^:=EventArr[PlayLog];
end else if ((canPlay = 1)and(iCode = HC_SKIP))then begin
bDelay := True;
PlayLog:=PlayLog+1;
end;
if PlayLog>=EventLog then
begin
Form1.memo1.Lines.Add('THE END');
UNHookWindowsHookEx(hPlay);
end;
end;
问题:直接Click Button1则编号3的PlayProc函数可运行消息记录至结束,而使用
别的程序调用的Click 编号为3的PlayProc函数只运行一次就结束。
=======================================================================