Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-26617
memphis555
2003-02-08 11:23
2003.06.09
Передача изображения


14-26690
Дмитрий К.К.
2003-05-23 06:11
2003.06.09
Именинники 23 мая


1-26480
Nucl
2003-05-29 14:57
2003.06.09
Потоки


3-26346
AlexAvz
2003-05-20 13:47
2003.06.09
Работа с таблицами PARADOX


1-26451
Rise
2003-05-29 11:48
2003.06.09
_SystemTime





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский