wm_lbuttonUp消息的响应代码和OnClick事件的响应代码 谁先执行?可以让前者先吗?

richi_ 2003-11-21 12:31:14
我写了一个一个自定义的button控件,并处理了wm_lbuttondown和wm_lbuttonUp两个消息,这两个消息的处理过程就是为button刷上不同的背景图片。

然后在Form中,我写了button的Onclick事件的响应,是对数据库操作,比较耗时。

问题是:鼠标按下时,button的背景及时更换了,但当鼠标弹起时,背景没有改变,直到对数据库的操作(及OnClick事件的响应)完成。我希望能够在鼠标弹起时 首先执行 wm_lbuttonUp消息的响应,然后才执行 OnClick的响应,应该怎么处理呢?

另外,有时候,按钮的OnClick响应已经执行完毕,但是按钮的背景仍未更换,也就是wm_lbuttonUp的响应未被执行,这是怎么回事呢?

谢谢!!

问题解决的话,愿意多加100分。
...全文
44 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
forgetter 2003-11-21
  • 打赏
  • 举报
回复
我的意思不是叫改VCL源码你要看明白了
forgetter 2003-11-21
  • 打赏
  • 举报
回复
它们的顺序如下,
procedure TControl.WMLButtonUp(var Message: TWMLButtonUp);
begin
inherited;
if csCaptureMouse in ControlStyle then MouseCapture := False;
if csClicked in ControlState then
begin
Exclude(FControlState, csClicked);
if PtInRect(ClientRect, SmallPointToPoint(Message.Pos)) then Click;
end;
DoMouseUp(Message, mbLeft);
end;

你难道不可改一下在MouseUp里先更改背景, 再执行操作
richi_ 2003-11-21
  • 打赏
  • 举报
回复
To:forgetter()
问题已解决,谢谢你的指点?

不知如何加分呢?
richi_ 2003-11-21
  • 打赏
  • 举报
回复
To:forgetter()
十分感激!
只是看不太懂?
MouseCapture := False;? 为什么要设为false?
Exclude(FControlState, csClicked);?为什么要Exclude?
DoMouseUp(Message, mbLeft); 鼠标已经弹起了,为什么还要up?

可以简单地讲讲这段代码地逻辑 吗?

再次感谢!
Xleep 2003-11-21
  • 打赏
  • 举报
回复
用SetWindowLong吧。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧