сообщение о щелчке пользовательского компонента - PullRequest
1 голос
/ 24 марта 2011

Я пишу небольшой компонент, который я извлекаю из кнопки скорости. Все, что мне нужно сделать, это переопределить метод рисования, потому что я хотел бы изменить внешний вид. Теперь я достиг точки, где я хотел бы задать другой цвет фона при нажатии кнопки. Тем не менее, я не могу найти способ поймать сообщение щелчка левой кнопкой мыши в моем компоненте.

Что я использовал до сих пор:

procedure KeyboardButton.WndProc(var Message: TMessage);
begin
  if Message.LParam = VK_LBUTTON then
  begin
    //Some code
  end
  else
    inherited;
end;

Что не работает, когда я нажимаю на кнопку Message.LParam не 1.

Также я попробовал ...

procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

Ну, я знаю, что CM_MOUSELEAVE - это не сообщение, которое представляет щелчок мышью. Но, может быть, есть сообщение вроде CM_MOUSECLICK ??? Я не мог найти это все же. В общем, кто-нибудь, пожалуйста, скажите мне, что такое CM_XXXX, поскольку я не могу найти что-либо из msdn? Похоже на сообщения Delphi.

Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 25 марта 2011

VCL уже отслеживает сообщения WM_LBUTTONDOWN/UP для вас. Флаг csLButtonDown будет включен в свойстве ControlState вашего компонента, пока левая кнопка мыши удерживается на вашем компоненте (если свойство DragMode не установлено в dmAutomatic, то есть). Ваш код Paint() может проверить этот флаг и при необходимости настроить его фоновый рисунок.

3 голосов
/ 24 марта 2011

Вы можете просто переопределить методы MouseDown и MouseUp.Не забудьте проверить значение параметра Button!

1 голос
/ 24 марта 2011

Вы не правильно тестируете событие мыши. Попробуйте это:

if Message.Msg = WM_LBUTTONDOWN then
  // Some code
else
  inherited;

Кстати, TMessage.LParam и TMessage.WParam - это параметры, передаваемые с определенным типом сообщения (например, WM_LBUTTONDOWN), и имеют различные значения в зависимости от того, что на самом деле является TMessage.Msg. В никогда не должно быть случая, когда вы получаете общее сообщение типа TMessage и отмечаете только WParam или LParam.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...