我想实现这样的窗口,就是当子窗口最大的时候不是显示到整个屏幕而是大小控制在主窗口的某一个范围之内请问哪位高手有办法解决呢                                           小弟这里感谢了!!!

解决方案 »

  1.   

    不太明白你想做什么,你是mdi窗体吗?
      

  2.   

    通过窗口的Constraints属性就可以了!
    里面可以设置最大最小宽度和高度的!
      

  3.   

    就象delphi里面的窗口最大化效果一样
      

  4.   

    我想向delphi 的代码筐那样最大化后不会跑到顶端去
      

  5.   

    private
        procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
      public
    procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
    begin
      inherited;
      if Message.CmdType = SC_MAXIMIZE then
      begin
        SetWindowPos(Self.Handle, 0, 100, 200, 400, 500, SWP_FRAMECHANGED);
        PostMessage(Self.Handle, WM_SYSCOMMAND, SC_DEFAULT, 0);
      end;
    end;这样实现了,其中100是left,200是top,400是宽度,500是高度
      

  6.   

    unit Main;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, AppEvnts;type
      TForm1 = class(TForm)
      private
        procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
        procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE;
        procedure WMNCLBUTTONDBLCLK(var Message); message WM_NCLBUTTONDBLCLK;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.WMActivate(var Message: TWMActivate);
    begin
      if Self.WindowState = wsMaximized then
      begin
        SetWindowPos(Self.Handle, 0, 100, 200, 400, 500, SWP_FRAMECHANGED);
        PostMessage(Self.Handle, WM_SYSCOMMAND, SC_DEFAULT, 0);
      end;
    end;procedure TForm1.WMNCLBUTTONDBLCLK(var Message);
    begin
      case Self.WindowState of
        wsNormal: SendMessage(Self.Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
        wsMinimized: ;
        wsMaximized: SendMessage(Self.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
      end;
    end;procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
    begin
      if (Message.CmdType <> 61458) or (Self.WindowState <> wsMaximized) then inherited;
      if Message.CmdType = SC_MAXIMIZE then
      begin
        SetWindowPos(Self.Handle, 0, 100, 200, 400, 500, SWP_FRAMECHANGED);
        PostMessage(Self.Handle, WM_SYSCOMMAND, SC_DEFAULT, 0);
      end;
    end;end.