Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2011, 13:17   #1
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию Компонент Image в роли кнопки.

Народ подскажите, как можно задействовать имейдж в роли кнопки, вот с такими нужными мне функциями:

1 случай -
а)при наведении на имейдж - делать выпуклость на картинке (можно как-то и по другому, но не сменой курсора).
б) при нажатии на имейдж - дабы выпуклость менялась на вогнутость (не знаю как правильно это назвать - короче картинка вжималась).
(Рылся по этим свойствам в компоненте Image и не нашел, подозреваю, что таких свойств нету у него, вот и спрашиваю у вас коллеги).

2 случай -
а) при одиночном клике, картинка делалась выделяемой, каким угодно способом (прямо при написании вопроса - уже сам себе ответил - например сделать картинку черно-белой или каким другим выделяемым способом)
б) при двойном клике открывать другую формочку.
(И вот в чем вопрос, а вопрос об одиночном и двойном клике - и разный выполняемых процедур(функций), как бы OnClick - дает вопрос только на пункт 2.а, а вот пункт 2.б остается нерешенным).

Заранее благодарен всем за помощь и подсказки. Возможно я для всего этого не удачный компонент Image выбрал, просто понравился тем, что можно картинку влепить какую угодно. Хотя можно было и BitBth или SpeedButton. Короче жду ваших советов.
Небесный вне форума Ответить с цитированием
Старый 24.11.2011, 13:28   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вы не в ту сторону копаете. Image вовсе не кнопка. И для неё придётся сосмому писать 3 состояния и события и много чего ещё.

Смотрите класс кнопки Tbutton, там все уже есть.
Наследуйте и при изменении состояния рисуйте на кнопке соответствующую картинку состояния.

Последний раз редактировалось Человек_Борща; 24.11.2011 в 13:30.
Человек_Борща вне форума Ответить с цитированием
Старый 24.11.2011, 13:44   #3
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Тогда еще один вопрос, как организовать одиночный и двойной клик?
Ибо если использовать сразу два метода одиночного клика и двойного, одиночный клик перехватывает всегда двойной, считая, что это одиночный клик.

Последний раз редактировалось Небесный; 24.11.2011 в 15:36.
Небесный вне форума Ответить с цитированием
Старый 24.11.2011, 17:56   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Ну, вообще-то, у TButton имеется два разных события на одиночный и двойной щелчки:
OnClick;
OnDblClick;

А ещё бы я посоветовал Вам найти библиотеку компонентов Raize Components Pack с серийником.
Там можно многое что сделать визуально красивым...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 24.11.2011, 18:18   #5
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Johnson Посмотреть сообщение
Ну, вообще-то, у TButton имеется два разных события на одиночный и двойной щелчки:
OnClick;
OnDblClick;
Я вполне с вами согласен, да вот когда используешь одновременно события OnClick и OnDblClick, первый всегда перехватывает второй, даже если это и двойной клик. Но с этим я уже разобрался - пришлось немного извратиться.

Код:
procedure TForm1.Image1Click(Sender: TObject);
var
  Msg: TMsg;
  TargetTime: Longint;
begin
  TargetTime := GetTickCount + GetDoubleClickTime;
  while GetTickCount < TargetTime do
    if PeekMessage(Msg, 0, WM_LBUTTONDBLCLK, WM_LBUTTONDBLCLK, PM_NOREMOVE)
      then Exit;
  ShowMessage('Одиничный клик'); { На этом месте что-то делаем по одному клику.  Мессага в роли теста}
end;

procedure TForm1.Image1DblClick(Sender: TObject);
begin
  ShowMessage('Двойной клик'); { На этом месте что-то делаем по двойному клику.  Мессага в роли теста}
end;
Может кто-то поможет адаптировать данный код, дабы небыло так дико. )))
Небесный вне форума Ответить с цитированием
Старый 24.11.2011, 18:23   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Физическая форма
http://www.programmersforum.ru/showthread.php?t=17054
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
компонент image obsession Общие вопросы Delphi 2 09.05.2011 17:55
Компонент Image Ericnex Общие вопросы Delphi 1 05.05.2010 20:21
Компонент - Image?! $T@LKER Компоненты Delphi 5 10.05.2009 00:13
Компонент - Image!!!! $T@LKER Общие вопросы Delphi 0 09.05.2009 12:38
Компонент Image Небесный Мультимедиа в Delphi 8 02.02.2009 19:59