Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как обработать события колесика мыши если


Автор: ДЫМ 20.12.2004, 04:12
Есть компонент PaintBox, но у него нет событий , OnMouseWheelUp и OnMouseWh, как его заставить реагировать на вращение колесика мыши?

Автор: Vladimir13 20.12.2004, 05:05
я в свое время делал все на форме, где есть колесико. чуть заморочистее... но если так нужно колесико
могу посоветовать еще как нибудь отловить колесико у Windows... хотя не знаю как , да и зачем, если есть форма.

Автор: Vit 20.12.2004, 07:48
Ловить сообщения от колёсика...

Автор: Snowy 20.12.2004, 11:27
Засунуть PaintBox в ScrollBox.
Если нужно ловить колесико, то посмотри тут:
http://forum.vingrad.ru/index.php?showtopic=31739

Автор: ДЫМ 21.12.2004, 02:46
Цитата
Ловить сообщения от колёсика...


Но как?

Автор: Snowy 21.12.2004, 09:57
Что как? Линк для чего дан? Там все написано.
Кидаешь на форму TApplicationEvents. Создаешь событие OnMessage.
Запихиваешь туда приведенный код и получаешь:
Код

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
begin
 if Msg.Message=WM_MOUSEWHEEL then
   if Msg.lParam<0 then вверх
   else вниз;
end;

Вместо "вверх" и "вниз" подставляешь нужный тебе код.
Только чем тебя скроллбокс не устроил? С ним гемороя меньше.

Автор: ДЫМ 22.12.2004, 02:19
Snowy
Спасибо за разъяснения

Автор: dm9 22.12.2004, 03:46
Если делаешь компонент, всё гораздо проще.
protected
{ Protected declarations }
procedure Wheel (var Msg : TMessage); message WM_MOUSEWHEEL;

А уж что и где в этом Msg - см. Help -> Windows SDK (см. WM_MOUSEWHEEL)

Кстати, можно проще. Для этого события придумали класс... То есть тебе не понадобится вручную вытаскивать данные из Msg, за тебя это уже сделали...

procedure Wheel (var Msg : TWMMouseWheel); message WM_MOUSEWHEEL;

Код
TWMMouseWheel = packed record
   Msg: Cardinal;
   Keys: SmallInt;
   WheelDelta: SmallInt;
   case Integer of
     0: (
       XPos: Smallint;
       YPos: Smallint);
     1: (
       Pos: TSmallPoint;
       Result: Longint);
 end;

Добавлено @ 03:52
PS А подумавши, добавлю... smile

Так было бы, если бы PaintBox был полноценным окном. Я посмотрел, он таковым не является smile Так что клади его на TScrollBox и не парь мозги... А у ScrollBox есть мессаги onMouseWheel.

Автор: badaninslava 3.6.2005, 20:06
А как сделать наследнику TCustomPanel событие onMouseWheel?
Добавлено @ 20:08
В справке написано, что наслудники TWinControl могут реагировать на это событие. Но я никак не могу допереть как без формы отловить кручение колёсика. Сообщением wm_MouseWheel что-то не выходит...

Автор: Dynamic 4.6.2005, 15:12
нафиг наследника:
Код

  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    procedure Wheel (var Msg : TWMMouseWheel); message WM_MOUSEWHEEL;
  end;

procedure TForm1.Wheel(var Msg: TWMMouseWheel);
begin
     showmessage(inttostr(Msg.XPos));
end;

Автор: badaninslava 4.6.2005, 20:09
Нет, я типа пишу новый компонент(для личного пользования) и хочу что-бы в нем было событие onMOUSEWHEEL. А как это сделать не знаю.

Автор: Quadr0 4.6.2005, 21:37
...

Автор: badaninslava 5.6.2005, 11:22
Всё, я разобрался. Спасибо.

Автор: gesper 11.12.2013, 21:07
А я вот не могу понять, какого фига у TControl есть OnMouseWheelUp , он виден при создании компонента на основе TPaintBox, но реакции на событие нет.
что за чушь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)