一些关于窗体内控件拖动的问题!可能要花点心思!(50分)

  • 主题发起人 主题发起人 zwjChina
  • 开始时间 开始时间
Z

zwjChina

Unregistered / Unconfirmed
GUEST, unregistred user!
在Form中放一个Panel
在Panel的OnMouseDown中写如下代码!
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(Panel1.Handle, WM_SYSCOMMAND, $F012, 0);
end;
但是我找遍帮助也没找到$F012所代表的意思,以下是帮助中WParam参数的对应值!
SC_CLOSE $F060
SC_CONTEXTHELP $F180
SC_DEFAULT $F160
SC_HOTKEY $F150
SC_HSCROLL $F080
SC_KEYMENU $F100
SC_MAXIMIZE $F030
SC_MINIMIZE $F020
SC_MONITORPOWER $F170
SC_MOUSEMENU $F090
SC_MOVE $F010
SC_NEXTWINDOW $F040
SC_PREVWINDOW $F050
SC_RESTORE $F120
SC_SCREENSAVE $F140
SC_SIZE $F000
SC_TASKLIST $F130
SC_VSCROLL $F070

其实上面的代码$F012的取值为以下都可以达到
拖动Panel的效果,[$F009,$F012, $F013..$F019]
而且你把值换成如$F001, $F002 .. $F008等可以看到很多效果!

不知道哪里有相关的说明。为什么这些东西没有写入到帮助中呢?
 
/*
* System Menu Command Values
*/
#define SC_SIZE 0xF000
#define SC_MOVE 0xF010
#define SC_MINIMIZE 0xF020
#define SC_MAXIMIZE 0xF030
#define SC_NEXTWINDOW 0xF040
#define SC_PREVWINDOW 0xF050
#define SC_CLOSE 0xF060
#define SC_VSCROLL 0xF070
#define SC_HSCROLL 0xF080
#define SC_MOUSEMENU 0xF090
#define SC_KEYMENU 0xF100
#define SC_ARRANGE 0xF110
#define SC_RESTORE 0xF120
#define SC_TASKLIST 0xF130
#define SC_SCREENSAVE 0xF140
#define SC_HOTKEY 0xF150
#if(WINVER >= 0x0400)
#define SC_DEFAULT 0xF160
#define SC_MONITORPOWER 0xF170
#define SC_CONTEXTHELP 0xF180
#define SC_SEPARATOR 0xF00F
#endif /* WINVER >= 0x0400 */
 
在程序中拖动控件

在控件的mousedown中写入:

ReleaseCapture;
SendMessage(Panel1.Handle, WM_SYSCOMMAND, $F012, 0);
另外改变$F012的值会有很多别的功能
$F001:改变控件的left大小
$F002:改变控件的right大小
$F003:改变控件的top大小
$F004:改变控件的buttom大小
$F007:控件左边放大缩小
$F008:控件右边放大缩小
$F009:动态移动控件
 
多人接受答案了。
 
后退
顶部