请教:dll中创建的窗体如何显示在主窗口的容器中 我想在dll中创建一个窗体,把她显示在调用他的主窗口的一个panel中该怎么做?!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把你的dll中建的Form1.show export出去就行了。 DLLApp.Handle := MainApp.Handle; procedure CreateChild(AApplication: TApplication; AMDIForm: TForm; AFormClass: TFormClass); export; stdcall;begin Application := AApplication; with AFormClass.Create(AMDIForm) do Show;end; 还要怎么详细自己, 总不要我全部写出来吧上面是Dll中的方法主程序调用CreateChild(Application, MainForm, TForm1);CreateChild(Application, MainForm, TForm2); 不好意思,我指的是你的第一次回复!!创建MDI子窗体我用其他的方法实现的。对你的方法有一点疑问: AFormClass: TFormClass ~~~~~~~~~~~是要从DLL中导出的嘛?另外,我还是不知道怎么把一个DLL中的窗口显示在主窗口(都是普通窗口)的Panel中! 那你就换一种方式, 两边约定一下, 我写了个例子供你参考没有调试你自己看看library Project2;uses SysUtils, Classes, Forms, WIndows;var FhPrevApp: HWND:{$R *.RES}procedure DllHandler(AReason: Longint);begin case AReason of DLL_PROCESS_ATTACH: FhPrevApp := Application.Handle; DLL_PROCESS_DETACH: Application.Handle := FhPrevApp; end;end;procedure CreateChild(AhApp: HWND; AhParent: HWND; AIndex: Integer); stdcall;var f: TForm;begin Application.Handle := AhApp; case AIndex of begin 0: begin f := TForm1.Create(Application); SetParent(f, AhParent); f.Show; end; 1: begin f := TForm2.Create(Application); SetParent(f, AhParent); f.Show; end; end;end;exports CreateChild;begin @DllProc := DllHanlder;end. 问题解决,非常谢谢!!有几处笔误: SetParent(f, AhParent); 应为:SetParent(f.Handle, AhParent); @DllProc := DllHanlder; 应为:DllProc := @DllHandler;给分!! delphi 用 idhttp 实现 socks5代理功能 请推荐学习VCL的好书 delphi中如何添加函数 刚刚用Pascal,几个笨问题,请大家多指教 一个关于根据声音画出字幕的问题,有兴趣的一起讨论一下!我给出我写的代码一起讨论一下 如何进行事务控制? 还是个老问题,在此自定义方法中如何避免创建多个窗体,是无模式窗口。 关于移动问题! ★怎样像“蚂蚁”一样在IE浏览器工具栏上建立一个快捷钮? 求助,在简体98上开发的软件要用于繁体98,该如何是好?有何解决方案? 如何能使DateTimePicker只显示年月,而不是显示日 treeview1中如何知道单击的是节点还是数据项?
begin
Application := AApplication;
with AFormClass.Create(AMDIForm) do Show;
end;
上面是Dll中的方法主程序调用
CreateChild(Application, MainForm, TForm1);
CreateChild(Application, MainForm, TForm2);
创建MDI子窗体我用其他的方法实现的。
对你的方法有一点疑问:
AFormClass: TFormClass
~~~~~~~~~~~是要从DLL中导出的嘛?另外,我还是不知道怎么把一个DLL中的窗口显示在主窗口(都是普通窗口)的Panel中!
SysUtils,
Classes,
Forms,
WIndows;var
FhPrevApp: HWND:
{$R *.RES}
procedure DllHandler(AReason: Longint);
begin
case AReason of
DLL_PROCESS_ATTACH: FhPrevApp := Application.Handle;
DLL_PROCESS_DETACH: Application.Handle := FhPrevApp;
end;
end;procedure CreateChild(AhApp: HWND; AhParent: HWND; AIndex: Integer); stdcall;
var
f: TForm;
begin
Application.Handle := AhApp;
case AIndex of
begin
0:
begin
f := TForm1.Create(Application);
SetParent(f, AhParent);
f.Show;
end;
1:
begin
f := TForm2.Create(Application);
SetParent(f, AhParent);
f.Show;
end;
end;
end;exports
CreateChild;begin
@DllProc := DllHanlder;
end.
有几处笔误:
SetParent(f, AhParent); 应为:SetParent(f.Handle, AhParent);
@DllProc := DllHanlder; 应为:DllProc := @DllHandler;给分!!