В Delphi XE2 FireMonkey - Как изменить цвет кнопки после ее нажатия - PullRequest
6 голосов
/ 08 ноября 2011

Я просто хочу изменить цвет кнопки после ее нажатия.

Должен ли я использовать "стили" для этого или ....?

Ответы [ 2 ]

6 голосов
/ 08 ноября 2011

Вы можете изменить свойство button.StyleLookup, чтобы изменить стиль (цвет).

Вам необходимо добавить новый стиль в книгу стилей.

  1. Выберите «Изменить пользовательский стиль ...» в меню правой кнопки мыши на кнопке.
  2. Измените свойство Fill.Color из элементов TRectangle под фоном: TRectangle
  3. Применить и закрыть книгу стилей
  4. Очистить button.stylelookup
  5. Измените button.stylelookup в вашем clickclick на новый стиль создания, когда вы не изменили имя, Button1Style1
1 голос
/ 09 ноября 2011

Использование стилей

Альтернативой созданию другого стиля и переключением на этот новый стиль может быть создание собственного стиля для кнопки и изменение цвета в этом стиле во время выполнения.

  1. Щелкните правой кнопкой мыши по кнопке и выберите «Редактировать собственный стиль ...» из главного меню.
  2. Нажмите «Применить и закрыть» в редакторе стилей.

Вы только что создали собственный стиль для кнопки. Поэтому, когда вы редактируете его во время выполнения, это повлияет только на эту кнопку.

Теперь введите следующее в событие OnClick, чтобы изменить цвет во время выполнения:

  var
    r: TRectangle;
  begin
    // Find the background TRectangle style element for the button
    r := (Button1.FindStyleResource('background') as TRectangle);
    if Assigned(r) then
    begin
      r.Fill.Color := claBlue;
    end;
  end;

Примечание. Добавьте FMX.Objects к предложению использования, если у вас его еще нет. Вот где TRectangle.

Но подождите ...

Вы заметите, что цвет кнопки возвращается к значению по умолчанию, когда мышь покидает или входит в кнопку. Это из-за анимации. Если вы установили свойства стилевого имени для обоих элементов стиля TColorAnimation в редакторе стилей для пользовательского стиля, вы также можете установить цвет для них. Для моего примера я назвал TCOLORAnimations coloranimation1 и coloranimation2.

Вот пересмотренный код:

var
  r: TRectangle;
  ca: TColorAnimation;
begin
  // Find the background TRectangle style element for the button
  r := (Button1.FindStyleResource('background') as TRectangle);
  if Assigned(r) then
  begin
    r.Fill.Color := claBlue;
  end;
  ca := (Button1.FindStyleResource('coloranimation1') as TColorAnimation);
  if Assigned(ca) then
  begin
    ca.StartValue := claBlue;
  end;
  ca := (Button1.FindStyleResource('coloranimation2') as TColorAnimation);
  if Assigned(ca) then
  begin
    ca.StopValue := claBlue;
  end;

Примечание. Добавьте FMX.Ani к предложению использования для TColorAnimation.

...