我最初设置child窗口的WindowState为wsMaximized,可是这样闪烁很厉害,而且在tile后再打开一个child又都是最大了怎么办?

解决方案 »

  1.   

    你可以设Align为alClient试试看。
      

  2.   

    在设计的时候最最大化,不要把WindowState设为wsMaximized,设为wsNormal
      

  3.   

    试试
      ShowWindow(Child.Handle, SW_HIDE);
       child.WindowState:=wsMaximized;
      ShowWindow(Child.Handle, SW_show);
      

  4.   

    在设计的时候按正常的大小做,在SHOW事件中再写为wsMaximized;
      

  5.   

    Align := alClient不行,这样:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls, ComCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure WM_SIZE(var Msg: TMessage); message WM_SIZE;
        procedure WMSysCommand(var Msg: TMessage); Message WM_SYSCOMMAND;
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.WMSysCommand(var Msg: TMessage);
    begin
      if Msg.WParam = SC_MAXIMIZE then
      begin
        LockWindowUpdate(Handle);
        Panel1.Align := alNone;
        Memo1.Align := alNone;
      end;
      inherited;
    end;procedure TForm1.WM_SIZE(var Msg: TMessage);
    begin
      if Msg.WParam = SIZE_MAXIMIZED then
      begin
        Panel1.Align := alClient;
        Memo1.Align := alClient;
        LockWindowUpdate(0);
      end;
      inherited;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Panel1.Align := alClient;
      Panel1.Color := clGray; //这样做是为了能看清楚一些,这还仅仅是一个小例子,如果Form上控件
                              //众多,则闪烁十分明显
      Memo1.Align := alClient;
    end;end.
      

  6.   

    其实我是想实现这样的MDI窗口设置MDIchild为wsnormal,第一次打开为普通显示,然后最大化它,再打开一个MDICHILD,这是也是最大化;如果设为层叠,再打开一个也是普通窗口能不能第一次打开就最大化,就像完成了一次点击MDICHILD的最大化按钮,这样我把打开的窗口层叠以后再打开MDICHILD也是层叠的设置WSMAXIMIZED之后每次打开一个子窗口都会把所有窗口最大化怎么没有合适的答案啊,我现在问了13个问题,现在只有一个问题得到我想要的答案,分太少吗?我每次只能给200分 ~~~
      

  7.   

    我已回答过别人这种问题了,如果我没有理解错的话就是它了.
    看样子,你想用主菜单还想全屏呀.这样编写,我刚做了一个,如果用得上,拿去笑纳吧.
    在主窗体中有菜单,然后把子窗体的align:=alclient;这样你可以看到他会充满屏.在主窗体中加入一个panel1也让它的align:=alclient;
    然后在主窗体单击事件中这样写
    procedure Tmain.n1click(Sender: TObject);
    begin
      if assigned(pub_form) then//pub_fom是一个公共变量,用来判断一个窗体是否创建,
      pub_form.close;
      form1:=Txjgl.Create(faPanel);
      form1.Parent:=Panel1;
      form1.Show;
      pub_form:=form1;//最后还要把当前窗体赋值公共变量,以便下一个使用.
    end;
    form1是基于panel的,所以它会满屏,但不会盖住主菜单.:) 试一试吧
      

  8.   

    不一定非得用MDI才能做出子窗体全屏的,上面说得不知道你能否用得上的.
    如果不行的话,再联系.
      

  9.   

    使用align:=alclient不就不能改变窗口大小了?!
      

  10.   

    MDI主窗体最大化,好像是不影响子窗体的大小了,我设计子窗体是动态建立没有发生过这种现象,但子窗体显示时会出现比设计时大了一些的现象倒是有的。
      

  11.   

    我也曾碰到这样的问题,你不妨这样做:
    Set Form的属性WindowState := wsNormal;
    然后在form 的FormActivate Event上加上这句代码:
    ShowWindow(Self.Handle, SW_SHOWMAXIMIZED);应该可以解决Form闪烁的问提。
      

  12.   

    不能用WindowState:=wsMaximized和align:=alclient这些方法,会越来越乱的!我的想法是记住上次执行程序后的MDI窗口状态,下次再执行程序时会继续使用上次的状态,比如VC的编辑窗口,上次最大,再打开还是最大,若上次是普通显示,再打开还是普通显示Tile是SendMessage(ClientHandle, WM_MDITILE, MDITILE_HORIZONTAL, 0);
    那把MDI窗口最大化是哪个消息!?
      

  13.   

    如果你只是想记住上一次打开的设置,你可以在关闭事件中把信息写到INI文件里,打开时读取设置。