我在Exe中调用Dll窗体,并将Dll中一个主窗体嵌入到Exe主窗体中.Dll其他窗体showmodal显示,但是这些窗体经过windows窗口切换等操作之后,这些窗口会跑到主窗口背后去,怎么处理?
测试代码如下:exe 主要代码
procedure TForm1.Button1Click(Sender: TObject);
begin
DllHandle := LoadLibrary(PAnsiChar(ExtractFilePath(Paramstr(0)) + 'Dllp.dll')); if DllHandle <> 0 then
begin
@ShowDllForm := GetProcAddress(DllHandle, 'ShowDllForm');
end;
ShowDllForm(Application, Panel1);end;Dll主要代码:///显示Dll窗口 DllFrm1
procedure ShowDllForm(AOwner: TApplication; AParent: TWincontrol);
begin
Application := AOwner;
Dllfrm1 := TDllfrm1.Create(Application);
DllFrm1.ParentWindow := AParent.Handle;
DllFrm1.Align := alClient;
DllFrm1.Show;
end;///点击Dllfrm1上按钮显示DllFrm2
procedure TDllfrm1.Button1Click(Sender: TObject);
begin
with TDllFrm2.Create(Self) do
ShowModal;
end;
以这种形式载入的Dll窗体, Dllfrm2 经过windows窗口切换,或者在任务栏上多点几次程序图标,Dllfrm2会显示到主窗口后面去,主窗口就无法响应操作.请问这种问题怎么解决. 谢谢
测试代码如下:exe 主要代码
procedure TForm1.Button1Click(Sender: TObject);
begin
DllHandle := LoadLibrary(PAnsiChar(ExtractFilePath(Paramstr(0)) + 'Dllp.dll')); if DllHandle <> 0 then
begin
@ShowDllForm := GetProcAddress(DllHandle, 'ShowDllForm');
end;
ShowDllForm(Application, Panel1);end;Dll主要代码:///显示Dll窗口 DllFrm1
procedure ShowDllForm(AOwner: TApplication; AParent: TWincontrol);
begin
Application := AOwner;
Dllfrm1 := TDllfrm1.Create(Application);
DllFrm1.ParentWindow := AParent.Handle;
DllFrm1.Align := alClient;
DllFrm1.Show;
end;///点击Dllfrm1上按钮显示DllFrm2
procedure TDllfrm1.Button1Click(Sender: TObject);
begin
with TDllFrm2.Create(Self) do
ShowModal;
end;
以这种形式载入的Dll窗体, Dllfrm2 经过windows窗口切换,或者在任务栏上多点几次程序图标,Dllfrm2会显示到主窗口后面去,主窗口就无法响应操作.请问这种问题怎么解决. 谢谢
用dll去实现窗口调用会遇见很多问题,解决一个会出现另一个,随着开发的深入,会让你在项目中花费很多精力去处理与业务无关的麻烦,这是delphi的实现机制,即application对象机制决定的,除非你弄懂了delphi最低层的几个源代码文件,否则还是治标不治本的方案。
如果使用bpl,则项目中一个application统管了包括所有
分布在不同bpl中的form和vcl,一切麻烦不复存在。
2楼方法应该可行,但还没有试过.我在网上看到有这样实现的能解决这个问题.但会有其他问题出现.
procedure ShowDllForm(AOwner: TApplication; AParent: TWincontrol);
beign
application.handle := AParent.Handle;
end;