关于ShowModal(100)

墨剑

New Member
Member
#1
在一个工程中,我有若干个Form,每个都是从同一个空白的父窗口继承下来的。 现在我不想运行时把所有窗口都创建,只想在使用时在创建。 但当我用Showmodal时,窗口变量还是空的。 于是我想在公用的父窗口中编写一个Showmodal函数,这个函数会先检测这个窗口是否=nil,如果是nil,则创建一个实例,接着才调用Showmodal来显示。 这个函数该如何编写呢? 试了好多代码都不行。
 

墨剑

New Member
Member
#7
如果只是单个窗口,直接写代码就行了。问题是现在是几十个窗口,我的意思是如何在他们的共同的一个父类里面只写一段代码就能实现?
 

墨剑

New Member
Member
#8
简单点,比如在这样一个函数中: procedure ShowMe(fm:TForm) begin
??? end;
我想调用form1.showmodal,则这样写: ShowMe(form1) 那问号处该如何写? 因为有可能fm还没有创建。
 

薛磊磊

New Member
Member
#9
不知道有没有理解对在父窗的public里增加class procedure ShowFrm(fm:TForm);
begin
fm:=TForm.Create(Application);
try fm.showmodal;
finallly fm.free;
end;
end;
 

墨剑

New Member
Member
#10
这样显然不行。fm:=TForm.Create(Application);只能建立一个空白的窗口(TForm),而建立不了form1窗口(TForm1)
 

薛磊磊

New Member
Member
#12
比如Tform2是父窗则在别的窗体里调TForm2.ShowFrm(fm);TForm2: public里增加class procedure ShowFrm(fm:TForm);
fm:=TForm2.Create(Application);
try fm.showmodal;
finallly fm.free;
end;
 

xiaojun5556

New Member
Member
#15
procedure iFormmodal(InstanceClass: TComponentClass;
var Reference);var Instance: TComponent;
begin
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try Instance.Create(nil);
TForm(Instance).ShowModal ;
TForm(Instance).BringToFront;
finally TForm(Instance).Free;
TForm(Instance) := nil;
end;
end;
调用iFormmodal(Tform2,form2);
iFormmodal(Tform3,form3);
 

lizhenhe

New Member
Member
#18
1、在工程选项中将相应窗体设为不自动加载;2、打开窗体(FrmSample)的例子如下procedure TForm1.Button1Click(Sender: TObject)begin
if not Assigned(FrmSample) then
FrmSample := TFrmSample.Create(Application);
FrmSample.ShowModal;
end;
3、在FrmSample的OnClose事件中加如下代码进行释放procedure TFrmSample.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
FrmSample := nil;
end;
 

墨剑

New Member
Member
#19
还是没有明白我的意思。FrmSample := TFrmSample.Create(Application);这个语句的最大问题是,我只知道FrmSample,而不知道TFrmSample
 

墨剑

New Member
Member
#20
就比如说,如果让你修改form的 showmodal方法,让这个方法实现先检查窗口是否为空,如果不为空则先建立,接着再显示窗口。 你怎么写?