在 TScrollBox 中显示 DLL 中的表单

2023-12-30

我在网上发布了这个:Show从 DLL 中的形式TScrollBox

我想做的是在 Delphi 中调用并显示表单TScrollBox。 不作为Show or ShowModal

示例但不包含任何 DLL:

Form1.Parent:= ScrollBox;
 Form1.Show;

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

谁能提供一个例子吗?

Regards,


您不能在 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;

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 TScrollBox 中显示 DLL 中的表单 的相关文章

随机推荐