如何将一个dll的form显示在调用它的form的panel中 (100分)

  • 主题发起人 主题发起人 wenqihe
  • 开始时间 开始时间
W

wenqihe

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi6
生成一个dll ,内有一个产生、显示form的函数
调用者调用改函数,产生form,显示在一个panel中
代码:
DLL部分:
Function ShowUserAdminForm(AHandle:THandle;Parent:TWinControl;
):Longint;stdCall;

Function ShowUserAdminForm(AHandle:THandle;Parent:TWinControl;
):Longint;
//Var DllForm:TUserAdminForm;
begin
if Not Assigned(UserAdminForm) then
try
Application.Handle:=AHandle;
UserAdminForm:=TUserAdminForm.Create(Application);
DllForm.Parent:=Parent;
UserAdminForm.Show;
Result:=Longint(UserAdminForm);
except
end;
end;
调用程序:
Function ShowUserAdminForm(AHandle:THandle;Parent:TWinControl;
):Longint;stdCall;
External '../DLL/UserAdminDll/UserAdminDll.dll'

procedure TForm1.Button3Click(Sender: TObject);
begin
re:=ShowUserAdminForm(Application.Handle,Panel1);
end;
执行后发现不显示任何东西,关闭程序报错EAccessViolation
如果在调用函数中加入一些代码:
procedure TForm1.Button3Click(Sender: TObject);
var i:Integer;
tMyform:TForm2;
re:Longint;
begin
re:=ShowUserAdminForm(Application.Handle,Panel1);
Application.CreateForm(TForm2,tMyform);

tMyform.Top:=100;
tMyform.Left:=100;
tMyform.Parent:=Form1;
tMyform.Show;
end;
此时 两个form都会显示出来,在panel1中,可以移动form,但是
form中的edit框不能输入内容,关闭程序,不报错
why?
记得以前好比较轻松的实现了这种功能,当时有点怀疑内存有泄漏
btw:
delphi中是像vc一样自带了内存泄漏的检查工具,有的话,是哪一个
总觉得delphi程序出现内存泄漏的概率大些
 
用windows.SetParent
 
接受答案了.
 

Similar threads

后退
顶部