社区
Delphi
帖子详情
鼠标单击问题
yinzhiw
2004-04-12 10:44:57
我在Button的MouseDown事件中有此按钮的拖动代码:
ReleaseCapture;
Button1.Perform(WM_SYSCOMMAND,$f012,0);
能时间按钮拖动.
但是我在Button的OnClick中的单击事件却不能用:
如写Showmessage('OK');
没有响应,请问怎么解决呢>?
...全文
36
12
打赏
收藏
鼠标单击问题
我在Button的MouseDown事件中有此按钮的拖动代码: ReleaseCapture; Button1.Perform(WM_SYSCOMMAND,$f012,0); 能时间按钮拖动. 但是我在Button的OnClick中的单击事件却不能用: 如写Showmessage('OK'); 没有响应,请问怎么解决呢>?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lzy6204
2004-04-12
打赏
举报
回复
将Showmessage('OK');移到MOUSEDOWN事件中去
procedure TForm2.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Button1.Perform(WM_SYSCOMMAND,$f012,0);
showmessage('ok');
end;
yinzhiw
2004-04-12
打赏
举报
回复
ReleaseCapture 函数的功能是这样的
该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理.捕获鼠标的窗口
接收所有的鼠标输入,除非点击鼠标键时,光标热点在令一个线程的窗口中.
按照它的功能所叙,那不就不是ReleaseCapture的影响么?
Linux2001
2004-04-12
打赏
举报
回复
sorry,我刚才讲的内容中有一个地方有错!吃掉鼠标消息的不是Perform而是ReleaseCapture这个API函数,它会吃掉后面的鼠标消息!所以如果你想要触发OnClick事件你要么明确的调用OnClick事件(最简单而又行之有效和效率最高的方式)另外一种方式就是再次发送鼠标消息给Button1,让VCL来进行鼠标OnClick事件的触发!
sdlzlj
2004-04-12
打赏
举报
回复
up
Linux2001
2004-04-12
打赏
举报
回复
因为你的Button1.Perform(WM_SYSCOMMAND,$f012,0);这句代码中的$F012是一个ie魔数,所谓魔数就是一个Delphi本身没有定义的一个常量,但是用这个常量 和有一种意想不到的效果,而Perform是一个广播消息参数,这样Button1就接收到WM_SYSCOMMAND并且去处理这个消息函数去了,并没有接着去处理鼠标按下后Button1父类的默认操作,而inherited就是做这个用处的,不过用在这里好像并没有什么用!所以我这里明确的在OnMouseDown中调用onClick事件!这样就可以满足你的需求了
duhailee
2004-04-12
打赏
举报
回复
不好意思, 我上面写错了,应该是你的ReleaseCapture;调用直接导致ONCLICK事件失去响应,ReleaseCapture;
其定义如下:
function ReleaseCapture; external user32 name 'ReleaseCapture';
你可以换一种拖动BUTTON的方式。
yinzhiw
2004-04-12
打赏
举报
回复
看来这个问题还有点麻烦
期待高手来解决
yinzhiw
2004-04-12
打赏
举报
回复
请问楼上的,加inherited;的意图是什么?
是不是必须把buttonclick的事件放在Button1MouseDown才行呢
有没有不在Button1MouseDown中调用ButtonClick的方法
duhailee
2004-04-12
打赏
举报
回复
呵呵:) 我想应该是这样的,BUTTON的MOUSEDOWN 事件的触发先于ONCLICK事件。
而你的MOUSEDOWN里写了Button1.Perform(WM_SYSCOMMAND,$f012,0); 估计是它在作怪,让以后的ONCLICK事件无法正常响应。。
Linux2001
2004-04-12
打赏
举报
回复
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//SetCapture(Handle);
ReleaseCapture;
Button1.Perform(WM_SYSCOMMAND,$f012,0);
Button1.OnClick(Sender) ;
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('OK');
end;
lzy6204
2004-04-12
打赏
举报
回复
我觉得有点难度
期待楼下的解决……
yinzhiw
2004-04-12
打赏
举报
回复
To lzy6204(学无止境)
你的方法虽然行
但是我要求放在OnClick事件中响应啊
Android事件处理重难点教学视频
之前我们已经学习了如何实现Android的一些动画、组件等功能,但是如果用户要能方便地使用我们的Android APP,我们开发的时候就必须要考虑用户对这些控件可能进行的操作,比如
单击
、双击、滑动等,然后再对这些不同的...
python win32api.sendmessage_最新版本:python win32api模拟了背景
鼠标
单击
问题
。
我目前正在开发脚本,但是遇到了这么奇怪的事情发现当成功获得句柄并且程序最小化/后台运行时,按键模拟代码的最后一句将起作用,但是上面两行
鼠标
代码不起作用,一开始,我觉得程序阻止了此api,但是后来我发现,当...
电脑
鼠标
单击
变成了双击如何恢复
鼠标
单击
变成了双击的原因很多: 1、
鼠标
坏了:
鼠标
的微动开关出现
问题
。
鼠标
摁键都有设计寿命,因为经常击打,很多时候会造成微动开关出现故障。这种
问题
,只能换个
鼠标
了。至少我已经换过很多个
鼠标
了(。・ω・。...
Win10
鼠标
单击
经常变双击
Win10
鼠标
单击
经常变双击 使用win7系统的用户在使用电脑的过程中,遇到了一个很神奇的
问题
,明明是
单击
鼠标
,变成了双击
鼠标
,更换...以上就是win7
鼠标
单击
变双击的方法教程,如果大家也遇到这个
问题
,可以按照这篇文章
完美解决
鼠标
单击
变双击
问题
^_^
最近公司和家的电脑双双出现
鼠标
单击
变双击的
问题
...开始以为中了病毒,结果查了半天和重装之后还是不行,baidu了一下,发现很多人也碰到这个
问题
,究其原因有三点:1. 软件设置
问题
;2. 病毒引起;3.
鼠标
按键的微动开关...
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章