关于MDI窗体的问题,动态创建的子窗体无法显示(200分)

  • 主题发起人 主题发起人 freeswordman
  • 开始时间 开始时间
F

freeswordman

Unregistered / Unconfirmed
GUEST, unregistred user!
关于MDI窗体的问题,我用主窗体动态创建的子窗体,然后子窗体用show,我的子窗体在主窗体的客户区并没有显示出来。请问有什么办法可以解决?
代码:
 
是这样吗:
childform:=tchildform.create(application);
childform.show;
请看一下childform 的 formstyle 是不是 child.
 
子窗体的formstyle应该是fsMDIChild吧
我是这么用的
child:TFchild;//fchild为fsMDIChild子窗体
并在project->options中将Fchild设为available forms

使用的时候用
child:=TFchild.create(self);
不用show,自己就会显示
 
贴出你的程序
一般的
childform:=tchildform.create(self);
childform.show
就可以了

to resum
你这样子系统开销很大的. 如果你有几十个childform 你试试
 
chshanghai, 问一句,resum的方法怎么开销大了?我通常是
childform:=tchildform.create(application);
 
to chshanghai
我没感觉开销太大,而且我还是用的child数组,很多窗体,给他们在老586的机器上用
:-)
 
ChildForm:=TChildForm.Create(self);
ChildForm.show
 
你动态创建的窗体,在Show之前,设定FormStyle := fsMDIChild看看吧
 
都是同一个意思嘛,有没结束呀
 
resun的方法不错呀,我也这样用。
下面这样也行,当然主form的formstyle应为 fsMDIform
form2:=tform.Create(self);
form2.FormStyle:=fsMDIChild;
form2.show;
 
试试这个
procedure OpenForm(FormClass: TFormClass
var fm
AOwner:TComponent);
var
I:Integer;
Child:TForm;
begin
for I:=0 to Screen.FormCount -1 do
if Screen.Forms.ClassType=FormClass then
begin
Child:=Screen.Forms;
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then
Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
Exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;
 
借宝地一用,请问用create(application)和create(self)有什么异同?
 
:行素,别下溜达:)

用 Self 和用 Application 还有一点区别,就是对象释放的时间:

TComponent.Create的声明形式如下
constructor Create(AOwner: TComponent)

参数AOwner为所创建对象的所有者。

而在释放一个对象时,Delphi会自动释放此对象拥有的所有对象,例如:
MyObj2 := TMyObj2.Create(MyObj1)

MyObj2的所有者是MyObj1,在执行MyObj1.Free的时候,MyObj2会被自动释放。

所以当你以Application为参数创建对象的时候,假如你不去主动释放它,它会在Application对象
释放的时候(也就是程序结束的时候)被释放。
当以Self为参数创建对象的时候,假如你不去主动释放它,它会在这段代码所在的对象释放的时候被
释放,一般是TForm,也可能是其它类型的对象。
 
谢谢,参与有分
 
后退
顶部