![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как запретить комбобоксу реагировать на колесо мыши
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);