L lqquan34168 Unregistered / Unconfirmed GUEST, unregistred user! 2007-06-09 #1 我有这样的一个想法,不知是否可以实现,就是所有的窗体都做成DLL文件(包括主窗体),但是一直不成功!如果把想成为主窗体的DLL文件中用showModal显示窗体和的话就可以显示,但是有问题,请教如将DLL窗体做成应用程序的主窗体?
我有这样的一个想法,不知是否可以实现,就是所有的窗体都做成DLL文件(包括主窗体),但是一直不成功!如果把想成为主窗体的DLL文件中用showModal显示窗体和的话就可以显示,但是有问题,请教如将DLL窗体做成应用程序的主窗体?
L lqquan34168 Unregistered / Unconfirmed GUEST, unregistred user! 2007-06-09 #2 我刚发完问题,又找到了解决的方法。5555555555555555 如何能把我分返回来啦! 下面是解决方法: 在DLL文件中显示窗体改为 function OpenForm(AHandle: THandle; ACaption: string; scr: TScreen; mainForm: TForm): boolean; var ptrLongInt; begin result:=true; ptr := @Application.MainForm; ptr^:=LongInt(mainForm);//因为Application.MainForm是只读的,所以用指针处理 application.Handle:=aHandle; Screen := scr; Application.CreateForm(TfrmMain,frmMain); Application.Run; end;
我刚发完问题,又找到了解决的方法。5555555555555555 如何能把我分返回来啦! 下面是解决方法: 在DLL文件中显示窗体改为 function OpenForm(AHandle: THandle; ACaption: string; scr: TScreen; mainForm: TForm): boolean; var ptrLongInt; begin result:=true; ptr := @Application.MainForm; ptr^:=LongInt(mainForm);//因为Application.MainForm是只读的,所以用指针处理 application.Handle:=aHandle; Screen := scr; Application.CreateForm(TfrmMain,frmMain); Application.Run; end;
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-06-09 #4 Application.CreateForm(TForm1, Form1); // 使用application的createform方法创建窗体和使用form类的create方法有区别。application的createform方法如果检测到MainForm不存在,会把第一个用此方法创建的窗体作为MainForm。 因此,楼主的指针处理是不是多余的?
Application.CreateForm(TForm1, Form1); // 使用application的createform方法创建窗体和使用form类的create方法有区别。application的createform方法如果检测到MainForm不存在,会把第一个用此方法创建的窗体作为MainForm。 因此,楼主的指针处理是不是多余的?
L lqquan34168 Unregistered / Unconfirmed GUEST, unregistred user! 2007-06-10 #5 所有窗体都是封装在DLL文件里面,我上面所写的那个函数也是在DLL文件里的,指针怎么是多余呢?
Z zyycc Unregistered / Unconfirmed GUEST, unregistred user! 2007-06-10 #6 可以. procedure DllRun2(DllNameChar);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,问题多多.
可以. procedure DllRun2(DllNameChar);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,问题多多.
G guobaoguo Unregistered / Unconfirmed GUEST, unregistred user! 2007-06-10 #7 关注中.如果能把基类封装成功bpl以后的窗体都从它那继承就好了.