关于ShowModal(100)

  • 主题发起人 主题发起人 墨剑
  • 开始时间 开始时间

墨剑

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个工程中,我有若干个Form,每个都是从同一个空白的父窗口继承下来的。 现在我不想运行时把所有窗口都创建,只想在使用时在创建。 但当我用Showmodal时,窗口变量还是空的。 于是我想在公用的父窗口中编写一个Showmodal函数,这个函数会先检测这个窗口是否=nil,如果是nil,则创建一个实例,接着才调用Showmodal来显示。 这个函数该如何编写呢? 试了好多代码都不行。
 
if not assigned(form2) then
begin
form2:=tform2.Create(nil);
form2.showmadal;
end;
这样不可以吗?
 
在二楼的基础上补充:form2.free;form2 :=nil;
 
不是很明白你的意思,是不是只是实现单例?
 
if form2 <> nil then
FreeAndNil(form2);form2 := TForm2.Create(nil);form2.showmodal();FreeAndNil(form2)
 
作为模态窗口, 还是用完就释放的好.with TForm2.Create(nil)do
try ShowModal;finally Free;
end;
 
如果只是单个窗口,直接写代码就行了。问题是现在是几十个窗口,我的意思是如何在他们的共同的一个父类里面只写一段代码就能实现?
 
简单点,比如在这样一个函数中: procedure ShowMe(fm:TForm) begin
??? end;
我想调用form1.showmodal,则这样写: ShowMe(form1) 那问号处该如何写? 因为有可能fm还没有创建。
 
不知道有没有理解对在父窗的public里增加class procedure ShowFrm(fm:TForm);
begin
fm:=TForm.Create(Application);
try fm.showmodal;
finallly fm.free;
end;
end;
 
这样显然不行。fm:=TForm.Create(Application);只能建立一个空白的窗口(TForm),而建立不了form1窗口(TForm1)
 
这里的Tform用父窗的啊 TParentForm 本身就在父窗里创建的
 
比如Tform2是父窗则在别的窗体里调TForm2.ShowFrm(fm);TForm2: public里增加class procedure ShowFrm(fm:TForm);
fm:=TForm2.Create(Application);
try fm.showmodal;
finallly fm.free;
end;
 
fm:=TForm2.Create(Application);
创建的依然是Form2,而不是子窗口
 
看来大家都跑题了,人家问的是MDI窗口。
 
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);
 
这个不行,我传递的参数只能是form2,没有Tform2. 如果有Tform2,那这个就不是问题了。
 
没有看明白楼主的意思!
 
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;
 
还是没有明白我的意思。FrmSample := TFrmSample.Create(Application);这个语句的最大问题是,我只知道FrmSample,而不知道TFrmSample
 
就比如说,如果让你修改form的 showmodal方法,让这个方法实现先检查窗口是否为空,如果不为空则先建立,接着再显示窗口。 你怎么写?
 
后退
顶部