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

Slym

Пользователи
  • Постов

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

  • Посещение

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

    40

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

  1. как стилями/в рантайме создать прозрачную кнопу с градиентным текстом... (будет ) пока смог нарисовать градиентный текст на белом фоне стилем - слой градиента (слой белый (черный текст и 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 или как управлять применением фильтров?
  2. Фреймы - была такая мысль... уже многое (почти все) на фреймах... но хз, надо еще подумать
  3. Иначе: ScrollBox не подходит для работы в стиле... Это не все окно, а некий "сборный" контрол. Вы посмотрите как TEdit сделан и прочие контролы... аналогично - куча TLayout-ов и прочей ГУИстики... так что "не подходит" - не засчитано...
  4. создайте стиль 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
  5. Контрол создается в рантайме - и логика подключается тоже... а по поводу легче - мне нужен именно 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 возвращает, ну не загрузился еще стиль...
  6. Насколько корректно использование такой конструкции? А именно создание контролов клонированием стиля какие подводные камни имеются? по идее так меньше памяти расходуется... или нет? 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);
  7. 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
  8. На форме лежит 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;
×
×
  • Создать...