Другие языки программирования и технологии

On Mouse Move, HELP!!!

Здравствуйте ребята помогите пожалуйста, хочу сделать кнопку в Делфи как в 7-рке обрабатываю событие onMouseMove так вот нужно что бы при наведении мышки кнопка "загоралась" тоесть менялась картинка, а когда мышка уходит с мышки кнопка возвращалась в прежнее состояние.
Если память мне не врет, то дельфи как и vb не имеют события over (покидание мышой контрола) . Поэтому, сам пишешь класс, который постоянно опрашивает какой контрол сейчас под мышью - при заходе на контрол ставишь флаг, при уходе если флаг данного контрола установлен - то значит с него только что ушли вот и меняй картинку себе по этому флагу.
DP
Denis Prohorow
10 586
Лучший ответ
Самый простой способ вот такой:
Антон Кузин
Антон Кузин
87 139
Через OnMouseMove не получится, потому что это событие не фиксирует выход указателя мыши за пределы компонента.
Поскольку отрисовка картинки на кнопке - это здесь задача лишняя, покажу, как сделать то, что требуется, с тем лишь исключениям, что "загорание" кнопки будет выглядеть только "ожирнением" шрифта подписи.
Надо объявить класс, например, TMyButton так
TMyButton = class(TButton)
private
procedure CNMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CNMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
end;
Реализация методов будет следующая:
procedure TMyButton.CNMouseEnter(var Message: TMessage);
begin
Font.Style := [fsBold];
end;

procedure TMyButton.CNMouseLeave(var Message: TMessage);
begin
Font.Style := [];
end;
Если компонент не регистрировать, то его можно будет использовать только в рантайме, например, так:
procedure TForm1.FormCreate(Sender: TObject);
var
TButton1: TMyButton;
begin
TButton1 := TMyButton.Create(Form1);
TButton1.Caption := 'hi';
TButton1.Parent := Form1;
TButton1.Width := 100;
TButton1.Height := 25;
TButton1.Left := 50;
TButton1.Top := 50;
end;
Можно пойти дальше и сделать компонент, доступный в дизайнере и реализующий всё-таки "загорание" сменой картинки.
---
Уважайте время других участников Ответов. Не забывайте отмечать лучшие ответы.