windows – Delphi XE2将Application.MainForm.Handle分配给DLL
我有一个小问题,从DLL内部创建的表单.
基本上会发生什么,当一个表格(Form1)显示(我认为它必须保持在顶部),你打开另一个形式(Form2),它是主要应用程序的一部分(即不住在DLL内) .如果将光标放在Form2上的控件上以便显示提示,则Form2将立即在Form1后面. 仅当MainFormOnTaskBar为true时才会发生这种情况.目前我们将主应用程序的Application.Handle传递给DLL并将其分配给DLL的Application.Handle. 我设法解决了这个问题,而是将Application.MainForm.Handle传递给DLL,并将其分配给DLL中的Application.Handle. 这样安全吗?有谁知道解决这个问题的正确方法? 解决方法
您的解决方案非常合理.我有一个Excel COM加载项,它做了非常相似的事情.在该代码中,我将DLL中的Application.Handle设置为Excel主窗口的窗口句柄.这与你正在做的事情有关.
问题是您需要正确设置窗口所有权.您需要所有权链才能一直回到应用的主要表单. DLL中的表单不知道主要表单是什么,因此您必须提供该知识. 请注意,我说的是Windows使用的窗口所有者的概念,而不是完全不同的VCL概念.在VCL术语中,这称为弹出父级,您可以通过将DLL表单的弹出父级显式设置为主窗体来解决您的问题.相关属性是PopupMode和PopupParent.对于生活在主应用程序中的表单,VCL自然会使其弹出父对象成为主要表单. 但是,在谈到明确设置弹出式父级时,我会强调您当前的解决方案更简单,更方便. 这两种解决方案的作用是确保所有辅助表格都归主表单所有.这意味着这些表单始终位于主窗体之上.这意味着如果主窗体最小化,辅助窗体将被最小化.在这里阅读所拥有的窗口:Window Features. 顺便说一句,如果您一直使用运行时包而不是DLL,则包中的代码将连接到与主窗体相同的VCL.因此打包的代码将能够看到主窗体并适当地设置窗口所有者.这当然是使用包的一个优点.当然,可能有很好的理由需要使用DLL而不是包. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – 如何确定屏幕保护程序正在运行?
- windows-server-2003 – Windows Web服务器之间共享存储的最
- windows-server-2008 – 本地组策略在Dc中做了什么?
- windows-server-2012-r2 – Windows Server 2012 R2上的APC
- Learning OSG programing---Multi Camera in Multi window
- windows-server-2003 – 远程重置本地管理员密码
- windows – 未应用于某些服务器的计划任务的GPO,日志中没有
- Win10.更新
- 如何在Windows 7上启用dhcp客户端的调试
- windows – 如何在TortoiseSVN上查看锁定消息
- Windows上未注册的Virtualbox OS X虚拟机上的Mac
- api-ms-win-crt-runtime-|1-1-0.dll丢失的解决方
- 如何将WCF中的服务访问限制为一组Windows帐户?
- Windows Phone 8会支持Qt吗?
- Windows配置基础环境(jdk+tomcat)
- win7 windows server 2008R2下 https SSL证书安装
- windows-7 – 如何在Windows中获取电池信息?
- Windows鼠标右键菜单添加SublimeText打开选项
- 迁移 – 将服务器迁移到新硬件 – SBS 2008
- windows – 为什么WaitForSingleObject(INVALID_