使用鼠标拖曳的方式移动、更改panel控件的大小
2010-01-06 22:27
447 查看
1 procedure ManipulateControl(WinControl: TControl; Shift: TShiftState;
2 X, Y, Precision: integer);
3 //Precision:精度,该方法可以在onmousemove中调用
4 var
5 SC_MANIPULATE: Word;
6 begin
7 //光标在控件的最左侧
8 if (X<=Precision) and (Y>Precision) and (Y<WinControl.Height-Precision) then
9 begin
10 SC_MANIPULATE := $F001;
11 WinControl.Cursor := crSizeWE;
12
13 end
14 else
15 //光标在控件的最右侧
16 if (X>=WinControl.Width-Precision) and (Y>Precision) and (Y<WinControl.Height-Precision) then
17 begin
18 SC_MANIPULATE := $F002;
19 WinControl.Cursor := crSizeWE;
20 end
21 else
22 //光标在控件的最上侧
23 if (X>Precision) and (X<WinControl.Width-Precision) and (Y<=Precision) then
24 begin
25 SC_MANIPULATE := $F003;
26 WinControl.Cursor := crSizeNS;
27 end
28 else
29 //光标在控件的最下侧
30 if (X>Precision) and (X<WinControl.Width-Precision) and (Y>=WinControl.Height-Precision) then
31 begin
32 SC_MANIPULATE := $F006;
33 WinControl.Cursor := crSizeNS;
34 end
35 else
36 //光标在控件的左上角
37 if (X<=Precision) and (Y<=Precision) then
38 begin
39 SC_MANIPULATE := $F004;
40 WinControl.Cursor := crSizeNWSE;
41 end
42 else
43 //光标在控件的右上角
44 if (X>=WinControl.Width-Precision) and (Y<=Precision) then
45 begin
46 SC_MANIPULATE := $F005;
47 WinControl.Cursor := crSizeNESW ;
48 end
49 else
50 //光标在控件的左下角
51 if (X<=Precision) and (Y>=WinControl.Height-Precision) then
52 begin
53 SC_MANIPULATE := $F007;
54 WinControl.Cursor := crSizeNESW;
55 end
56 else
57 //光标在控件的右下角
58 if (X>=WinControl.Width-Precision) and (Y>=WinControl.Height-Precision) then
59 begin
60 SC_MANIPULATE := $F008;
61 WinControl.Cursor := crSizeNWSE;
62 end
63 else
64 //光标在控件的客户区(移动整个控件)
65 if (X>5) and (Y>5) and (X<WinControl.Width-5) and
66 (Y<WinControl.Height-5) then
67 begin
68 SC_MANIPULATE := $F009;
69 WinControl.Cursor := crSizeAll;
70 end
71 else
72 begin
73 SC_MANIPULATE := $F000;
74 WinControl.Cursor := crDefault;
75 end;
76 if Shift=[ssLeft] then
77 begin
78 ReleaseCapture;
79 WinControl.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);
80 end;
81 end;
82
83 //调用方法:
84 procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
85 Y: Integer);
86 begin
87 Caption := IntToStr(X) + '/' + IntToStr(Y);
88 ManipulateControl((Panel1 as TwinControl), Shift, X, Y, 10);
89 end;
90
91
注意: 只有从TWinControl继承的控件,才能用此方法。
2 X, Y, Precision: integer);
3 //Precision:精度,该方法可以在onmousemove中调用
4 var
5 SC_MANIPULATE: Word;
6 begin
7 //光标在控件的最左侧
8 if (X<=Precision) and (Y>Precision) and (Y<WinControl.Height-Precision) then
9 begin
10 SC_MANIPULATE := $F001;
11 WinControl.Cursor := crSizeWE;
12
13 end
14 else
15 //光标在控件的最右侧
16 if (X>=WinControl.Width-Precision) and (Y>Precision) and (Y<WinControl.Height-Precision) then
17 begin
18 SC_MANIPULATE := $F002;
19 WinControl.Cursor := crSizeWE;
20 end
21 else
22 //光标在控件的最上侧
23 if (X>Precision) and (X<WinControl.Width-Precision) and (Y<=Precision) then
24 begin
25 SC_MANIPULATE := $F003;
26 WinControl.Cursor := crSizeNS;
27 end
28 else
29 //光标在控件的最下侧
30 if (X>Precision) and (X<WinControl.Width-Precision) and (Y>=WinControl.Height-Precision) then
31 begin
32 SC_MANIPULATE := $F006;
33 WinControl.Cursor := crSizeNS;
34 end
35 else
36 //光标在控件的左上角
37 if (X<=Precision) and (Y<=Precision) then
38 begin
39 SC_MANIPULATE := $F004;
40 WinControl.Cursor := crSizeNWSE;
41 end
42 else
43 //光标在控件的右上角
44 if (X>=WinControl.Width-Precision) and (Y<=Precision) then
45 begin
46 SC_MANIPULATE := $F005;
47 WinControl.Cursor := crSizeNESW ;
48 end
49 else
50 //光标在控件的左下角
51 if (X<=Precision) and (Y>=WinControl.Height-Precision) then
52 begin
53 SC_MANIPULATE := $F007;
54 WinControl.Cursor := crSizeNESW;
55 end
56 else
57 //光标在控件的右下角
58 if (X>=WinControl.Width-Precision) and (Y>=WinControl.Height-Precision) then
59 begin
60 SC_MANIPULATE := $F008;
61 WinControl.Cursor := crSizeNWSE;
62 end
63 else
64 //光标在控件的客户区(移动整个控件)
65 if (X>5) and (Y>5) and (X<WinControl.Width-5) and
66 (Y<WinControl.Height-5) then
67 begin
68 SC_MANIPULATE := $F009;
69 WinControl.Cursor := crSizeAll;
70 end
71 else
72 begin
73 SC_MANIPULATE := $F000;
74 WinControl.Cursor := crDefault;
75 end;
76 if Shift=[ssLeft] then
77 begin
78 ReleaseCapture;
79 WinControl.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);
80 end;
81 end;
82
83 //调用方法:
84 procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
85 Y: Integer);
86 begin
87 Caption := IntToStr(X) + '/' + IntToStr(Y);
88 ManipulateControl((Panel1 as TwinControl), Shift, X, Y, 10);
89 end;
90
91
注意: 只有从TWinControl继承的控件,才能用此方法。
相关文章推荐
- 在运行时使用鼠标移动控件和改变控件的大小
- 在运行时使用鼠标移动控件和改变控件的大小
- java实现控件的移动及使用鼠标改变控件大小
- 在运行时使用鼠标移动控件和改变控件的大小
- Winform鼠标拖动改变控件大小、移动控件位置
- 鼠标拖动(移动、拖曳)控件
- 拖动更改panel控件大小
- 在运行时通过鼠标拖动移动控件位置及改变控件的大小
- 在运行时通过鼠标拖动移动控件位置及改变控件的大小
- 在运行时通过鼠标拖动移动控件位置及改变控件的大小
- datagrid的几点简单应用,功能包括radio的单选,checkbox的多选,鼠标移动到行上颜色变深,链接传递多参数等功能。这里radio和checkbox都使用的是HTML控件。
- [VB.net][WinForm]Panel控件移动\鼠标拖动
- AJAX 的DragPanelExtender 拖曳控件使用,并保存位置(此方法思路可将坐标保存到数据库)
- 点击打印出现IE已经阻止此站点用不安全方式使用 ActiveX 控件解决方法
- 多个panel控件重合使用时,某个panel控件不显示问题?
- CollapsiblePanelExtender这Ajax控件使用
- C# 鼠标拖拉移动窗体控件
- AjaxControlToolkit 微软出的ajax.net 工具使用教程七 使用UpdatePanel控件(二)
- 设计时自定义控制控件大小和移动
- 使用C#模拟键盘输入、鼠标移动和点击、设置光标位置及控制应用程序的显示