Uni*_*it4 4 delphi dll tscrollbox
我在网上发布了这个:Show来自DLL的表单TScrollBox
我想要做的是调用并在Delphi中显示一个表单TScrollBox.不是Show或ShowModal
示例但不包含任何DLL:
Form1.Parent:= ScrollBox;
Form1.Show;
Run Code Online (Sandbox Code Playgroud)
我如何使用内部表单的DLL中的此示例
谁能提供一个例子?
问候,
您不能在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)
你需要注意窗口的重建.如果重新创建主机窗口,则需要手动重新创建子窗体.
简而言之,你所尝试的是相当脆弱的.如果我是你,我会寻找一种不同的方法.