为什么我不能改变MDI窗体初如状态的大小?感觉太宽了,我想调窄一点,但是启动起来还是一样宽,不因我改变数值而改变?是怎么回事啊?

解决方案 »

  1.   

    align属性改变一下,改成customer 
      

  2.   

    或者是windowstate 改为 normal
      

  3.   


    procedure TMainForm.CreateMDIChild(const Name: string;AChildFormClass: TFormClass);
    var
      i:Integer;
    begin
        For i := 0 To MDIChildCount - 1 Do
        Begin
        If SameText(MDIChildren[i].ClassName, AChildFormClass.ClassName) Then
          Begin
          MDIChildren[i].BringToFront;
          Exit;
          End;
        End;
        AChildFormClass.Create(Application).Caption:=Name;end;
      

  4.   

    第一個問題你回答了,那第二個呢?
    如果只是一個簡單MDI子窗體,不可能不會是設計期的大小。除非你的程序有特別處理。
    看你帖出來的代碼,猜測你的程序有 窗體基類的,建議你查一下基類窗都做些什么....
      

  5.   

    是有基类,但基类中没有做任何处理啊,我也很奇怪啊!!!
    Create,Show 事件中都没有任何代码!!!
      

  6.   

    MDIChild窗口基类里有窗口大小调整的代码。
      

  7.   

    就是MDIChild窗口基类里没有代码啊,所以才在这问啊
      

  8.   

    跟你的主窗体有关,有个比例关系。
    你可以试着把你的主窗体宽度变化一下,看看你的子窗体宽度变化不。我是说系统的MDIChild窗口基类里有窗口大小调整的代码。你查看下Forms.pas
      

  9.   

    你看下Form的Constraints属性是否设置了
      

  10.   

    下面是我的代码,可以调整子窗体大小。
    你看看,但愿对你有帮助。procedure CreateChild(nd:TTreeNode; fm:Integer; note:Boolean);
    var cfm:TBaseChildForm;
    begin
      cfm := nil;
      MainForm.LockClientWindowUpdate;
      Screen.Cursor := crHourGlass;
      try
        case fm of
          0 : cfm := TedForm.Create(MainForm);
          1 : cfm := TwbForm.Create(MainForm);
          2 : cfm := TimForm.Create(MainForm);
          3 : cfm := TdocForm.Create(MainForm);
        end;
        if cfm = nil then Exit;    with cfm do
        begin
          eoForm := MainForm.CurESOForm;
          Node := nd;
          IsNote := note;
          IsChildfm := True;
          DHMgr.PIRec := nd.Data;
          FormStyle := fsMDIChild;
          if MainForm.btmin.Visible then Exit;
          Left := 1;
          Top := 1;
          Height := MainForm.pnlLeft.Height - 6;
          Width := MainForm.ClientWidth - MainForm.pnlLeft.Width - 8;
        end;
      finally
        Screen.Cursor := crDefault;
        MainForm.UnlockClientWindowUpdate;
      end;
    end;  
      

  11.   

    仔细检查MDI窗体的每个属性、、、、估计是哪个被设置了、
      

  12.   

    如果是子窗体的话,Delphi生成的子窗体的尺寸好像是根据MDI主窗体的尺寸来决定的,个人不能随意指定其大小。
      

  13.   

    AChildFormClass.Create(Application).Caption:=Name;
    我只用了这句来创建窗体
      

  14.   


        .
        .
        .
        aFrm := TFormClass(findClass(frmname));
        CreateMDIChild(aCaption,aFrm);procedure TMainForm.CreateMDIChild(const Name: string;AChildFormClass: TFormClass);
    var
      i:Integer;
    begin
        For i := 0 To MDIChildCount - 1 Do
        Begin
        If SameText(MDIChildren[i].ClassName, AChildFormClass.ClassName) Then
          Begin
          MDIChildren[i].BringToFront;
          Exit;
          End;
        End;
        AChildFormClass.Create(Application).Caption:=Name;end;
      

  15.   

    直接在子窗体的OnCreate中把窗体的长宽重新写一次吧。
    由于Delphi会预先设置MDI子窗体的大小,并根据这个大小预置新的MDI子窗体的位置,然后才轮到子窗体的Oncreate事件,因此你在子窗体的Oncreate事件里面重新指定子窗体的大小和位置是管用的。
      

  16.   

    不会啊,我在D5和D7下都试过,新建一个MDI工程,然后在MDIChild窗体类的OnCreate事件中写着:
    Width:=200;
    Height:=200;
    运行后一切ok。难道是Delphi版本的问题?
    建议LZ用和我相同的方法新建一个MDI工程进行一下试验。如果试验的结果是ok的,而LZ的代码仍然不起作用,就得猜测可能在LZ的程序中其它什么地方有对子窗体的重置代码。
      

  17.   

    重载procedure CreateWnd;override;在这里指定  大小即可