Какова рекомендуемая поддержка колесика мыши в Delphi XE2? - PullRequest
3 голосов
/ 17 ноября 2011

Я пытаюсь привести в порядок свой код теперь, когда Delphi XE2 доступен - мой код датируется Borland Pascal 7, так что есть много «старых» (но работающих!) Методов Win32, и, естественно, я также имею в виду независимость от платформы. Поддержка колесика мыши появилась здесь с несколькими предыдущими вопросами 1 2 и 3 . Как и в случае некоторых из этих ответов, мое собственное решение - это простой перехват сообщений мыши с использованием компонента TApplicationEvents:

  procedure TForm6.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);

  procedure ProcessMouseWheelMessage;
  begin
    Msg.message := WM_KEYDOWN;

    Msg.lParam := 0;

    If Integer(Msg.wParam) > 0 then
      Msg.wParam := VK_UP
    else
      Msg.wParam := VK_DOWN;

    Handled := False;
  end;

begin
  Case Msg.message of
    WM_MOUSEWHEEL :
      ProcessMouseWheelMessage;
  end;
end;

Я пересмотрел этот код сегодня, потому что «Msg.wParam» теперь является NativeInt, что исключает использование отрицательных значений Msg.wParam в приведенном выше коде, если вы не используете Integer (Msg.wParam). Это заставило меня заметить, что я не видел действительно определенного использования колеса мыши для кода Delphi - ужасно, когда у всех мышей теперь есть колеса, и Delphi снова находится на «переднем крае»! Я бы ожидал свойство, компонент или какое-то другое, более «раскрытое» решение, а как насчет поддержки колеса Fire Monkey?

Продолжаю ли я решение или есть лучший способ?

Ответы [ 2 ]

6 голосов
/ 17 ноября 2011

В XE2 (и даже во всех последних выпусках) вам не нужно ничего делать. Стандартные элементы управления поддерживают прокрутку колесика мыши из коробки. Просто избавься от этого старого кода.

3 голосов
/ 17 ноября 2011

Компоненты Delphi с дескриптором Windows (потомки TWinControl) имеют события OnMouseWheel, OnMouseWheelUp и OnMouseWheelDown.

Если вы хотите добавить событие управления колесом мыши к элементу управления, который не происходит из TWinControl, см. Эту статью: http://delphi.about.com/od/delphitips2010/qt/timage-handling-mouse-wheel-messages.htm

...