在TScrollBox中从DLL显示表单

Uni*_*it4 4 delphi dll tscrollbox

我在网上发布了这个:Show来自DLL的表单TScrollBox

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

示例但不包含任何DLL:

Form1.Parent:= ScrollBox;
 Form1.Show;
Run Code Online (Sandbox Code Playgroud)

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

谁能提供一个例子?

问候,

Dav*_*nan 6

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

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

function ShowMyForm(ParentWindow: HWND): Pointer; stdcall;
Run Code Online (Sandbox Code Playgroud)

请注意,您不能将父项作为Delphi对象传递,原因与上面描述的完全相同.

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

实现方式如下:

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

你会这样称呼它:

Form := ShowMyForm(ScrollBox.Handle);
Run Code Online (Sandbox Code Playgroud)

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

procedure DestroyMyForm(Form: Pointer); stdcall;
begin
  TMyForm(Form).Free;
end;
Run Code Online (Sandbox Code Playgroud)

你需要注意窗口的重建.如果重新创建主机窗口,则需要手动重新创建子窗体.

简而言之,你所尝试的是相当脆弱的.如果我是你,我会寻找一种不同的方法.