20分请教一个关于子窗口的问题,谢谢! ( 积分: 20 )

  • 主题发起人 chenshu_sc
  • 开始时间
C

chenshu_sc

Unregistered / Unconfirmed
GUEST, unregistred user!
WINDOWS下(由于这的DELPHI下没有用户界面,所以发在这)现在有一个程序主界面,上面有一菜单,现想点击菜单上的项目在程序主界面上显示相应的FORM,并且在该FORM没有关闭时,不能打开其它FORM
我是这样处理的:
procedure TFrmMain.NFrmBufferCommitClick(Sender: TObject);
var
Form : TFrmBufferCommit;
begin
Form := TFrmBufferCommit.Create(self);
// Form.Parent := self;  -->用这句的时候,Form不能控制
Form.ShowModal;
end;

请问,这样的要求该怎么实现?谢谢!
 
C

chenshu_sc

Unregistered / Unconfirmed
GUEST, unregistred user!
WINDOWS下(由于这的DELPHI下没有用户界面,所以发在这)现在有一个程序主界面,上面有一菜单,现想点击菜单上的项目在程序主界面上显示相应的FORM,并且在该FORM没有关闭时,不能打开其它FORM
我是这样处理的:
procedure TFrmMain.NFrmBufferCommitClick(Sender: TObject);
var
Form : TFrmBufferCommit;
begin
Form := TFrmBufferCommit.Create(self);
// Form.Parent := self;  -->用这句的时候,Form不能控制
Form.ShowModal;
end;

请问,这样的要求该怎么实现?谢谢!
 

初学者1号

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样创建窗体的吗?窗体之间应该是平等的关系吧,没有parent
Application.CreateForm(TForm1, Form1);
 
C

chenshu_sc

Unregistered / Unconfirmed
GUEST, unregistred user!
如果不是用showModal是完全可以的哦
 
H

huangliang2005

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TFrmMain.NFrmBufferCommitClick(Sender: TObject);
var
Form : TFrmBufferCommit;
begin
Form := TFrmBufferCommit.Create(self);
try
Form.ShowModal;
finally
Form.free;
end;
end;
 
S

snow2008

Unregistered / Unconfirmed
GUEST, unregistred user!
如下即可,注意同时将form1窗体在project--options中设置为available forms窗体中添加。
开窗
if not assigned(form1) then
begin
form1:=Tform1.create(application);
form1.Show;
end;
 
Z

zct99

Unregistered / Unconfirmed
GUEST, unregistred user!
打开form后,菜单enabled:=false
关闭form后,菜单enabled:=true
 
C

chenshu_sc

Unregistered / Unconfirmed
GUEST, unregistred user!
可能是我没有说明白,我是想实现下面这个程序:
procedure TFrmMain.N22Click(Sender: TObject);
begin
FrmHaoMa.Parent := self;
FrmHaoMa.Align := alClient;
FrmHaoMa.BorderStyle := bsNone;
FrmHaoMa.Show;
end;

所能实现的情况,另外还要让窗口FrmHaoMa以showmodal方式出现,请问该怎么实现?
 
C

chenybin

Unregistered / Unconfirmed
GUEST, unregistred user!
明白你的意思,我的建议是
在主界面另外放一个容器(主要是为了美观,用Form也行,但是你还需要放工具栏菜单什么的),然后我想你应该有很多个按钮,分别打开不同的Form,为了适应你吧,把按钮做成是有按下状态的,按下就表示打开了某个Form,弹回来就关闭这个Form,然后另外的按钮按下的时候就先判断当前是否有Form在这个容器里面
下面是其中一个按钮的例子,另外用一个主Form类的私有变量保存当前的Form
如 CurrForm : TForm;,便于到时候释放这个Form, 让这个Form和你要打开的那个Form比较,判断是不是同一个Form。如果是就处理是否关闭这个Form,如果不是则不进行任何操作(因为你说当前只有一个Form可以用)

// 先判断是按下还是弹回去,如果按下状态则打开Form,否则就销毁,
if Assigned(CurrForm) then
begin
// 已经有了,但是不是现在这个按钮对应的的,则退出,否则销毁窗口
if Not (CurrForm is TFrmHaoMa) then
Exit
else
begin

(CurrForm as TFrmHaoMa).Free;
CurrForm := nil;
end;

end
else
begin
// 当前Form为空,建立一个
CurrForm := TFrmHaoMa.Create(ScrollBox1);
CurrForm .Parent := ScrollBox1;
CurrForm .Align := alClient;
CurrForm .BorderStyle := bsNone;
CurrForm .Show;
end;

根据安全点的判断方法,就是判断容器里面的ControlCount是否大于0,有问题继续讨论
 
Z

zdr690929

Unregistered / Unconfirmed
GUEST, unregistred user!
Form := Tform.Create(self);
Form.ShowModal;
form.free
简单,绝对行
 
C

chenshu_sc

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部