是否可以用DLL窗体作Application.MainForm? ( 积分: 100 )

  • 主题发起人 主题发起人 lqquan34168
  • 开始时间 开始时间
L

lqquan34168

Unregistered / Unconfirmed
GUEST, unregistred user!
我有这样的一个想法,不知是否可以实现,就是所有的窗体都做成DLL文件(包括主窗体),但是一直不成功!如果把想成为主窗体的DLL文件中用showModal显示窗体和的话就可以显示,但是有问题,请教如将DLL窗体做成应用程序的主窗体?
 
我刚发完问题,又找到了解决的方法。5555555555555555
如何能把我分返回来啦!
下面是解决方法:
在DLL文件中显示窗体改为
function OpenForm(AHandle: THandle; ACaption: string; scr: TScreen; mainForm: TForm): boolean;
var ptr:PLongInt;
begin
result:=true;
ptr := @Application.MainForm;
ptr^:=LongInt(mainForm);//因为Application.MainForm是只读的,所以用指针处理
application.Handle:=aHandle;
Screen := scr;
Application.CreateForm(TfrmMain,frmMain);
Application.Run;
end;
 
没办法了,给我吧~[:D]
 
Application.CreateForm(TForm1, Form1); //
使用application的createform方法创建窗体和使用form类的create方法有区别。application的createform方法如果检测到MainForm不存在,会把第一个用此方法创建的窗体作为MainForm。

因此,楼主的指针处理是不是多余的?
 
所有窗体都是封装在DLL文件里面,我上面所写的那个函数也是在DLL文件里的,指针怎么是多余呢?
 
可以.

procedure DllRun2(DllName:PChar);stdcall;
begin
Application.Initialize;
Application.CreateHandle;
Application.Title:=Copy(DllName,1,Pos('.',DllName)-1);
Application.Icon.LoadFromFile('./abc.ico');
Application.CreateForm(TInvMng, InvMng);
Application.Run;
end;

注意上面的Application.CreateHandle,论坛中许多类似问题可用此解决.
而靠传Application.Handle,问题多多.
 
关注中.如果能把基类封装成功bpl以后的窗体都从它那继承就好了.
 
后退
顶部