Перейти к содержанию
Fire Monkey от А до Я
  • 0

Не могу задать Fill.Color


patrikey

Вопрос

Создал компонент. Квадратная кнопка.

unit RectangleButton;

interface

uses
  System.SysUtils, System.Classes, System.UITypes, FMX.Types, FMX.Controls, FMX.Objects, FMX.StdCtrls, FMX.Ani, FMX.Dialogs;

type
  TRectangleButton = class(TRectangle)
  private
    fClicked: Boolean;
    fMainColor: TAlphaColor;
    fClickedColor: TAlphaColor;
    fText: String;
    ColorAnimation: TColorAnimation;
    TextLabel: TLabel;
  protected
    procedure Click; override;
    procedure SetText(const Value: String);
    procedure SetMainColor(const Value: TAlphaColor);
    procedure SetClickedColor(const Value: TAlphaColor);
    procedure SetClicked(const Value: Boolean);
  public
    { Public declarations }
  published
    property Clicked: Boolean read fClicked write SetClicked;
    property MainColor: TAlphaColor read fMainColor write SetMainColor;
    property ClickedColor: TAlphaColor read fClickedColor write SetClickedColor;
    property Text: String read fText write SetText;
    procedure Unselect;
    constructor Create(aowner: TComponent); override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Shapes', [TRectangleButton]);
end;

{ TRectangleButton }

procedure TRectangleButton.Click;
begin
  inherited;
 if not fClicked then begin
 fClicked:= True;
 Fill.Color:= fClickedColor;
 ColorAnimation.Trigger:= '';
 ColorAnimation.TriggerInverse:= '';
 end;
 end;

constructor TRectangleButton.Create(aowner: TComponent);
begin
  inherited Create (AOwner);
ColorAnimation:= TColorAnimation.Create(Self);
 with ColorAnimation do begin
 Parent:= Self;
 Stored:= False;
 AutoReverse:= False;
 Delay:= 0;
 Duration:= 0.2;
 PropertyName:= 'Fill.Color';
 //StartValue:= Fill.Color;
 //StopValue:= ClickedColor;
 Trigger:= 'IsMouseOver=true';
 TriggerInverse:= 'IsMouseOver=false';
 end;
TextLabel:= TLabel.Create(Self);
 with TextLabel do begin
 Stored:= False;
 Parent:= self;
 Align:= TAlignLayout.Contents;
 TextSettings.HorzAlign:= TTextAlign.Center;
 Text:= 'Text';
 end;
end;

procedure TRectangleButton.SetClicked(const Value: Boolean);
begin
 if Value then begin
 fClicked:= True;
 Fill.Color:= fClickedColor;
 ColorAnimation.Trigger:= '';
 ColorAnimation.TriggerInverse:= '';
 end;
 if not Value then begin
 fClicked:= False;
 Fill.Color:= fMainColor;
 ColorAnimation.Trigger:= 'IsMouseOver=true';
 ColorAnimation.TriggerInverse:= 'IsMouseOver=false';
 end;
end;

procedure TRectangleButton.SetClickedColor(const Value: TAlphaColor);
begin
 if ClickedColor <> Value then begin
 ColorAnimation.StopValue:= Value;
 fClickedColor:= Value;
 end;
end;

procedure TRectangleButton.SetMainColor(const Value: TAlphaColor);
begin
 if MainColor <> Value then begin
 if not Clicked then Fill.Color:= Value
 else Fill.Color:= fClickedColor;
 ColorAnimation.StartValue:= Value;
 fMainColor:= Value;
 end;
end;

procedure TRectangleButton.SetText(const Value: String);
begin
 if TextLabel.Text <> Value then begin
 TextLabel.Text:= Value;
 fText:= Value;
 end;
end;

procedure TRectangleButton.Unselect;
begin
fClicked:= False;
 with ColorAnimation do begin
 Inverse:= True;
 Start;
 Trigger:= 'IsMouseOver=true';
 TriggerInverse:= 'IsMouseOver=false';
 end;
end;

end.

Есть св-во Clicked, и если оно True, то компонент должен создаваться с Fill.Color=ClickedColor, но он создаётся вообще без заливки. Если Clicked=False, то всё нормально и компонент создаётся с Fill.Color=MainColor.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Эммм... а такое свойство у изначального компонента есть? Я пытался повесить триггер на IsPressed самопальной кнопки на базе как раз TRectangle - триггер игнорил это свойство.

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...