wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows – Delphi XE2将Application.MainForm.Handle分配给DLL中的Application.Handle大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个小问题,从DLL内部创建的表单. 基本上会发生什么,当一个表格(Form1)显示(我认为它必须保持在顶部),你打开另一个形式(Form2),它是主要应用程序的一部分(即不住在DLL内) .如果将光标放在Form2上的控件上以便显示提示,则Form2将立即在Form1后面. 仅当MainFormOnTaskBar为true时才会发生这种情况.目前我们将主应用程序的Application.Ha
@H_419_4@
我有一个小问题,从DLL内部创建的表单.

基本上会发生什么,当一个表格(Form1)显示(我认为它必须保持在顶部),你打开另一个形式(Form2),它是主要应用程序的一部分(即不住在DLL内) .如果将光标放在Form2上的控件上以便显示提示,则Form2将立即在Form1后面.

仅当MainFormOnTaskBar为true时才会发生这种情况.目前我们将主应用程序的Application.Handle传递给DLL并将其分配给DLL的Application.Handle.

我设法解决了这个问题,而是将Application.MainForm.Handle传递给DLL,并将其分配给DLL中的Application.Handle.

这样安全吗?有谁知道解决这个问题的正确方法

@H_419_4@

解决方法

您的解决方案非常合理.我有一个Excel COM加载项,它做了非常相似的事情.在该代码中,我将DLL中的Application.Handle设置为Excel主窗口的窗口句柄.这与你正在做的事情有关.

问题是您需要正确设置窗口所有权.您需要所有权链才能一直回到应用的主要表单. DLL中的表单不知道主要表单是什么,因此您必须提供该知识.

请注意,我说的是Windows使用的窗口所有者的概念,而不是完全不同的VCL概念.在VCL术语中,这称为弹出父级,您可以通过将DLL表单的弹出父级显式设置为主窗体来解决您的问题.相关属性是PopupMode和PopupParent.对于生活在主应用程序中的表单,VCL自然会使其弹出父对象成为主要表单.

但是,在谈到明确设置弹出式父级时,我会强调您当前的解决方案更简单,更方便.

这两种解决方案的作用是确保所有辅助表格都归主表单所有.这意味着这些表单始终位于主窗体之上.这意味着如果主窗体最小化,辅助窗体将被最小化.在这里阅读所拥有的窗口:Window Features.

便说一句,如果您一直使用运行时包而不是DLL,则包中的代码将连接到与主窗体相同的VCl.因此打包的代码将能够看到主窗体并适当地设置窗口所有者.这当然是使用包的一个优点.当然,可能有很好的理由需要使用DLL而不是包.

@H_419_4@ @H_419_4@
@H_419_4@
@H_419_4@

大佬总结

以上是大佬教程为你收集整理的windows – Delphi XE2将Application.MainForm.Handle分配给DLL中的Application.Handle全部内容,希望文章能够帮你解决windows – Delphi XE2将Application.MainForm.Handle分配给DLL中的Application.Handle所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。