Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как запретить комбобоксу реагировать на колесо мыши


olden ©   (2002-12-12 13:00:00) 

и кусочек кода плиз :)


Song   (2002-12-13 14:00:00) [1]

Нагородили... да просто через TApplication.onMessage


olden   (2002-12-13 13:49:00) [2]

2 Matolch
>А не проще свой комбо сделать?

Может быть и проще
т.к. тут вот еще в чем загвоздка
у меня на форме есть три элемента: TComboBox, TEdit, TfrPreview (превью-компонент генератора отчетов FastReport)

Так вот если выбрать что-то в комбо а затем щелкнуть на frPreiew, то фокус с комбо не снимается и на прокрутку мышиного колеса реагируют одновременно и комбо и превью.
Если мышой кликнуть на TEdit, то фокус перемещается на оный
и комбо на колесо уже не реагирует.
Пытался програмно перенести фокус на TEdit после выбора пункта в комбо (SetFocus(),SetFocusedControl()). И ничего...
Фокус остается на комбо и опять комбо и превью одновременно реагируют на колесо

Я уже и с PERFORM() повозился, а все равно результата нет.


Matolch   (2002-12-12 15:08:00) [3]

А не проще свой комбо сделать?


Гарик   (2002-12-12 14:42:00) [4]

конечно не Handle, а Name, (и TControl"а нет хендла :) )


Гарик   (2002-12-12 14:32:00) [5]

точнее:

begin
...SKIP...
if ((GetCaptureControl.handle = _Блокируемый_комбобокс_.Handle)
and (wParam = WM_MOUSEWHEEL)) then Result := 1
else Result := 0


olden   (2002-12-12 14:14:00) [6]

спасибо, попробую


Гарик   (2002-12-12 14:10:00) [7]

Можно через ловушки.
mHook := SetWindowsHookEx(WH_MOUSE, @HookProc, 0, GetCurrentThreadID);
function HookProc(code: Integer; wParam, lParam: DWord): Longint; stdcall;
var wm: TMOUSEHOOKSTRUCT;
begin
if wParam = WM_MOUSEWHEEL then
if (Мыша_над_компонентом и компонент активен) // это напишешь сам
then Result := 1 // сообщение обработано и дальше обрабатываться не будет
else Result := 0 // передаем на обработку приложению
end;

Получить абсолютные координаты мыши можно так:
wm := TMOUSEHOOKSTRUCT(Pointer(lParam)^);
wm.pt : TPoint; - здесь координаты

на OnCreate формы пишешь mHook := SetWindowsHookEx(WH_MOUSE, @HookProc, 0, GetCurrentThreadID);

на OnDestroy - UnhookWindowsHookEx(mHook);


Наверх

Титульная страница Поиск, карта сайта Написать письмо