• 0
Slym

StyleBook доступ к стилям до их применения в Android

Вопрос

На форме лежит StyleBook со стилем MyButtonStyle и кнопка которой этот стиль применяется.

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

 

procedure TForm1.Button2Click(Sender: TObject);
begin
  StyleBook1.GetStyle(nil).FindStyleResource('XXX');//<F0.ChildrenCount - таки после этого один стиль находится и угадайте его имя :)
  FormShow(nil);
end;

procedure TForm1.FormShow(Sender: TObject);
var
  F0,f1:TFmxObject;
begin
  Memo1.Lines.Clear;
  Memo1.Lines.Add('Lets go!');
  F0:=StyleBook1.GetStyle(nil);
  if F0.ChildrenCount=0 then exit;//<F0.ChildrenCount - таки равен нулю
  for f1 IN F0.Children do
    Memo1.Lines.Add(f1.StyleName);
end;

Это наблюдается под андроид, на винде работает как ожидается

такое впечатление что под андроид экономятся ресурсы и стили парсятся по мере обращения

типа как тут:

но ответ не подходит, т.к. не известно какие контролы будут, и привязывать каждому контролу OnApplyStyleLookup тоже не вариант

даже если ловить OnApplyStyleLookup всеравно StyleBook пустой.... действует только FindStyleResource

procedure TForm1.Button1ApplyStyleLookup(Sender: TObject);
begin
  FormShow(nil);
end;

 

Изменено пользователем Slym

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


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

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

  • 0
procedure TForm1.MyApplyStyleLookup(Sender: TObject);
var Style:TFmxObject;
begin
  Style:=StyleBook1.Style.FindStyleResource(TStyledControl(Sender).StyleLookup);
  if Style is TText then
  begin
    TText(Style).textSettings.Font.Size:=TText(Style).textSettings.Font.Size+10;
    if Style.Tag=-1 then exit;
    Style.Tag:=-1;
    TStyledControl(Sender).NeedStyleLookup;
    TStyledControl(Sender).ApplyStyleLookup;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
var i:integer;
begin
  for i:=0 to ComponentCount-1 do
  begin
   if Components[i] is TStyledControl then
   with TStyledControl(Components[i]) do
   begin
     OnApplyStyleLookup:=MyApplyStyleLookup;
     NeedStyleLookup;
     ApplyStyleLookup;
   end;
  end;
end;

Вот такая вот "партянка" получается... тройной, мать его, лукап стиля: До FormShow, вовремя FormShow и после OnApplyStyleLookup

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу