我写了一个一个自定义的button控件,并处理了wm_lbuttondown和wm_lbuttonUp两个消息,这两个消息的处理过程就是为button刷上不同的背景图片。然后在Form中,我写了button的Onclick事件的响应,是对数据库操作,比较耗时。问题是:鼠标按下时,button的背景及时更换了,但当鼠标弹起时,背景没有改变,直到对数据库的操作(及OnClick事件的响应)完成。我希望能够在鼠标弹起时 首先执行 wm_lbuttonUp消息的响应,然后才执行 OnClick的响应,应该怎么处理呢?另外,有时候,按钮的OnClick响应已经执行完毕,但是按钮的背景仍未更换,也就是wm_lbuttonUp的响应未被执行,这是怎么回事呢?谢谢!!问题解决的话,愿意多加100分。
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里先更改背景, 再执行操作
十分感激!
只是看不太懂?
MouseCapture := False;? 为什么要设为false?
Exclude(FControlState, csClicked);?为什么要Exclude?
DoMouseUp(Message, mbLeft); 鼠标已经弹起了,为什么还要up?可以简单地讲讲这段代码地逻辑 吗?再次感谢!
问题已解决,谢谢你的指点?不知如何加分呢?