Другие языки программирования и технологии
On Mouse Move, HELP!!!
Здравствуйте ребята помогите пожалуйста, хочу сделать кнопку в Делфи как в 7-рке обрабатываю событие onMouseMove так вот нужно что бы при наведении мышки кнопка "загоралась" тоесть менялась картинка, а когда мышка уходит с мышки кнопка возвращалась в прежнее состояние.
Если память мне не врет, то дельфи как и vb не имеют события over (покидание мышой контрола) . Поэтому, сам пишешь класс, который постоянно опрашивает какой контрол сейчас под мышью - при заходе на контрол ставишь флаг, при уходе если флаг данного контрола установлен - то значит с него только что ушли вот и меняй картинку себе по этому флагу.
Самый простой способ вот такой: 

Через 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;
Можно пойти дальше и сделать компонент, доступный в дизайнере и реализующий всё-таки "загорание" сменой картинки.
---
Уважайте время других участников Ответов. Не забывайте отмечать лучшие ответы.
Поскольку отрисовка картинки на кнопке - это здесь задача лишняя, покажу, как сделать то, что требуется, с тем лишь исключениям, что "загорание" кнопки будет выглядеть только "ожирнением" шрифта подписи.
Надо объявить класс, например, 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;
Можно пойти дальше и сделать компонент, доступный в дизайнере и реализующий всё-таки "загорание" сменой картинки.
---
Уважайте время других участников Ответов. Не забывайте отмечать лучшие ответы.
Похожие вопросы
- Help C++
- Баннер заблокировал комп!HELP!!!!
- русскоязычный help для Delphi7 c++ и паскаль
- Help с подключением "LAN"
- HELP!Удалила очень нужную папку!
- Подскажите мощный видеоредактор где можно вставить музыку, картинки в видео и т. д win move marker не предлогать
- С++ функции move и copy в библиотеке algorithm
- Что лучше "SELECT поля FROM таблица LEFT JOIN таблица ON условие" или...."SELECT поля FROM таблица1, таблица2 WHERE"
- поддержка ruby on rails на локале
- Помогите перевести числа в разные системы счисления. HELP!!!