CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define SS_BITMAP 14
#define SS_NOTIFY 256
#define SS_CENTERIMAGE 512
#define STM_SETIMAGE 370
#define WS_CAPTION 12582912
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "LoadImage", "LoadImageA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll" );
external(INT, "WindowFromPoint", "WindowFromPoint", "User32.dll" );
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll" );
int static, mouse_x, mouse_y, delta_x, delta_y, flag=0, rect[4];;
int image1=LoadImage(0, "C:\Безымянный.bmp", 0, 150, 74, 16); // загрузка картинки 150*74
createdialog(0);
showdialog(0, "Диалог",100, 100, 160, 80, 1, 1);
enabletimer(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "", SS_NOTIFY | SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 150, 74, gethwnd(0), 0, 0, 0); // создать статик
sendmessage(STM_SETIMAGE, 0, image1, formatiw(static)); // установить картинку на статик
SetWindowLong(gethwnd(0), -16, GetWindowLong(gethwnd(0), -16) | WS_CAPTION); // убрать рамку диалога
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==static) // если был клик по статику
{
while(getkeystate(1))sleep(1); // ждать пока кнопка мыши нажата
messagebox("Был нажат статик" );
}
}
CREATE_TIMER(0, 50)
{
while(flag || getkeystate(2)) // пока flag не равно 0 или нажата правая кнопка
{
getmouse(mouse_x, mouse_y); // получить координаты курсора
if(WindowFromPoint(mouse_x, mouse_y)==static) // получить хендл окна под курсором, если он равен с хендлу кнопки
{
if(GetWindowRect(static, address(#rect[0]))) // получить позицию кнопки
{
delta_x=mouse_x-rect[0]; delta_y=mouse_y-rect[1]; // разница координат курсора и координат кнопки
while(getkeystate(2)) // пока нажата правая кнопка мыши
{
getmouse(mouse_x, mouse_y); // получить координаты курсора
SetWindowPos(gethwnd(0), 0, mouse_x-delta_x, mouse_y-delta_y, -1, -1, 1); // переместить кнопку
sleep(10);
}
}
}
else
{
if(flag==0)break; // если хендл под курсором не равен хендлу кнопку и flag равно 0
}
}
}