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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2016, 14:02   #1
ddocprog
Новичок
Джуниор
 
Регистрация: 20.04.2016
Сообщений: 1
По умолчанию Эффекты зажатия и отжатия компонента TButton

Гайс, подскажите, пожалуйста, как создать эффект зажатия о отжатия кнопки. Мне необходимо, чтобы кнопка, по нажатию на неё, зажималась, а при повторному нажатию на неё же, отжималась. Использовал: "btn1.Perform(BM_SETSTATE, 1, 0)" и "SendMessage(btn1.Handle, BM_SETSTATE, 1, 0)" и это получалось, но только с одной кнопкой. То есть, я нажимал первую кнопку, она зажималась, затем я нажимал вторую кнопку, вторая тоже зажалась, но первая отжалась назад и функция, которую она выполняла, сбросилась. Мне необходимо, чтобы оставались вжатыми несколько кнопок. Помогите, пожалуйста, решить эту проблему

P.S. Функция программы: при нажатии кнопки, в первый label записывается её caption. Если первая кнопка вжата, а нажимаешь вторую - тогда во второй label записывается caption второй кнопки, так как первый уже занят. Сам код я реализовал следующим образом(может в нём что-то не так, хотя это вряд ли)(это пример двух кнопок) --->

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
a:=0;
end; 
 
procedure TForm1.btn1Click(Sender: TObject);
{$J+}
const
  boo:  Boolean = False;
{$J-}
begin
  if (boo = False) then
    begin
      if (a <> 2) then
        begin
          btn1.Perform(BM_SETSTATE, 1, 0);
          boo:= True;
        end;

        case a of
          0:
            begin
              lbl1.Caption:= btn1.Caption;
              a:=1;
            end;
          1:
            begin
              lbl2.Caption:= btn1.Caption;
              a:=2;
            end;
        end;
    end
  else
    begin
      btn1.Perform(BM_SETSTATE, 0, 0);
      boo:= False;
      case a of
          1:
            begin
              lbl1.Caption:= '';
              a:=0;
            end;
          2:
            begin
              lbl2.Caption:= '';
              a:=1;
            end;
        end;
    end;
end;

procedure TForm1.btn2Click(Sender: TObject);
{$J+}
const
  boo:  Boolean = False;
{$J-}
begin
  if (boo = False) then
    begin
      if (a <> 2) then
        begin
          btn2.Perform(BM_SETSTATE, 1, 0);
          boo:= True;
        end;

        case a of
          0:
            begin
              lbl1.Caption:= btn2.Caption;
              a:=1;
            end;
          1:
            begin
              lbl2.Caption:= btn2.Caption;
              a:=2;
            end;
        end;
    end
  else
    begin
      btn2.Perform(BM_SETSTATE, 0, 0);
      boo:= False;
      case a of
          1:
            begin
              lbl1.Caption:= '';
              a:=0;
            end;
          2:
            begin
              lbl2.Caption:= '';
              a:=1;
            end;
        end;
    end;
end;

Последний раз редактировалось ddocprog; 20.04.2016 в 14:06.
ddocprog вне форума Ответить с цитированием
Старый 20.04.2016, 14:49   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

A ToolBar не пойдет?
Там это реализуется автоматически...
kropotkina-alice вне форума Ответить с цитированием
Старый 20.04.2016, 15:11   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Брось на форму ActionList и три SpeedButton. В ActionList создай 3 Acton-а, у каждого введи разный не нулевой GroupIndex и создай OnExecute. Теперь каждый SpeedButton нацель на свой Action и установи AllowAllUp в True. Любуйся. 3 можно заменить на 2, 30, 130 ... Можно и без ActionList, тогда GroupIndex на кнопках задай
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.04.2016 в 15:13.
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#|Обработка отжатия клавиши. Alek-de-Mik Помощь студентам 2 09.09.2012 06:27
TButton Yriy Помощь студентам 4 28.01.2012 14:21
Как записать в массив время нажатия, отжатия клавиш Berta Помощь студентам 4 06.04.2010 17:29
Обработка сообщения отжатия левой кнопки мыши на компоненте TrackBar CyberJohn Общие вопросы Delphi 5 08.02.2009 12:34
глобальный хук & событие отжатия клавиши Nowichok Общие вопросы Delphi 9 24.11.2006 17:51