gpt4 book ai didi

delphi - 在 TScrollBox 中显示 DLL 中的表单

转载 作者:行者123 更新时间:2023-12-03 15:22:13 25 4
gpt4 key购买 nike

我在线发布了此内容:Show form from DLL in TScrollBox

我想做的是在 Delphi TScrollBox 中调用并显示一个表单。不像 ShowShowModal

示例但不包含任何 DLL:

Form1.Parent:= ScrollBox;
Form1.Show;

我如何使用内部有表单的 DLL 中的示例

谁能举个例子吗?

问候,

最佳答案

您不能在 DLL 和主机可执行文件之间传递 Delphi 对象。这是因为对象只能在创建它们的模块中进行操作。现在,如果您使用运行时包,您就能够摆脱该限制。

您可以从创建并显示表单的 DLL 中导出一个函数。该函数可能如下所示:

function ShowMyForm(ParentWindow: HWND): Pointer; stdcall;

请注意,您无法将父级作为 Delphi 对象传递,原因与我上面描述的完全相同。

您也不能指定表单的父级是可执行文件中的控件。所以你必须传递父窗口的句柄。

实现如下:

function ShowMyForm(ParentWindow: HWND): Pointer; stdcall;
var
Form: TMyForm;
begin
Form := TMyForm.CreateParented(ParentWindow);
Form.Show;
Result := Pointer(Form);
end;

你可以这样调用它:

Form := ShowMyForm(ScrollBox.Handle);

您还需要提供一个函数来在完成后销毁表单:

procedure DestroyMyForm(Form: Pointer); stdcall;
begin
TMyForm(Form).Free;
end;

并且您需要注意窗口的重新创建。如果重新创建主窗口,则需要手动重新创建子窗体。

简而言之,您正在尝试的事情相当脆弱。如果我是你,我会寻找不同的方法。

关于delphi - 在 TScrollBox 中显示 DLL 中的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16912393/

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