gpt4 book ai didi

delphi - 如何从句柄获取 TForm 实例?

转载 作者:行者123 更新时间:2023-12-03 14:50:42 29 4
gpt4 key购买 nike

我正在将一些函数转换为与 Windows 7 功能相关的 DLL。我无法通过 DLL 传递 TForm,因此我需要传递它的句柄。除了,一旦我在另一侧有了该句柄,如何将其重建回 TForm 实例?另外,通过 Delphi DLL 传递句柄 (HWND) 以兼容从 C# 调用的适当方法是什么?

如果不可能,那么我至少需要知道如何仅使用 Windows API 来更改窗口的颜色,而不引用 TForm。目标是在这个 DLL 中,它需要以某种方式改变表单的颜色。将句柄传递给 DLL 没有问题,但是如何使用该句柄来处理该句柄所代表的形式呢?

我具体做的就是将一个 DLL 放在一起,其中包含使 Delphi7 应用程序与 Windows7 兼容所需的一切,例如,绘制玻璃、在任务栏中正确显示多个表单(以及最小化表单)、显示绿色任务栏图标中的进度以及可能涉及的其他内容。但此类工作需要修改表格。我需要能够从 DLL 内进行这些修改。

最佳答案

一般来说,您可以转换 HWND到 VCL TWinControl -使用VCL的FindControl()派生对象指针Controls 中的函数单元。然后您可以检查 TWinControl 是否实际上是一个TForm使用is运算符。

然而,正如其他人所说,通过 DLL 边界传递 VCL 对象通常是危险的,如果 EXE 和 DLL 不是使用完全相同的 VCL 版本、RTL 版本、内存管理器等编译的,则可能会导致问题。 VCL 对象安全地越过 DLL 边界,将 DLL 项目更改为 BPL 包项目,并确保在 EXE 和 BPL 中启用动态 RTL。

关于delphi - 如何从句柄获取 TForm 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190224/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com