- 0
Кнопка с тенью и стилизованным Disabled
-
Похожий контент
-
- 0 ответов
- 1 209 просмотров
-
- 2 ответа
- 2 629 просмотров
-
- 1 ответ
- 1 542 просмотра
-
TTabControl [TTabControl] Не корректно работают якоря akRight для компонентов в TTabControl?
От Ufomaster,
- 2 ответа
- 1 759 просмотров
-
- 1 ответ
- 2 863 просмотра
-
TButton [TButton] Как сделать всплывающую панель-подсказку для кнопки и показать ее при наведении курсора мыши?
От Валерий М.,
- TSpeedButton
- Hint
- (и ещё 1 )
- 3 ответа
- 2 593 просмотра
-
- 2 ответа
- 2 607 просмотров
-
- 1 ответ
- 3 758 просмотров
-
- 2 ответа
- 2 560 просмотров
-
- 9 ответов
- 2 346 просмотров
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
ddr 2
Добрый день!
Требуется кнопка с стилизованым Disabled. Пошел по пути подмены Стиля. И раз уж все равно решается это только через наследование TButton, то хочется сразу интегрировать в компонент ТЕНЬ. Сделал. Код ниже. Работает, но есть вопросы и моя реализация с тенью явно требует изменений.
Вопрос 1(ОСНОВНОЙ).
При каждом открытии проекта, к каждой кнопке TButtonWithShadow добавляется новая(ещё одна) тень(см. картинку). Как от этого избаваться?
Вопрос 2. Выбор подменяемого Стиля я реализовал через published property StyledDisabled:String read FStyledDisabled write FStyledDisabled; При этом в Дизайнере данное свойство - строка. Как сделать не строку, а выпадающий список по аналогии с StyleLookup?
Вопрос 3. Опытным путем(и немного чтением этого форума) выяснил, что для того, что бы Стили отображались в StyleLookup необходимо, что бы стили имели имя по маске "ButtonWithShadow*".Возможно ли влиять(изменить) на маску?
Вопрос 4. Текущая реализация запоминания(FFStyledEnabled:=StyleLookup;) основного стиля кнопки(для обратной подмены) в procedure TButtonWithShadow.EnabledChanged; при каждом изменении значения с ИСТИНЫ на ЛОЖЬ свойства Enabled, совсем не изящное. Однократное сохранения значения свойств я ранее делал, в AfterConstruction, но с StyleLookup такой подход не работает.
Вопрос 5. В моей задаче кпопка "безфокусная". Соответсвенно и статус Focused в основном Стиле не используется. Возможно ли Disabled реализовать через подмену Focused<->Normal в основном используемом Стиле?
unit UButtonWithShadow; interface uses FMX.StdCtrls,System.Classes,FMX.Effects,System.UITypes,FMX.Types; type TButtonWithShadow = class(TButton) private protected FShadow:TShadowEffect; FStyledDisabled:String; FFStyledEnabled:String; procedure EnabledChanged; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure AfterConstruction; override; published property StyledDisabled:String read FStyledDisabled write FStyledDisabled; end; procedure Register; implementation procedure Register; begin RegisterComponents('Мои компоненты', [TButtonWithShadow]); end; constructor TButtonWithShadow.Create(AOwner: TComponent); Begin inherited; DisabledOpacity := 1; //отключаем прозрачность для enabled=false TextSettings.Font.Family:='Roboto'; TextSettings.Font.Size:=36.0; TextSettings.Font.Style:=[TFontStyle.fsBold]; StyledSettings:=[TStyledSetting.Style,TStyledSetting.FontColor]; FShadow:= TShadowEffect.Create(self{nil}); FShadow.Direction:=45; FShadow.Distance:=5; FShadow.Softness:=0.2; FShadow.ShadowColor:=TAlphaColorRec.Dimgray; FShadow.Trigger:='IsPressed=false'; FShadow.Parent := Self; //AddObject(FShadow); End; destructor TButtonWithShadow.Destroy; Begin //RemoveObject(FShadow); FShadow.Free; inherited; End; procedure TButtonWithShadow.AfterConstruction; Begin // NeedStyleLookup; // ApplyStyleLookup; FFStyledEnabled:=StyleLookup; //Пустая строка. inherited; End; procedure TButtonWithShadow.EnabledChanged; Begin if Enabled then StyleLookup:=FFStyledEnabled else if FMX.Types.FindStyleResource(FStyledDisabled)<>nil then Begin FFStyledEnabled:=StyleLookup; StyleLookup:=FStyledDisabled; End; End; end.
Ссылка на комментарий
2 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.