• 0
patrikey

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

Вопросы

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

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 ответ на этот вопрос

  • 0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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