Slym

Пользователи
  • Публикаций

    20
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Весь контент Slym

  1. Боролись как-то с артефактами отображения (мы их прозвали "крокодилами" из-за сходства на первом скриншоте с этим багом)... Могли отображаться также левые спрайты, или обрезки скролившихся контролов... Коллега выяснил что не надо трогать Form.Fill, из-за переключения в недрах FMX нативной и не нативной канвы: если нужен фон - брось Rect по контенту и в нем делай заливку...
  2. 1. для упрощения кода работы с JSON давно можно использовать сложные пути ABase64:=JSON.GetValue<string>('body.nextStep.pdf'); 2. ну нельзя так: AStreamSource.WriteBuffer(Pointer(ABase64)^, Length(ABase64) * 2); так безопасней AStreamSource:=TBytesStream.Create(TEncoding.UTF8.GetBytes(ABase64)); 3. И сохранять лучше сразу в TFileStream - меньше расход памяти 4. не забываем finally Free (их выше нету)... хоть оно и может AUTOREFCOUNT (а может и нет!), но правила хорошего тона никто не отменял
  3. FStylesData в strict private - имхо никак не клонировать
  4. Проблема в том что есть 2 TScrollContent, один в FMX.Layouts, другой в FMX.ScrollBox... поскольку пользуете TPresentedScrollBox, то разворачивайте неймспейс вручную и пишите if (Parent is FMX.ScrollBox.TScrollContent) then
  5. я на подсознательном уровне понимаю что анимашки вшитые в TButtonStyleTextObject - в моем проекте это лишний CPU и mem... но все встроенные стили активно ими пользуются... и трудно мотивировать что "не как у всех" будет быстрее... тут мне говорили что вырезать из TBitmapLinks чуть ли не быстрее чем менять Fill.Color в ColorAnimation - но я то не дурак, чтоб на слово верить, да и чушь это полная чтоб Bitmap выиграл у Fill.Color попробую тест накидать...
  6. Имеется кнопка, нужен эффект нажатия(Pressed) без анимации, т.е. 2 состояния с разным фоном что быстрее и менее накладно по ресурсам на мобильной платформе - Rectangle+ColorAnimation(IsPressed) или TButtonStyleObject +TBitmapLinks (только фон, без рамок)? тоже касается TButtonStyleTextObject: насколько уместно его применение если цвет не меняется от состояний, и не лучше ли его заменять на статичный TText.
  7. Мда... один я беспокоюсь за производительность кода... еще вброс: то быстрее и менее накладно по ресурсам на мобильной платформе (при условии статичности цвета шрифта, все цвета одинаковы, и без использования Shadow): TButtonStyleTextObject или TLabel / TText
  8. Как реализовать "притягивание" скрола, т.е. скрол останавливается не где угодно, а в определенных местах, например по середине контрола находящегося в середине скрола по типу TScrollBox в стиле 'барабана' из iOS Другими словами чтоб контрол центрировался. Как то добавлять нужный Target в AniCalculations.OnStart или как то дотягивать в AniCalculations.OnStop?
  9. на мобильной платформе отношение к ресурсам строже... когда 1 кнопка - то можно терпеть, а когда десятки то начинаешь задумываться - а не уменьшится потребление памяти если заменить контрол на что-нибудь попроще а не шустрее будет скролитяся если убрать картинки (TBitmapLinks) и делать заливку цветом (Rectangle)
  10. Да пробовал я TextToPath... на андроиде - артефакты... TrueType сглаживается полутонами - как полутон ToPath? никак. с растром та же фигня MaskToAlpha работает с ЧБ изображением, и белый фон тонируется сглаживанием шрифтов и фильтр ColorKeyAlpha в полутонах теряется ЗЫ: все еще в поиске
  11. как стилями/в рантайме создать прозрачную кнопу с градиентным текстом... (будет ) пока смог нарисовать градиентный текст на белом фоне стилем - слой градиента (слой белый (черный текст и MaskToAlphaEffect)) дело осталось за малым - белый фон убрать... но добавление прочих эффектов все портит object TRectangle StyleName = 'bt0Gradient' Align = Center Fill.Color = claNull object TRectangle StyleName = 'Gradient' Align = Contents Fill.Kind = Gradient Fill.Gradient.Points = < item Color = xFFF60404 Offset = 0.000000000000000000 end item Color = xFF1BFE5A Offset = 0.354037255048751800 end item Color = xFFFEF60D Offset = 0.642857134342193700 end item Color = xFF0035FF Offset = 1.000000000000000000 end> Fill.Gradient.StartPosition.Y = 0.500000000000000000 Fill.Gradient.StopPosition.X = 1.000000000000000000 Fill.Gradient.StopPosition.Y = 0.500000000000000000 end object TRectangle StyleName = 'white' Align = Contents Fill.Color = claWhite object TText StyleName = 'text' Align = Contents Text = 'TextTextText' TextSettings.Font.Size = 40.000000000000000000 end object TMaskToAlphaEffect StyleName = 'MaskToAlphaEffect1Style' end end end или как управлять применением фильтров?
  12. Переделал на растр 1. Белый фон черный текст 2. Применил фильтр MaskToAlpha 3. Градиентный фон сверху прозрачная маска из п.2 4. Применил фильтр ColorKeyAlpha, замена белого на прозрачный качество лучше но при наложении на другой фон имеются артефакты белых полутонов по краям
  13. Сделал через TextToPath, Bitmap.Canvas.FillPath(Path,1,TBrushObject(BrushObject).Brush) но артефакты!!! особенно на мелком шрифте
  14. Насколько корректно использование такой конструкции? А именно создание контролов клонированием стиля какие подводные камни имеются? по идее так меньше памяти расходуется... или нет? FmxObject:=FindStyleResource('ScreenFogStyle'); if not (FmxObject is TControl) then exit; MainControl:=TControl(FmxObject.Clone(nil)); MainControl.Align := TAlignLayout.Contents; MainControl.OnClick := OnCancelClick; Form.AddObject(MainControl);
  15. Фреймы - была такая мысль... уже многое (почти все) на фреймах... но хз, надо еще подумать
  16. Иначе: ScrollBox не подходит для работы в стиле... Это не все окно, а некий "сборный" контрол. Вы посмотрите как TEdit сделан и прочие контролы... аналогично - куча TLayout-ов и прочей ГУИстики... так что "не подходит" - не засчитано...
  17. создайте стиль object TLayout StyleName = 'MessageBoxStyle' Align = Center object TRectangle StyleName = 'background' Align = Contents Fill.Color = claWhite end object TLayout StyleName = 'buttons' Align = Bottom object TButton StyleName = 'btOk' Align = Client ModalResult = 1 end end object TPresentedScrollBox StyleName = 'content' Align = Client object TText StyleName = 'text' Align = Client end end end в дереве стиля не увидите text, и StylesData['text.text']:='Hello world!'; - ничего не отобразит... т.к. ScrollBox - "фиктивный" контейнер, реальный контейнер ScrollBox.ContentLayout
  18. Контрол создается в рантайме - и логика подключается тоже... а по поводу легче - мне нужен именно TControl чтоб OnClick был, поэтому перед клонированием проверяется тип... для чего это мутится - это будет 'компонент' модального диалогового окна для мобильных платформ... кодовая база одна для разных приложений, а вот вид должен кастомизироваться стилями... для примера возьмем MessageBox основная сложность - скрол текста если не влезло... в стиле брошенный скрол намертво съедает чаилдов и StylesData не может до них добраться... хотел попробовать в рантайме скрол вставить в Layout 'content', а оно MessageBoxCtrl:=TPanel.Create(MainControl); MessageBoxCtrl.Align := TAlignLayout.Center; MessageBoxCtrl.StyleLookup:='MessageBoxStyle'; MessageBoxCtrl.ApplyStyleLookup Fog.AddObject(MessageBoxCtrl); MessageBoxCtrl.FindStyleResource<TLayout>('content') - nil возвращает, ну не загрузился еще стиль...
  19. 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
  20. На форме лежит 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;