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

Автоматизация работы со стилями


x11

Вопрос

Посмотрел это видео

 

https://youtu.be/iM9lamNwmtc?t=20m51s

 

Там же просто копипастинг. Чтобы подключить ещё 2-5-10 стилей, нужно заниматься копипастой. Именовать/переименовывать.

Разве так можно?

А нельзя как-то автоматизировать процесс добавления стилей в список, где их может выбирать пользователь в процессе работы?

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

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

  • 0

Вы бы рассказали что там происходит в ролике, а то не у всех есть лишние 40 минут.

Offtop 

Есть один отличный прием, о котором мало кто знает.

Если вам нужно поработать со стилем от моб. платформы на Windows (так гораздо быстрее программировать и отлаживать GUI) - можно просто открыть в текстовом редакторе style файл, найти в нем строку platform и заменить ее с напр. ANDROID на MSWINDOWS, сохранить, а затем загрузить в текущий Default стиль.

 

 

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0

Я специально поставил на нужной отметке.

Там автор видео добавляет в ресурсы проекта (Project/Resources and images) файлы *.style. Потом вместо цикла по стилям добавляет в Combobox новые строки/объекты копипастом.

Я уже посмотрел пару таких примеров с копипастом.

Но подозреваю, что можно как-то циклом получить стили в runtime, чтобы добавить их в combobox. И это было бы правильно.

 

Вот пример:

procedure TfmSelectStyle.FormCreate(Sender: TObject);
  Function NewItem(const aText: string): TListBoxItem;
  begin
    Result := TListBoxItem.Create(comboStyles);
    Result.Parent := comboStyles;
    Result.Text := aText;
  end;

begin

  comboStyles.AddObject(NewItem('Default'));
  comboStyles.AddObject(NewItem('Copper'));
  comboStyles.AddObject(NewItem('CopperDark'));
  comboStyles.AddObject(NewItem('CoralCrystal'));
  comboStyles.AddObject(NewItem('CoralDark'));
  comboStyles.AddObject(NewItem('Diamond'));
  comboStyles.AddObject(NewItem('EmeraldCrystal'));
  comboStyles.AddObject(NewItem('EmeraldDark'));
  comboStyles.AddObject(NewItem('Jet'));
  comboStyles.AddObject(NewItem('Radiant'));
  comboStyles.AddObject(NewItem('Sterling'));
  comboStyles.AddObject(NewItem('Vapor'));

end;

 

Так выбираем

procedure TfmSelectStyle.comboStylesChange(Sender: TObject);
 var
  aTos: String;
  aStyle: TFMXObject;

 const
   ToStr: Array[TOSVersion.TPlatform] of string = ('Windows', 'MacOS', 'iOS', 'Android', 'WinRT', 'Linux');
begin
   aStyle := nil;

   //если выбираем из ресурсов
   if comboStyles.ItemIndex > 0 then
   begin

     aTos   := ToStr[TOSVersion.Platform] + comboStyles.Selected.Text;
     aStyle := TStyleStreaming.LoadFromResource(HInstance, aTos, RT_RCDATA);

     if not assigned(aStyle) then
     begin
       ShowMessage('Стиль не найден: ' + aTos);
       exit;
     end;
   end;// if comboStyles.ItemIndex > 0 then

   TStyleManager.SetStyle(aStyle);
end;

 

Вот так загружены в проект стили

 

11cf24e265f54b5498a3a5901d932d20.png

Изменено пользователем x11
Ссылка на комментарий
  • 0

А вам что нужно сделать? Я так понимаю вам нужно сделать список скинов?

В коде я вижу что загружают style файлы. Понятно что нет смысла хардкодить их имена, можно положить их в спец. папку и затем просто  собирать список файлов *.style  и загружать нужный . А вот чтобы их туда поместить, - под Windows это делается просто, просто помещаете в отдельную папку, а под Android придется добавлять эти файлы в APK в Deploy, они потом при установке APK будут скопированы  автоматом. https://community.embarcadero.com/article/articles-tutorials/151-ui/927-deploying-and-accessing-local-files-on-ios-and-android

 

Добавлять файлы в SQLite - не надо. Это лишнее процессорное время, ведь все равно придется формировать файл или TStream. А если вы имеете ввиду удаленную базу, то что мешает вам загружать эти файлы напрямую GET запросом, притом каждый лучше запаковать в ZIP - они же текстовые и раза в 3 будут меньше.

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0

Под винду так, под андроид эдак, под др. ось ещё как-то перетак.

А хотелось бы, чтобы было одинаково везде.

Пока вижу все это хранить в базе. Даже не в ресурсах приложения.

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

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

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

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

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

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

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

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

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

×
×
  • Создать...