Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
ВнизКак игнорировать сообщения мыши для контрола? Найти похожие ветки
← →
deedlit (2003-05-28 16:36) [0]ListBox можно прокручивать, используя колесо мышки (так велит великий и могучий Win). Нужно, чтобы этот компонент не реагировал на прокрутку колесика, так как сообщения такого рода должна, по сути задачи, обрабатывать форма.
← →
Skier (2003-05-28 16:40) [1]см. TWinControl.MouseWheelHandler
← →
deedlit (2003-05-28 16:56) [2]
> см. TWinControl.MouseWheelHandler
У меня плохой английский :) Кажется, там написано, что эта процедура изолирует сообщения от контрола, а в качестве параметра ей можно передать собственно сообщение. Я пробовала:
Listbox.MouseWheelHandler(WM_MOUSEWHEEL);
Компилятор ругается на разные типы параметров процедуры и того, что я пытаюсь ей передать... Не понимаю я чего-то. Помоги, если нетрудно. :(
← →
Skier (2003-05-28 17:00) [3]>deedlit © (28.05.03 16:56)
1) Если ты пишешь комопонент на основе TListBox, то
обрати внимание на слово dynamic после объявления
метода MouseWheelHandler
2) Если нет, то, видимо, придётся замещать оконную процедуру
и брать сообщение от колёсика "на себя"
← →
deedlit (2003-05-28 17:45) [4]
> Если нет, то, видимо, придётся замещать оконную процедуру
> и брать сообщение от колёсика "на себя"
Проблема в том, что задания обработчиков дляMouseWheel&MouseWheelUp&MouseWheelDown
не отменяют реакцию контрола на собственно прокрутку.
← →
Skier (2003-05-28 17:46) [5]>deedlit © (28.05.03 17:45)
Код покажи...
← →
reonid (2003-05-28 18:50) [6]Если ты не пишешь свой компонент,
то вместо подмены оконной процедуры
можно поставить ловушку на сообщения:
var
hHook: THandle;
function GetMsgProc(Code, WParam{RemovalFlag}, LParam{Msg}: Longint): LResult; stdcall;
var Msg: PMsg absolute LParam;
begin
if Code = HC_ACTION then
begin
// Если какому-то окну пришло (через PostMessage)
// сообщение WM_MOUSEWHEEL
if (Msg^.message = WM_MOUSEWHEEL) then
if (Msg^.hwnd = Form1.ListBox1.Handle) then
// or (Msg^.hwnd = Form1.ListBox2.Handle)
// И если это окно - как раз то, которое ты
// хочешь отлучить от данного сообщения
begin
// То ты можешь
// Игнорировать его
Msg^.message := WM_NULL;
// Или перенаправить форме
//Msg^.hwnd := Form1.Handle;
// Тогда на форме его потребуется обработать
end;
end;
Result := CallNextHookEx(hHook, Code, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
hHook := SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, 0, GetCurrentThreadID);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(hHook);
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c