Перейти к содержанию

Поиск сообщества

Показаны результаты для тегов 'FindStyleResource'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Общие вопросы
    • Анимация
    • Графика
    • Стили
    • Базы данных и REST
    • Компоненты
    • Положение, размеры, выравнивание
    • Работа с текстом
    • Приложение и формы
    • Отладка
    • Развертывание приложений
    • Вопросы по языку Object Pascal и RTL
    • Общая информация о TControl
    • События
    • Прочие вопросы
  • Вопросы по платформам
  • Вопросы по использованию RAD Studio
  • Native FGX
  • Обучение
  • Поиск специалистов по FireMonkey
  • Дополнительные ресурсы по FireMonkey
  • Организация работы данного форума
  • Видеокурсы

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Старт

    Конец


Дата обновления

  • Старт

    Конец


Фильтр по количеству...

Регистрация

  • Старт

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


StackOverflow


Защита от ботов


Город


Интересы

Найдено: 7 результатов

  1. ЧАВО: Опишу "багофичу" на которую я наткнулся. Предположим что вы пишете свой компонент, наследуемый от TStyledControl (или любого другого компонента, который происходит от TStyledControl), для доступа к элементам стиля обычно используют FindStyleResource('ИмяРесурса') (есть вариант в виде FindStyleResource<Класс>('ИмяРесурса', Переменная)) , например компонент TImageControl получает Image так: procedure TImageControl.ApplyStyle; begin inherited; if FindStyleResource<TImage>('image', FImage) then UpdateImage; end; И FindStyleResource работает отлично, пока в дереве стиля искомый объект лежит на НЕ TStyledControl-ах, то есть FindStyleResource будет успешно находить объект, который расположен на TRectangle, но не найдет его же, но на TPanel! Пример: Код, в процедуре ApplyStyle: procedure TEsImageSelection.ApplyStyle; var T: TControl; begin inherited ApplyStyle; if FindStyleResource<TControl>('selection', T) then ShowMessage('"selection" founded!'); end; Что делает данный код? - При нахождении стилевого объекта выдает соответствующее сообщение. Рассмотрим стиль: Как видите в варианте A, "Selection" лежит на НЕ наследнике TStyledControl. Запустив программу можно убедиться что FindStyleResource<TControl>('selection', T) найдет объект "Selection". В варианте B, при запуске можно с удивлением обнаружить что FindStyleResource<TControl>('selection', T) не находит объект "Selection"! Почему так? Судя по исходникам поиск во вложенных TStyledControl-ах сломан специально, дабы не всплывали еще большие глюки\проблемы.(но я не изучал вопрос очень подробно, во внутренний код работы с загрузкой и поиском стилей - кромешный ад, с наслаиванием истории Fire-Monkey разных лет). Как можно обойти проблему? Я нашел следующее решение: (Однако я совершенно не уверен в отсутствии побочных эффектов, возможно @Brovin Yaroslav сможет прокомментировать его?) Данный код находит искомый стилевой объект, в отличии от FindStyleResource. procedure TEsImageSelection.ApplyStyle; var T: TControl; begin inherited ApplyStyle; T := nil; EnumObjects( function (Obj: TFmxObject): TEnumProcResult begin if Obj.StyleName.ToLower = 'selection' then begin T := TControl(Obj); Result := TEnumProcResult.Stop; end else Result := TEnumProcResult.Continue; end); if T <> nil then ShowMessage('"selection" founded!'); end; Процедура-замена FindStyleResource, работает как ожидается: type TOpenStyledControl = class(TStyledControl); function EsFindStyleResource(Self: TStyledControl; StyleName: string): TFmxObject; var StyleObject: TFmxObject; begin // если Self.ChildrenCount < 1 то в компоненте не загружен стиль, // т.к. известно что главный эллемент стиля ВСЕГДА находиться по нулевому индексу. if (TOpenStyledControl(Self).ResourceLink = nil) or (Self.ChildrenCount < 1) then Exit(nil); StyleObject := nil; Self.Children[0].EnumObjects( function (Obj: TFmxObject): TEnumProcResult begin if Obj.StyleName.ToLower = StyleName.ToLower then begin Result := TEnumProcResult.Stop; StyleObject := Obj; end else Result := TEnumProcResult.Continue; end); Result := StyleObject; end;
  2. Не нашел ответа на форуме. не могу понять почему FindStyleResource не возвращает объекта. procedure TMainForm.Button1Click(Sender: TObject); var item : TListBoxItem; lbName:TLabel; begin Item := TListBoxItem.Create(Self); Item.Parent := ListBox; Item.StyleLookup := 'lyItemBoxDetail'; lbName := Self.FindStyleResource('lbname') as TLabel; // Здесь получаю nil ShowMessage( Item.StylesData['lbname.Text'].AsString) // А этот код работает end;
  3. Создал компонент: type TTube = class(TFmxObject) private FTheColor: TAlphaColor; public constructor Create(AOwner: TComponent); override; published property TheColor: TAlphaColor read FTheColor write FTheColor; end; constructor TTube.Create(AOwner: TComponent); begin inherited; FTheColor := $FFFFFFFF; end; Вставил его в StyleBook. object TTube StyleName = 'tube1' TheColor = claViolet end Ищу его в стилизованном контроле: var tube: TTube; begin tube := ATarget.FindStyleResource('tube1') as TTube; Не находится компонент. Стандартные Text, Rectangle... находятся таким способом, а свой - нет. Что я делаю не так?
  4. Подскажите где можно найти структуру StyleLookup для объектов, чтобы можно было использовать в FindStyleResource? Например CheckBox checkboxunchecked checkboxchecked checkmark ... TGrid header focus selection ...
  5. Почему метод FindStyleResource в OnCreate и OnShow формы возвращает nil, а после запуска программы (в Button1.OnClick) возвращает указатель на объект? Как получить доступ к объекту стиля в момент запуска программы?
  6. Редактирую стиль, добавляю к нему компонент TImage и для свойства RotateAngle создаю FloatAnimation (параметры анимации на скрине). Но при запуске никакой анимации нет. Почему? И как все же добиться работоспособности анимации для элемента стиля?
  7. Для примера: Есть объект ListBoxItem. В StyleBook загружен стиль по умолчанию. Для итема лист бокса задан стандартный стиль: ListBoxItem.Stylename = "listboxitemlabel" Если заглянуть в StyleBook, то мы увидим что "listboxitemlabel" это TLayout. Каким образом можно изменить/получить свойства этого объекта, к примеру текущую его высоту для нашего ListBoxItem?
×
×
  • Создать...