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

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

Как наиболее изящно отловить WM_MOUSEWHEEL? [D6, Win2k]


Курдль ©   (2005-09-20 13:17:00) 

Приветствую аборигенов и гостей форума!

Необходимо заставить Control ("TCntlGrid") скроллироваться прокруткой мышиного колеса. Как это наиболее изящно исполнить?

С уважением, Я.


Курдль   (2005-09-20 17:19:00) [1]

Спасибо! Нашел еще способ - при помощи TApplicationEvents


procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
 i: SmallInt;
begin
 inherited;
 if Msg.message = WM_MOUSEWHEEL then
 begin
   Msg.message := WM_KEYDOWN;
   Msg.lParam := 0;
   i := HiWord(Msg.wParam) ;
   if i > 0 then
     Msg.wParam := VK_UP
   else
     Msg.wParam := VK_DOWN;

   Handled := False;
 end;
end;


Leonid Troyanovsky   (2005-09-20 14:13:00) [2]


> Курдль ©   (20.09.05 13:17)  

> Необходимо заставить Control ("TCntlGrid") скроллироваться
> прокруткой мышиного колеса. Как это наиболее изящно исполнить?



 By Peter Below


procedure TForm1.GridMouseWheel(Sender: TObject; Shift: TShiftState;
 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
const
 codes: array [Boolean] of Cardinal = (VK_UP, VK_DOWN);
var
 code: Cardinal;
begin
 Handled := true;
 code := codes[WheelDelta < 0];
 (sender as TWincontrol).Perform( WM_KEYDOWN, code, 0 );
 (sender as TWincontrol).Perform( WM_KEYUP, code, 0 );
end;

type
 TGridCracker = class(TDBCtrlGrid);

procedure TForm1.FormCreate(Sender: TObject);
begin
 TGridCracker(DBCtrlGrid1).OnMouseWheel := GridMousewheel;
end;


--
Regards, LVT.


Наверх

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