MDI窗体问题,主窗体FormStyle := fsMDIForm,其他子窗体均为fsMDIChild
问题来了,若打开的子窗体中有一个是最大化的,接着打开其他窗体也就跟着最大化了,
我想让各自的窗体打开时还是其在设计期间的大小,请问有办法解决吗?

解决方案 »

  1.   

    如果这样的话,就不适用child来做其它固定大小的窗体了
      

  2.   

    不用child的话,因为主窗体是fsMDIForm(必须), 当其他form打开时就自动被主窗体遮住了
      

  3.   

    你这样好了,别让那些该最大化的窗体最大化,因为最大化了,所有都要最大化了。
    你把需要最大化的窗体align设为Client.让它的客户区填满client区域,不过这样有标题栏,如果你还要想做到是最大化的效果,就把border去掉。
      

  4.   

    WM_SYSCOMMAND Notification--------------------------------------------------------------------------------A window receives this message when the user chooses a command from the Window menu (formerly known as the system or control menu) or when the user chooses the maximize button, minimize button, restore button, or close button.SyntaxWM_SYSCOMMAND    WPARAM wParam
        LPARAM lParam;
        
    ParameterswParam
    Specifies the type of system command requested. This parameter can be one of the following values. 
    SC_CLOSE
    Closes the window.
    SC_CONTEXTHELP
    Changes the cursor to a question  with a pointer. If the user then clicks a control in the dialog box, the control receives a WM_HELP message.
    SC_DEFAULT
    Selects the default item; the user double-clicked the window menu.
    SC_HOTKEY
    Activates the window associated with the application-specified hot key. The lParam parameter identifies the window to activate.
    SC_HSCROLL
    Scrolls horizontally.
    SC_KEYMENU
    Retrieves the window menu as a result of a keystroke. For more information, see the Res section.
    SC_MAXIMIZE
    Maximizes the window.
    SC_MINIMIZE
    Minimizes the window.
    SC_MONITORPOWER
    Sets the state of the display. This command supports devices that have power-saving features, such as a battery-powered personal computer. 
    The lParam parameter can have the following values:1 - the display is going to low power2 - the display is being shut offSC_MOUSEMENU
    Retrieves the window menu as a result of a mouse click.
    SC_MOVE
    Moves the window.
    SC_NEXTWINDOW
    Moves to the next window.
    SC_PREVWINDOW
    Moves to the previous window.
    SC_RESTORE
    Restores the window to its normal position and size.
    SC_SCREENSAVE
    Executes the screen saver application specified in the [boot] section of the System.ini file.
    SC_SIZE
    Sizes the window.
    SC_TASKLIST
    Activates the Start menu.
    SC_VSCROLL
    Scrolls vertically.
    lParam
    The low-order word specifies the horizontal position of the cursor, in screen coordinates, if a window menu command is chosen with the mouse. Otherwise, this parameter is not used. 
    The high-order word specifies the vertical position of the cursor, in screen coordinates, if a window menu command is chosen with the mouse. This parameter is –1 if the command is chosen using a system accelerator, or zero if using a mnemonic. Return ValueAn application should return zero if it processes this message.
      

  5.   

    唉,其实我不过把delphi的help里的一段贴给你了而已。
      

  6.   

    上面不是说了么:把需要最大化的窗体align设为Client.让它的客户区填满client区域
      

  7.   

    align设为Client,有个问题,每次打开都变成填满区域,我要的是能保持在设计期间时的大小
      

  8.   

    如果所有窗体都需要设计时的大小的话,你就拦掉上面的最大化消息(或其它你想拦掉的消息)就行了啊。如果你有时候想手动填满区域,你就程序设计align啊,别在设计时的属性里设置
      

  9.   

    --在窗口显示的时候,设置窗口大小即可。可通过配置或者直接在程序里设置。
    当MDI子窗体有一个最大化时,其他打开的窗体都是跟着最大化的,当有一个窗体没有最大化时,其他已经最大化的窗体也会跟着变成没有最大化,这样一个窗体的状态就会破坏其他窗体的状态
      

  10.   

    那可能需要去拦截一些消息,重载Form,做这方面处理。有空试试看。
      

  11.   

    我也知道是WM_GETMINMAXINFO和WM_SYSCOMMAND,但....
      

  12.   

    你总结上面所有的回答,你的问题肯定能解决,好好想一下你的要求:有些需要最大化,有些需要原始尺寸
    你的问题:最大化的会影响其它原始尺寸窗体的状态解决:所有窗体都按ws_normal来显示,就是原始尺寸
    需要最大化的窗体程序改align或者设置尺寸,而不使用真正的最大化命令你是不是想要人贴出来代码?
      

  13.   

    我的窗体都是ws_Mormal来显示的,
    问题是,当我需要最大化的时候若改成align是会发生如下问题:窗体的关闭,还原,最小化按钮不见了