Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.09;
Скачать: CL | DM;

Вниз

Как игнорировать сообщения мыши для контрола?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
4-26830
ККВ
2003-04-08 09:03
2003.06.09
Второй экземпляр приложения


7-26793
Wizd
2003-04-01 10:26
2003.06.09
Как заставить прогу работать до ввода логина и пароля? Win2000ser


14-26790
Basic
2003-05-20 00:26
2003.06.09
Что-то трафик тормозит


14-26680
Дмитрий К.К.
2003-05-25 11:21
2003.06.09
Именинники 25 мая


7-26802
edicon
2003-04-06 01:53
2003.06.09
Работа с модемом!