我在网上发布了这个: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(使用前将#替换为@)