windows – 如何在不禁用子控件功能的情况下从客户区拖动表单?
发布时间:2020-12-14 03:58:23 所属栏目:Windows 来源:网络整理
导读:我有一个Delphi XE2项目,其中包含Label1,BitBtn1和 Image1等组件.我已经实现了表单拖动而没有标题栏写下面的代码: private { Private declarations } procedure WMNCHitTest(var Msg: TWMNCHitTest) ; message WM_NCHitTest; 和 procedure TMainForm.WMNCHi
我有一个Delphi XE2项目,其中包含Label1,BitBtn1和
Image1等组件.我已经实现了表单拖动而没有标题栏写下面的代码:
private { Private declarations } procedure WMNCHitTest(var Msg: TWMNCHitTest) ; message WM_NCHitTest; 和 procedure TMainForm.WMNCHitTest(var Msg: TWMNCHitTest) ; begin inherited; if Msg.Result = htClient then Msg.Result := htCaption; end; 在我的表单中,Image1.OnMouseMove和Label1.OnClick事件对我的项目是强制性的,但它们不起作用.如何从客户区拖动表单,除了Image1和Label1区域?我可以做一件事,我可以使用一个TPanel,但它会破坏我的表单的GlassFrame和SheetOfGlass属性. 解决方法
您需要使用WM_NCHITTEST消息中包含的位置信息.用它来确定此时是否存在控件.例如,您可以使用ControlAtPos方法.
procedure TMainForm.WMNCHitTest(var Msg: TWMNCHitTest); begin inherited; if ControlAtPos(ScreenToClient(Msg.Pos),True,True)=nil then if Msg.Result=htClient then Msg.Result := htCaption; end; 仅当您单击窗体上没有控件的点时,才允许拖动.您可能希望使用替代标准,但使用Msg.Pos是关键想法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-xp – 为windows设置uid
- windows-7 – Windows 7 RC是否足够稳定以进行有限的生产部
- windows – Perl:“start perl.exe”与“perl.exe”有什么
- windows-server-2008 – 组合2 – 1GB网卡 – 只能看到50%
- 为Windows创建R包
- exchange-2010 – 如何通过Microsoft.Exchange.Rpc.ClientA
- windows – `RegisterDragDrop`返回S_OK,但没有调用方法Dra
- 在Windows上同时监控多个日志文件(通过ssh)?
- uint32_t和int作为日常编程的惯例
- .net – Windows Phone 7(WP7)支持哪些编程语言?
推荐文章
站长推荐
- windows-8 – 为什么像KnockoutJS这样的第三方ja
- windows-server-2008 – 最简单的VPN到Amazon EC
- windows – 如何使用ghc编译GUI可执行文件?
- OpenGL – 如何将3D管道绘制为Windows屏幕保护程
- Windows和Linux中php代码调试工具Xdebug的安装与
- windows-server-2003 – .NET 3.5 SP1安装程序挂
- arrays – 使用Dart将Uint8List转换为String
- Vulkan Tutorial 01 开发环境搭建之Windows
- windows-server-2012-r2 – 禁用Windows 2012 R2
- wcf – Windows Phone 7.1上的NetTcpBinding(芒果
热点阅读