1、我的MDIChildForm里的内容比较多,超出了一个屏幕,加Scrollbar又不美观,所以我想用鼠标点击窗体来移动,就是说用鼠标点击窗口时,鼠标成手形,然后根据拖动鼠标来移动窗口,我试了两种方法,一种是截取WM_NChittext消息,但是这样一来窗口上的控件的MOUSEDOWN等事件都无效,所以这个方法不行,还有就在mousedown写以下语句:
begin
releasecapture;
MDIChildFrm.perform(WM_syscommand,$F012,0);
end;
这种方法没有反应,是不是我有什么忘写了?2、对于MDIForm中的MDIChildForm窗口的ZoomIn和ZoomOUt有什么好的方法? 谢谢!
begin
releasecapture;
MDIChildFrm.perform(WM_syscommand,$F012,0);
end;
这种方法没有反应,是不是我有什么忘写了?2、对于MDIForm中的MDIChildForm窗口的ZoomIn和ZoomOUt有什么好的方法? 谢谢!
2.不明白你 的意思,你是说放大缩小时控件的位置关系呢,还是要在放大缩小时采用平滑技术呢还是什么??
IsMouseDown: Boolean;<要移动的控件>的MouseDown事件中写
IsMouseDown := True;<要移动的控件>的MouseUp事件中写
IsMouseDown := False;<要移动的控件>的MouseMove事件中写
ReleaseCapture;
<要移动的控件>.Perform(WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
{ 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;