Главная страница
    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
14-26663
VMSIVETS
2003-05-23 12:31
2003.06.09
Срочно нужен компонент для работы с БД


1-26457
wera
2003-05-29 12:13
2003.06.09
ListBox


1-26607
AFrolov
2003-05-28 12:47
2003.06.09
Как получить ссылку на интерфейс


1-26538
kamkad3e
2003-05-26 22:43
2003.06.09
параметры к WordApplication1.Documents.Open


3-26377
Polard
2003-05-21 10:43
2003.06.09
Invalid BLOB handle in record buffer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский