releasecapture怎么做成:像BCB设计界面时可以多选控件并可拖动效果求解

releasecapture  时间:2021-06-10  阅读:()

SetCapture到底是什么?

函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。

一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。

同一时刻只能有一个窗口捕获鼠标。

如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。

函数原型:HWND SetCapture(HWND hwnd); 参数: hWnd:当前线程里要捕获鼠标的窗口句柄。

返回值:返回值是上次捕获鼠标的窗口句柄。

如果不存在那样的句柄,返回值是NULL。

备注:只有前台窗口才能捕获鼠标。

如果一个后台窗口想捕获鼠标,则该窗口仅为其光标热点在该窗口可见部份的鼠标事件接收消息。

另外,即使前台窗口已捕获了鼠标,用户也可点击另一个窗口,将其调入前台。

当一个窗口不再需要所有的鼠标输入时,创建该窗口的线程应当调用函数ReleaseCapture来释放鼠标。

此函数不能被用来捕获另一进程的鼠标输入。

鼠标事件: setCapture捕获以下鼠标事件:onmousedown、onmouseup、onmousemove、onclick、ondblclick、onmouseover和onmouseout。

程序中主要是要捕获onmousemove和onmouseup事件。

msdn的介绍中还说到setCapture有一个bool参数,用来设置在容器内的鼠标事件是否都被容器捕获。

容器就是指调用setCapture的对象,大概意思就是: 参数为true时(默认)容器会捕获容器内所有对象的鼠标事件,即容器内的对象不会触发鼠标事件(跟容器外的对象一样); 参数为false时容器不会捕获容器内对象的鼠标事件,即容器内的对象可以正常地触发事件和取消冒泡。

Delphi如何实现无边框窗体的移动?

在控件的MouseDown事件中加入 if (ssleft in Shift) then begin ReleaseCapture; Perform(WM_mand, $F012, 0); end; 如form1: procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (ssleft in Shift) then begin ReleaseCapture; Perform(WM_mand, $F012, 0); end; end; end.

如何获取鼠标是否进入控件(按钮tips显示

作者:黎哲_海情 答:现mandbutton控件举例,其他控件一样: 1.首先声明两个API函数//获得焦点Function ulong SetCapture(ulong hWnd) Library "USER32.DLL"//释放焦点Function BOOLEAN ReleaseCapture() Library "USER32.DLL" 2.自定义用户事件鼠标在控件上移动mousemove(EventID号为pbm_mousemove),鼠标进入控件mousewithin,鼠标离开控件mousewithout。

3.声明一些Instance变量 boolean ib_mousecaptured//控件是否已经获得焦点 boolean ib_mousewithin//鼠标是否进入控件 integer ii_losecapture=0//控件是否要失去焦点 4.在mousemove事件中写入 if ii_losecapture 1 then if not ib_mousecaptured then//没有捕获鼠标移动 //捕获鼠标移动 SetCapture(handle(this)) ib_mousecaptured = TRUE else //已经捕获鼠标移动 if xpos < 0 or ypos < 0 or xpos width or ypos height then//鼠标不在该控件上//释放鼠标ReleaseCapture() ib_mousecaptured = FALSE //触发mousewithout事件 this.post event mousewithout() ib_mousewithin=false ii_losecapture=0 //this.of_set()elseif not ib_mousewithin then //触发mousewithin事件 this.post event mousewithin() ib_mousewithin=trueend ifend ifend ifelseii_losecapture=ii_losecapture + 1end if 5.最后你就可以在mousewithin和mousewithout中写入你想要的效果或事件。

of_set()可能是重置某些值的操作源码天空

怎么做成:像BCB设计界面时可以多选控件并可拖动效果求解

其中单个控件拖动方法: 其一:用mouseDown,mouseMove,mouseUp可实现,但占CPU大. 其二:在OnMouseDown: ReleaseCapture(); SendMessage(Button1-> Handle,WM_SYSCOMMAND,0XF012,0); 但不会触发mouseUp,Click,startDrag,DragDrop,EndDrag. 其三:在OnStartDrag: ReleaseCapture(); SendMessage(Button3-> Handle,WM_NCLBUTTONDOWN,HTCAPTION,0); 拖动好后,还要再在无任何处多点一下能恢复鼠标事件. 现要做成:在程序运行时,能动态添加/删除控件,且可以多选控件进行拖动,如BCB设计界面. ------解决方案--------------------------------------------------------这个 不知道你得最终意图

  • releasecapture怎么做成:像BCB设计界面时可以多选控件并可拖动效果求解相关文档

PhotonVPS:美国Linux VPS半价促销2.5美元/月起,可选美国洛杉矶/达拉斯/芝加哥/阿什本等四机房

photonvps怎么样?photonvps现在针对旗下美国vps推出半价促销优惠活动,2.5美元/月起,免费10Gbps DDoS防御,Linux系统,机房可选美国洛杉矶、达拉斯、芝加哥、阿什本。以前觉得老牌商家PhotonVPS贵的朋友可以先入手一个月PhotonVPS美国Linux VPS试试了。PhotonVPS允许合法大人内容,支持支付宝、paypal和信用卡,30天退款保证。Photo...

数脉科技:香港服务器低至350元/月;阿里云CN2+BGP线路,带宽10M30M50M100M

数脉科技(shuhost)8月促销:香港独立服务器,自营BGP、CN2+BGP、阿里云线路,新客立减400港币/月,老用户按照优惠码减免!香港服务器带宽可选10Mbps、30Mbps、50Mbps、100Mbps带宽,支持中文本Windows、Linux等系统。数脉香港特价阿里云10MbpsCN2,e3-1230v2,16G内存,1T HDD 或 240G SSD,10Mbps带宽,IPv41个,...

妮妮云(119元/季)日本CN2 2核2G 30M 119元/季

妮妮云的知名度应该也不用多介绍了,妮妮云旗下的云产品提供商,相比起他家其他的产品,云产品还是非常良心的,经常出了一些优惠活动,前段时间的八折活动推出了很多优质产品,近期商家秒杀活动又上线了,秒杀产品比较全面,除了ECS和轻量云,还有一些免费空间、增值代购、云数据库等,如果你是刚入行安稳做站的朋友,可以先入手一个119/元季付的ECS来起步,非常稳定。官网地址:www.niniyun.com活动专区...

releasecapture为你推荐
非凡论坛如何才能注册成为非凡论坛的会员?应用雷达雷达是干什么用的?y码衣服的尺码标识,3xL xL xxL都代表的什么意思?star413CONVERSE和ALLSTAR有什么区别币众筹众筹有哪几种 众筹如何实现回报超级播放器推荐个好的视频播放器activitygroupAndroid中如何在ActivityGroup里面监听back按钮,使得可按要求实现哪个activity可返回,哪个不需要。。移动硬盘文件或目录损坏且无法读取急:移动硬盘无法访问,打开提示”文件或目录损坏且无法读取”中信银行理财宝中信银行香卡属于理财宝吗?点心os点心操作系统?
我的世界服务器租用 出租服务器 宕机监控 godaddy dux 电信虚拟主机 香港新世界中心 域名与空间 空间登录首页 服务器维护 阿里云免费邮箱 阿里云邮箱登陆 万网注册 如何登陆阿里云邮箱 hostease 中国电信宽带测速 万网服务器 密钥索引 hosting24 windows2008 更多