继续消息窗口
来源:互联网 发布:网络问卷调查兼职 编辑:程序博客网 时间:2024/05/20 18:03
今天准备再把消息窗口完善下,算是完工了,结果还是被一个很普通的问题难住了。
先实现窗口的动画显示,这里没什么,TIMER是最简单的方法,然后是窗口在关闭时的渐隐效果,也没问题,用TIMER照样解决,
如果不用TIMER的话,可以写个循环,在循环里加上application.handlemessage就可以了。
然后在双击自动创建的LABEL时问题出来了,我同时在LABEL上加入了单击和双击时间,结果双击时间之前总要执行以下单击事件,双击事件倒是没法激发了,在MOUSEDOWN里用shift状态来控制无果,也可能是方法不对,网上有文章说可以。
然后的方法就是截取WNDPROC,然后分别处理单击和双击的消息,我最不想的就是为这个再重写控件,但不晓得怎么把正确的WNDPROC赋给LABEL,只好用最笨的办法,写了一个类来从TLABEL继承,然后改写WndProc
TLabelEx=class(TLabel)
procedure WndProc(var msg:TMessage);
end;
代码如下:
procedure TLabelEx.WndProc(var msg: TMessage);
var
Nowtime:Cardinal;
begin
Nowtime:=GetTickCount;
with msg do
begin
case msg of
WM_LBUTTONDBLCLK:
begin
click_tag:=true;
self.DblClick;
end;
WM_LBUTTONDOWN:
begin
click_tag:=false;
while ((GetTickCount<Nowtime+180) and (not click_tag)) do
begin
Application.HandleMessage;
end;
if not click_tag then
self.Click;
end;
else
begin
try
Dispatch(msg);
except
if Assigned(ApplicationHandleException) then
Application.HandleException(self);
end;
end;
end;
end;
end;
我在那里单击之后要做个循环,而系统原来的GetDoubleClickTime为500ms,这样等待的时间太长了,能明显感觉到延迟,所以我在每次响应消息时把间隔设为180ms,这样延迟就没那么明显了。
之前我是定义了一个LBWndProc(var msg:TMessage);
然后把这个赋给自动创建的LABEL,
如
lb_temp.DefWndProc:=LBWndProc;
但我是把过程写在FORM里面的,结果处理消息的时候,处理全是FORM的消息,总不成去一个个去截取,而别的办法我也没想出来,所以只要用这个笨办法了。
其实仔细想一下,用赋值的方法应该是可以实现的,我的写法肯定有问题,如果这样写的话,可能也是稍为麻烦,回头再试一下。
- 继续消息窗口
- 鼠标移出窗口后,继续响应该窗口消息
- 窗口消息
- 窗口消息
- 窗口消息
- 窗口消息
- 窗口消息机制
- 窗口和消息
- 窗口消息机制
- 关于Windows窗口消息
- Windows窗口消息分析
- 窗口消息介绍
- QQ消息窗口实现
- 向窗口发送消息
- Windows窗口消息大全
- C26、窗口消息
- Win32窗口鼠标消息
- MFC窗口消息
- Linq 中的IMultipleResult的用于调用存储过程获取多个结果集(表)
- spring包装的rmi
- LINUX下的抓图工具——SCROT
- Joomla 用户密码的生成原理
- QString unsigned char* 的转换
- 继续消息窗口
- 二进制文件和文本文件及其文件读写
- 基础类的DSP/BIOS API调用
- C#常用正则表达式
- Actions v/s Functions?
- 页面居中
- 存储过程中常用语句
- Python/Installing pydasm and pydbg with Python 2.5, WinXP, VC++2008 Express Edition
- XML遍历文档树(广度优先与递归)