新窗口弹出的问题

时间:2022-08-18 23:42:39
    各位前辈,小弟刚学delphi,在此拜喉一下前辈,希望各位前辈能扶一把。感谢

    如有好心人可以收我为徒,弟子真是感激不尽。如有刚学delphi志同道合的兄弟,我们也可一起捉摸一下,小弟QQ:271978974


问题:在主窗口点击菜单弹出的子窗口,子窗口要怎么样才能在主窗口的里面
      跟word一样,我点击新增的文件使终在整个WORD窗口里面
     小弟附上我写的代码

    ---------这个主窗口菜单点击代码-------------------
procedure Tmainform.N56Click(Sender: TObject);
begin
    application.CreateForm(tfuncform,funcform);
    funcform.show;
    n56.Enabled:=false;
end;
------------------------------------------------------

14 个解决方案

#1


 funcform.parent:=mainform;

#2


谢谢楼上的大哥,你的办法真行

     可以在教我一下吗:我用了你的方法,当我把子窗口最大化的时候,子窗口还是具有标题栏,能把标题栏和主窗口的标题栏接合到一起吗
                                        第二,把子窗口最大化后,主窗品的右和下出现了滚动条




十分感 谢

#3


funcform.BorderStyle := bsNone;

#4


用mdi方式就可以了

#5


对不起,可能是我的描述没讲清楚,主窗口和子窗口的效果跟EXCEl一样,我新建一文档,标题栏合并到主窗口上,但子窗口任然有最小化,最大化,关闭按纽,且改变父窗口的大小,里面的子窗口会随之一起变化。


谢谢

#6


引用 3 楼 versus1008 的回复:
funcform.BorderStyle := bsNone;


这位前辈,MDI 是什么意思,小弟初学,不懂,请不吝指教

#7


引用 4 楼 bdmh 的回复:
用mdi方式就可以了

这位前辈,MDI 是什么意思,小弟初学,不懂,请不吝指教

#8


file->new->other->projects->mdi application

#9


1.可以直接寫成MDI;
2.要麼指定其子窗體的parent為主窗體;

PS:
MDI(Multiple Document Interface)是多文档界面的意思...


MDI就象一个主界面,它一般带有菜单。里面又可以建立多个子窗口,就象WORD里面打开很多个文档,这些文档可以进行层叠、平铺等各种操作;子窗口可以在MDI 主窗口区域内定位、改变大小、最大化和最小化,当最大化子窗口时,它将占满MDI 主窗口的全部客户区。当MDI窗口最小化的时候所有子窗口随之最小化。
一个程序的主界面一般都是MDI窗口。

MDI介紹:    http://wenku.baidu.com/view/4e12954e852458fb770b56c3.html

#10


//***************************************************************************

//函 数 名: CreateForm

//返 回 值: boolean

//参       数: TForm

//功       能: 判断MDI窗体的子窗体是否存在

//***************************************************************************

function TForm1.CreateForm(CForm:TForm):boolean;

var

i:integer;

FormExist:boolean;

begin

FormExist:=false;

if(CForm=Nil) then     //判断CFrom是否为空

    begin

     CreateForm:=false; //函数返回值赋false

     exit;               //退出本函数

    end;

for i:=0 to Screen.FormCount-1 do                     //判断窗体是否已经建立起来

    begin

     if Screen.Forms[i].ClassType=CForm.ClassType then //判断窗体存在

       FormExist:=true;

    end;

if FormExist=false then

   begin

     CreateForm:=false; //函数返回值赋false

     exit;               //退出本函数

    end;

   if CForm.WindowState=wsMinimized then

    ShowWindow(CForm.Handle,SW_SHOWNORMAL) //显示窗体

    else

    ShowWindow(CForm.Handle,SW_SHOWNA);    //显示窗体

if not CForm.Visible then

    CForm.Visible:=true;

CForm.BringToFront;                     //当前窗口显示在最前面

CForm.SetFocus;

CreateForm:=true;

end;

#11


引用 9 楼 kye_jufei 的回复:
1.可以直接寫成MDI;
2.要麼指定其子窗體的parent為主窗體;

PS:
MDI(Multiple Document Interface)是多文档界面的意思...


MDI就象一个主界面,它一般带有菜单。里面又可以建立多个子窗口,就象WORD里面打开很多个文档,这些文档可以进行层叠、平铺等各种操作;子窗口可以在MDI 主窗口区域内定位、改变大小、最大化和最小化,当最大化子窗……


我看了你给我的网址,虽然我没看懂,但我学了一点,我把主窗口的formstyle设置为fsmdiform
                                            把子窗口的formstyle设置为fsmdichild
这样就达到了我要的效果,可问题又出来了,我一测试,默认所有的子窗口都打开了,如果我有十个子窗口,它们全部都会打开

#12


打开你的项目,
在项目的代码中,将子窗体删除

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1); 
  Application.CreateForm(TForm2, Form1); //from2为子窗体,将该句删除
  Application.Run;
end.

#13


哈哈哈。。。。楼上的前辈,按你说的就没问题了,小弟感 谢

#14


var
    phandle:^Thandle;
begin
    phandle:=@application.MainForm.clienthandle;
    phandle^:=clienthandle;
    with Tuserform.Create(application) do show;

各位前辈,谁能帮我解释一下这段代码,
我在测试的时候
  把主窗口的formstyle设置为fsmdiform
  把子窗口的formstyle设置为fsmdichild   这样就能达到MDI的效果

我今天来就在mainform前加了一个loginform 窗口,就报错,然后我在打开子窗口那里加了以后代码后就行了,不知道为什么

#1


 funcform.parent:=mainform;

#2


谢谢楼上的大哥,你的办法真行

     可以在教我一下吗:我用了你的方法,当我把子窗口最大化的时候,子窗口还是具有标题栏,能把标题栏和主窗口的标题栏接合到一起吗
                                        第二,把子窗口最大化后,主窗品的右和下出现了滚动条




十分感 谢

#3


funcform.BorderStyle := bsNone;

#4


用mdi方式就可以了

#5


对不起,可能是我的描述没讲清楚,主窗口和子窗口的效果跟EXCEl一样,我新建一文档,标题栏合并到主窗口上,但子窗口任然有最小化,最大化,关闭按纽,且改变父窗口的大小,里面的子窗口会随之一起变化。


谢谢

#6


引用 3 楼 versus1008 的回复:
funcform.BorderStyle := bsNone;


这位前辈,MDI 是什么意思,小弟初学,不懂,请不吝指教

#7


引用 4 楼 bdmh 的回复:
用mdi方式就可以了

这位前辈,MDI 是什么意思,小弟初学,不懂,请不吝指教

#8


file->new->other->projects->mdi application

#9


1.可以直接寫成MDI;
2.要麼指定其子窗體的parent為主窗體;

PS:
MDI(Multiple Document Interface)是多文档界面的意思...


MDI就象一个主界面,它一般带有菜单。里面又可以建立多个子窗口,就象WORD里面打开很多个文档,这些文档可以进行层叠、平铺等各种操作;子窗口可以在MDI 主窗口区域内定位、改变大小、最大化和最小化,当最大化子窗口时,它将占满MDI 主窗口的全部客户区。当MDI窗口最小化的时候所有子窗口随之最小化。
一个程序的主界面一般都是MDI窗口。

MDI介紹:    http://wenku.baidu.com/view/4e12954e852458fb770b56c3.html

#10


//***************************************************************************

//函 数 名: CreateForm

//返 回 值: boolean

//参       数: TForm

//功       能: 判断MDI窗体的子窗体是否存在

//***************************************************************************

function TForm1.CreateForm(CForm:TForm):boolean;

var

i:integer;

FormExist:boolean;

begin

FormExist:=false;

if(CForm=Nil) then     //判断CFrom是否为空

    begin

     CreateForm:=false; //函数返回值赋false

     exit;               //退出本函数

    end;

for i:=0 to Screen.FormCount-1 do                     //判断窗体是否已经建立起来

    begin

     if Screen.Forms[i].ClassType=CForm.ClassType then //判断窗体存在

       FormExist:=true;

    end;

if FormExist=false then

   begin

     CreateForm:=false; //函数返回值赋false

     exit;               //退出本函数

    end;

   if CForm.WindowState=wsMinimized then

    ShowWindow(CForm.Handle,SW_SHOWNORMAL) //显示窗体

    else

    ShowWindow(CForm.Handle,SW_SHOWNA);    //显示窗体

if not CForm.Visible then

    CForm.Visible:=true;

CForm.BringToFront;                     //当前窗口显示在最前面

CForm.SetFocus;

CreateForm:=true;

end;

#11


引用 9 楼 kye_jufei 的回复:
1.可以直接寫成MDI;
2.要麼指定其子窗體的parent為主窗體;

PS:
MDI(Multiple Document Interface)是多文档界面的意思...


MDI就象一个主界面,它一般带有菜单。里面又可以建立多个子窗口,就象WORD里面打开很多个文档,这些文档可以进行层叠、平铺等各种操作;子窗口可以在MDI 主窗口区域内定位、改变大小、最大化和最小化,当最大化子窗……


我看了你给我的网址,虽然我没看懂,但我学了一点,我把主窗口的formstyle设置为fsmdiform
                                            把子窗口的formstyle设置为fsmdichild
这样就达到了我要的效果,可问题又出来了,我一测试,默认所有的子窗口都打开了,如果我有十个子窗口,它们全部都会打开

#12


打开你的项目,
在项目的代码中,将子窗体删除

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1); 
  Application.CreateForm(TForm2, Form1); //from2为子窗体,将该句删除
  Application.Run;
end.

#13


哈哈哈。。。。楼上的前辈,按你说的就没问题了,小弟感 谢

#14


var
    phandle:^Thandle;
begin
    phandle:=@application.MainForm.clienthandle;
    phandle^:=clienthandle;
    with Tuserform.Create(application) do show;

各位前辈,谁能帮我解释一下这段代码,
我在测试的时候
  把主窗口的formstyle设置为fsmdiform
  把子窗口的formstyle设置为fsmdichild   这样就能达到MDI的效果

我今天来就在mainform前加了一个loginform 窗口,就报错,然后我在打开子窗口那里加了以后代码后就行了,不知道为什么