
12.12.2010, 17:46
|
 |
Профессионал
|
|
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
|
|
Еще можно переопределить обработчик событий окна, и тогда ВСЕ сообщения будут идти сначала в него, а в нем ты уже будешь вызывать старые после отработки нужных действий.
Если надо:
Код:
var
old: pointer;
fl:boolean=fasle;
...
function MyWNDProc(h: hwnd; msg, wparam, lparam: longint): longint; stdcall;
begin
case msg of
WM_LBUTTONDOWN:
begin
// сохраняем координаты мыши, ставим глобальный флаг перетаскивания fl:=true;
end;
WM_MouseMove:
begin
// если fl то перетаскиваем - в глобальных переменных храним старые значения X и Y,
// получаем новые, и сдвигаем окно на dX и dY и переписываем старые X и Y новыми
end;
WM_LBUTTONUP:
begin
// fl:=false;
end;
end;
result := CallWindowProc(old, h, msg, wparam, lparam);
end;
// при создании формы:
integer(old) := GetWindowLong(handle, GWL_WNDPROC);
SetWindowlong(handle, GWL_WNDPROC, integer(@MyWNDProc));
Как-то так
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
|