Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 808

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Хочу задать такой вопрос - я хочу сделать "анимацию" кнопки - тоесть при наведнии на нее курсором что бы она была другим цветом - это я знаю как сделать, а вот чего я не знаю, это как сделать, что бы при отведении курсора она становилась прежнего цвета! Это наврноем можно сделать так: на заднем плане у меня рисунок - Image1 - я меняю цвет для Image2 - кнопки на этом рисунке - тоесть нужно в событии OnMouseMove для Image1 присвоить значение первоначальной картинки для Image2 - но вот только я не знаю, как это сделать - не одскажите, пожалуста! Заранее спасибо!

Violina Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Violina (статус: Посетитель)
Вопрос отправлен: 7 августа 2008, 11:58
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Аксион

Здравствуйте, Violina! Не мучайтесь :) используйте лучше компонент PNGButton, который входит в пакет pngimage ( http://delphi-coder.ru/files/Components/PNGimage/pngimage.rar ), просто указываете в свойствах 2 картинки (png) в обычном состоянии и когда курсор поверх компонента и .... всё :)

Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 7 августа 2008, 13:33
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Violina!
Вариантов может быть море. Мне как-то надо было сделать компонент аналог линков в браузере, т.е. что бы при наведении мышки на текст он менял цвет, а при отведении - цвет менялся обратно. Решение было простым. Сделал компонент потомок от TLabel и у него добавил два события OnMouseLeave и OnMouseEnter. Далее кладем этот компонент себе на форму и обрабатываем эти два события как нам хочется.
Тоже самое можно сделать и с вашей кнопкой.
Пример кода в приложении.

Приложение:
  1. (*///////////////////////////////////////////////////////*)
  2. (*//
  3. (*// Author: Bird Feniks
  4. (*// Company: Group of Developers Software
  5. (*//
  6. (*////////////////////////////////////////////////////////*)
  7. unit EMailLabel;
  8.  
  9. interface
  10.  
  11. uses
  12.  
  13. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  14. StdCtrls;
  15.  
  16. type
  17.  
  18. TEMailLabel = class(TLabel)
  19. private
  20. { Private declarations }
  21. FOnMouseLeave: TNotifyEvent;
  22. FOnMouseEnter: TNotifyEvent;
  23. procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  24. procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  25. protected
  26. { Protected declarations }
  27. public
  28. { Public declarations }
  29. published
  30. { Published declarations }
  31. property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  32. property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
  33. end;
  34.  
  35. procedure Register;
  36.  
  37. implementation
  38.  
  39. procedure Register;
  40. begin
  41. RegisterComponents('GoD Software', [TEMailLabel]);
  42. end;
  43.  
  44. { TEMailLabel }
  45.  
  46. procedure TEMailLabel.CMMouseEnter(var Message: TMessage);
  47. begin
  48. if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
  49. end;
  50.  
  51. procedure TEMailLabel.CMMouseLeave(var Message: TMessage);
  52. begin
  53. if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
  54. end;
  55.  
  56. end.


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 11 августа 2008, 14:24


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 8 августа 2008, 12:15; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 7 августа 2008, 12:17 [#1]:

есть такие события WM_MOUSE_ENTER и WM_MOUSELEAVE, которые посылаются объекты при наведении указателя мыши и при уходе. правда делать два Image - несколько странный подход, лучше сделать свой компонент.
Галочка "подтверждения прочтения" - вселенское зло.
Violina

Violina (статус: Посетитель), 7 августа 2008, 12:47 [#2]:

А можно, пожалуйста, немного поподробнее - опишу проект - тоесть фон - Image - и на этом фоне кнопки - тоже Image - тоесть пишу на них события и они у меня за батоны работают... Если не трудно, подскажите мне код, что бы при наведении менялась картинка (я использую на onMouseMove :
TImage(Sender).Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'\above.bmp'); )
а код при уходе курсора я не знаю... спасибо
Violina

Violina (статус: Посетитель), 7 августа 2008, 14:23 [#3]:

Блазер, большое Вам спасибо - я скачала - а не могли бы Вы мне вкратце рассказать куда, то, что я скачала пихать и как им пользоваться? Спасибо 8)
Аксион

Аксион (статус: 4-ый класс), 7 августа 2008, 14:45 [#4]:

В свойствах компонета есть пункты Imagenormal и Imageover, 1 - это обычная артинка (т.е. когда курсор на компонент не наведён), а 2 - это картинка когда курсор над компонентом, картинки загружаются только формата png ( скачать их можно например от сюда http://allday.ru/desktop/desktop_icons/ или сделать самому ) На счёт установки в архиве есть файл pngimage его надо запустить и установить, нажав в строке меню делфи component-install component ( подробнее тут https://expert.delphi-int.ru/question/1792/ )
Violina

Violina (статус: Посетитель), 7 августа 2008, 14:50 [#5]:

Большое спасибо - сейчас буду пробовать - а на какой вкладкеон должен появиться у меня?
Violina

Violina (статус: Посетитель), 7 августа 2008, 15:21 [#6]:

Не знаю, ничего у меня абсолютно не получается с этими компонентами... все равно огромное Вам, Блазер, спасибо! Но какие-то ошибки выдает и не добавляет... может я что-то не так делаю - но факт тот, что ничего пока не получилось у меня...

Вадим К, если Вам не трудно, расскажите мне, как я могла бы использовать события WM_MOUSE_ENTER и WM_MOUSELEAVE, если не трудно - ато я уже н знаю, что и делать... спасибо!
Вадим К

Вадим К (статус: Академик), 7 августа 2008, 15:45 [#7]:

надо писать компонент-наследник
Галочка "подтверждения прочтения" - вселенское зло.
Violina

Violina (статус: Посетитель), 7 августа 2008, 15:46 [#8]:

Короче и это я сделать не смогу 8( - эх - ладно - все равно болшое спасибо...
Аксион

Аксион (статус: 4-ый класс), 7 августа 2008, 18:35 [#9]:

Ёклмн.....Виолина.........вы хоть компонент установили? Или нет?
Violina

Violina (статус: Посетитель), 7 августа 2008, 21:56 [#10]:

Блазер, эх - 3 часа спустя я все-таки поставила... вообще нереально - что Вы дали ссылку - я скачала - добавляла, добавляла - но 0 - наверное я так добавляла - начала искать в интете - сайт, типа официальный сайт этого чуда - на нем переадресация на черт знает что стоит - начала лазить по форумам и поисковикам - короче доустанавливала сякого бреда, что 2 раза Delphi переустанавливала... но потом наконец на одном наткнулась на ссылку - там для таких умных как я 8) все подробно показано на примере и рабочее все - короче тока запустила я этот компонент! Так что спасибо Вам, без Вас, я бы через OnMove думала как ту фигню сделать - а там такое получается... убится об монитор легче! Фух! Спасиюбо 8)
Аксион

Аксион (статус: 4-ый класс), 8 августа 2008, 12:15 [#11]:

х_Х Янемного не понял.... вы задачу то свою этим компонентом ршили? :)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:53
Выполнено за 0.02 сек.