Показать сообщение отдельно
  #4  
Старый 12.12.2010, 17:46
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 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.
Ответить с цитированием