1、我的MDIChildForm里的内容比较多,超出了一个屏幕,加Scrollbar又不美观,所以我想用鼠标点击窗体来移动,就是说用鼠标点击窗口时,鼠标成手形,然后根据拖动鼠标来移动窗口,我试了两种方法,一种是截取WM_NChittext消息,但是这样一来窗口上的控件的MOUSEDOWN等事件都无效,所以这个方法不行,还有就在mousedown写以下语句:
    begin
      releasecapture;
      MDIChildFrm.perform(WM_syscommand,$F012,0);
    end;
  这种方法没有反应,是不是我有什么忘写了?2、对于MDIForm中的MDIChildForm窗口的ZoomIn和ZoomOUt有什么好的方法?   谢谢!

解决方案 »

  1.   

    1.是不是需要加此语句:inherited;
    2.不明白你 的意思,你是说放大缩小时控件的位置关系呢,还是要在放大缩小时采用平滑技术呢还是什么??
      

  2.   

    我说的是在截取消息的时候加Inherited,要加在截取消息的函数前面
      

  3.   

    把窗体上的东西放在ScrollBox里,然后处理鼠标事件就行了
      

  4.   

    窗体及窗体内的控件的属性autosize 设成true 就可以。
      

  5.   

    1、我相信应该有办法解决的,只是我暂时还没有想到;2、窗口里都是一些动态生成的控件,昨天看书看到也许可以通过窗口的scalby来实现,只是还没有试,早上试试,也许能行。
      

  6.   

    你的想法没错,但是写错事件了,应该这样var
      IsMouseDown: Boolean;<要移动的控件>的MouseDown事件中写
      IsMouseDown := True;<要移动的控件>的MouseUp事件中写
      IsMouseDown := False;<要移动的控件>的MouseMove事件中写
      ReleaseCapture;
      <要移动的控件>.Perform(WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
      

  7.   

    To:木的   你的方法我试了,不行,这会不会跟我的窗口是MDIChildForm有关系,我已经试了好几种方法,都不行,不知道谁还有好办法?
      

  8.   

    private
        { Private declarations }
          Dragging : boolean;
          DragStart : Tpoint;procedure TfrmMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if (Button = mbLeft) then
      begin
        Dragging := True;
        DragStart := TControl(Sender).ClientToScreen(Point(X, Y));
      end;
    end;procedure TfrmMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      Diff: TPoint;
    begin
      if Dragging then
      begin
        Diff := TControl(Sender).ClientToScreen(Point(X, Y));
        Diff := Point(Diff.X - DragStart.X, Diff.Y - DragStart.Y);
        SetBounds(Left + Diff.X, Top + Diff.Y, Width, Height);
        DragStart.X := DragStart.X + Diff.X;
        DragStart.Y := DragStart.Y + Diff.Y;
      end;
    end;procedure TfrmMain.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if (Button = mbLeft) then
        Dragging := False;
    end;