我想从dll中调用窗口。(100分)

T

Tsunky

Unregistered / Unconfirmed
GUEST, unregistred user!
我想从dll中调用窗口。
这个DLL的代码。
我想把DLL窗口创建到调用的exe的pernel上面。
但不行。
那位大虾帮帮我。

library Project1;

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }

uses
SysUtils,
forms,
Classes,
ExtCtrls,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
procedure formsshow( Panel:TPanel;Ahandle:Thandle;Acaption :string;AIcon:Thandle);stdcall;
begin

Form1:=tForm1.Create(application) ;
try
Form1.Parent:=Panel; //在这里我加一下,但没有作用。
Form1.Show;;
finally
Form1.Free;
end;
end;
exports
formsshow;

begin
end.
 
try
Form1.Parent:=Panel; //在这里我加一下,但没有作用。
Form1.Show;;
finally
Form1.Free;
end;
show完就free有什么意义吗
 
try
Form1.Parent:=Panel; //在这里我加一下,但没有作用。
Form1.Show;;
finally
Form1.Free;
end;
show完就free有什么意义吗

没有什么意义。
可以去了。但DLL的FORM还显示不出来。
 
你的代码存在一个大问题,就是
Form1.Show就Free了,当然什么也没有。
把DLL中的非模态窗体显示在Panel上,一般来说由调用者(EXE)来控制窗体实例的存亡。
另外,象你这种写法,只能在程序使用打包编译的情况下才正常的--具体是EXE打包还是DLL打包我忘了
另一个方法是
windows.SetParent(Form1.Handle,Panel.Handle),这种方法不用打包,但使用Align属性有问题。
 
这样不行啊。
 
不要在DLL中创建窗口,DELPHI的很多控件在DLL中使用时跟在应用程序中
是有很大区别的
我建议你使用DLL返回窗口类给应用程序,然后由应用程序来创建窗口的方法
这样你就可以很方便的控制这个窗口
 
接受答案了.
 
顶部