急!怎样安静地生成子窗口?(50分)

  • 主题发起人 主题发起人 void
  • 开始时间 开始时间
V

void

Unregistered / Unconfirmed
GUEST, unregistred user!
在Mdi程序中,有子窗口A,已经是活动的
然后从窗口A生成窗口B(TMDIChild.Create),
缺省情况下,窗口B变成活动的,处在最上方。
现在要使窗口B在窗口A后面安静地Create和显示
(不要出现在窗口A的前面。)
如果在TMDIChild.Create后,将窗口A .bringtofront;
则窗口A会闪烁以下,甚不舒服。
如何才好呢?
 
form.visible:=false;
 
YourForm.Visible :=False ;
 
form要先Create才能设Visible,前面两位老兄提出的办法岂非无
意义?
 

先将FormA设为StayOnTop,然后CreateFormB,再将FormA设回来
我没试过,瞎说
 
定义全局变量:
quietlyCreate : Boolean;
theForm : TForm;

Form1是主MDIForm , Form2 是 MDIChild
在Form1对应的Unit1中如下:
procedure TForm1.Button1Click(Sender: TObject);
begin

quietlyCreate := True;
theForm := TForm2.Create(self);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

theForm.Show;
end;

Form2如下:
uses Unit2;

{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin

quietlyCreate := True;
theForm := TForm2.Create(self);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

theForm.Show;
end;




unit Unit2;

interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
protected
procedure CreateParams(VAR Params: TCreateParams);
override;
end;

var
Form2: TForm2;

implementation
uses unit1;

{$R *.DFM}
procedure TForm2.CreateParams(VAR Params: TCreateParams);
begin

Inherited CreateParams(Params);
if QuietlyCreate then
Visible := false;
end;

end.

应该没有问题了。
 
MDI Form 是不能设 Visible 为 False 的。
 
MDIChild是可以设成Visible := false;的
上面的就是例子。我是运行通过的。
 
多谢各位热心的朋友,
woodstock的方法是可行的(我试过了)
分数太少,大家匀一下啦
 
这个问题可以在菜单PROJECT的OPTIONS下将auto-create forms中的B窗口移入
available forms中去.
 
接受答案了.
 
后退
顶部