Slym
Пользователи-
Постов
186 -
Зарегистрирован
-
Посещение
-
Победитель дней
40
Весь контент Slym
-
Переделал на растр 1. Белый фон черный текст 2. Применил фильтр MaskToAlpha 3. Градиентный фон сверху прозрачная маска из п.2 4. Применил фильтр ColorKeyAlpha, замена белого на прозрачный качество лучше но при наложении на другой фон имеются артефакты белых полутонов по краям
-
Сделал через TextToPath, Bitmap.Canvas.FillPath(Path,1,TBrushObject(BrushObject).Brush) но артефакты!!! особенно на мелком шрифте
-
как стилями/в рантайме создать прозрачную кнопу с градиентным текстом... (будет ) пока смог нарисовать градиентный текст на белом фоне стилем - слой градиента (слой белый (черный текст и 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 или как управлять применением фильтров?
-
Фреймы - была такая мысль... уже многое (почти все) на фреймах... но хз, надо еще подумать
-
Иначе: ScrollBox не подходит для работы в стиле... Это не все окно, а некий "сборный" контрол. Вы посмотрите как TEdit сделан и прочие контролы... аналогично - куча TLayout-ов и прочей ГУИстики... так что "не подходит" - не засчитано...
-
создайте стиль 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
-
Контрол создается в рантайме - и логика подключается тоже... а по поводу легче - мне нужен именно 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 возвращает, ну не загрузился еще стиль...
-
Насколько корректно использование такой конструкции? А именно создание контролов клонированием стиля какие подводные камни имеются? по идее так меньше памяти расходуется... или нет? 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);
-
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
-
На форме лежит 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;