脚本宝典收集整理的这篇文章主要介绍了How to works the "Styles" and how create it in coding on FMX projects? by Emailx45,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
盒子上的朋友Emailx45,发表这篇文章,用代码建立FMX的Styles并如何使用。原文是英文发表的,我大致译过来:
场景:
-- RAD Studio 11.1 Alexandria-- FireMonkey 32x/64x
-- 思考……
——思考……
如何使用“Styles”以及如何在 FMX 项目中通过代码来创建它?
当然,我不是“创造者”,那样的话,我没有所有的细节......
应用程序(项目)的默认样式将驻留在“应用程序”对象中,并将保存在项目的资源文件中。
RAD Studio 对于FireMonkey 框架,在其内部定义中包含了已知的至少 3 种样式的所有基本定义,即:Win styles, Next Style and iOS Style.
所以“它”不会显示在您的表单或项目中的其他任何地方......(当然,如果您有一个“BookStyle”组件,您可以看到从您选择的样式文件加载的定义)。
现在是最有趣的部分:文件中保存的样式实际上是与表单资源文件(*.FMX)相同或非常相似的资源文件(*.Style)。
因此,这些文件中包含的资源在项目打开(显示在 IDE 中)和/或编译(在软件运行时使用)时被解释。
因此,您可以在 FireMonkey 中手动编辑“*.Style”文件。
另一方面,使用样式的 VCL 项目有另一种使用此类资源的方式。因此,这两个框架及其资源文件之间没有兼容性。
在这篇简短的论文之后,让我们开始通过代码编写我们自己的Styles。
这一切都从创建一个“container”开始,以容纳新Style使用的所有元素。
对于 FireMonkey,最好的类是“TLayout”,原因很明显:它不会出现在屏幕上(透明),它可以在项目中大量使用,它可以容纳其他容器(视觉与否)等...
“TLayout”广泛用于在 FireMonkey 中创建Style。
在StyleBook对象的样式编辑器中,您会发现“TLayout”对象容纳了样式定义中的其他对象。
现在,了解了这么多,是可以按照自己的意愿创建自己的Style的时候了。
注意:有些样式以“二进制”方式存储在文件中,但是通过适合此任务的函数以相同的方式读取。
祝你好运。
以下是具体的代码:
VAR ViewFormMain: TViewFormMain; implementation {$R *.fmx} var MyStyleLayout : TLayout; MyStyleLayoutSurface : TRectangle; MyStyleLayoutSurfaceAnim : TRectAnimation; MyStyleLayoutSurfaceColorAnim: TColorAnimation; MyStyleLayoutGlyph : TImage; MyStyleLayoutGlyphFloatAnim : TFloatAnimation; MyStyleLayoutText : TText; MyStyleLayoutTextColorAnim : TColorAnimation; MyStyleLayoutInvertColors : TInvertEffect; MyNewStyleCreated : boolean = false; function MyCreateMyNewStyle: boolean; const MyStyleLayoutSurfaceColor: TAlphaColor = TAlphaColorRec.Blue; MyStyleLayoutSurfacestrokeColor: TAlphaColor = TAlphaColorRec.red; // MyStyleLayoutSurfaceColorAnim: TAlphaColor = TAlphaColorRec.Yellow; MyStyleLayoutTextTextSettingsFontColor: TAlphaColor = TAlphaColorRec.Yellow; MyStyleLayoutTextTextSettingsFontColorAnim: TAlphaColor = TAlphaColorRec.Blue; begin result := false; // // if MyStyleLayout=nil then create..., if MyStyleLayoutSurface=nil then create..., etc...... // // I'm not taking care about exception ok!!! >:))) // MyStyleLayout := TLayout.Create(ViewFormMain); MyStyleLayout.Name := 'MyStyleLayout'; MyStyleLayout.StyleName := 'mystylelayoutname'; // MyStyleLayout.Parent := ViewFormMain; // MyStyleLayoutSurface := TRectangle.Create(ViewFormMain); MyStyleLayoutSurface.Name := 'MyStyleLayoutSurface'; MyStyleLayoutSurface.StyleName := 'background'; // dont translate MyStyleLayoutSurface.Align := TAlignLayout.Client; MyStyleLayoutSurface.CornerTyPE := TCornerType.InnerLine; MyStyleLayoutSurface.Fill.Color := MyStyleLayoutSurfaceColor; MyStyleLayoutSurface.HITtest := false; MyStyleLayoutSurface.Stroke.Color := MyStyleLayoutSurfaceStrokeColor; MyStyleLayoutSurface.Stroke.Thickness := 5.0; MyStyleLayoutSurface.XRadius := 50.0; MyStyleLayoutSurface.YRadius := 50.0; MyStyleLayoutSurface.Parent := MyStyleLayout; // MyStyleLayoutSurfaceAnim := TRectAnimation.Create(ViewFormMain); MyStyleLayoutSurfaceAnim.Name := 'MyStyleLayoutSurfaceAnim'; MyStyleLayoutSurfaceAnim.Duration := 0.2; MyStyleLayoutSurfaceAnim.PRopertyName := 'Margins'; MyStyleLayoutSurfaceAnim.Stopvalue.Left := 10.0; MyStyleLayoutSurfaceAnim.StopValue.Top := 10.0; MyStyleLayoutSurfaceAnim.StopValue.Right := 10.0; MyStyleLayoutSurfaceAnim.StopValue.Bottom := 10.0; MyStyleLayoutSurfaceAnim.Trigger := 'IsMouseOver=true'; MyStyleLayoutSurfaceAnim.TriggerInverse := 'IsMouseOver=false'; MyStyleLayoutSurfaceAnim.Parent := MyStyleLayoutSurface; // MyStyleLayoutInvertColors := TInvertEffect.Create(ViewFormMain); MyStyleLayoutInvertColors.Name := 'MyStyleLayoutInvertColors'; MyStyleLayoutInvertColors.Enabled := false; MyStyleLayoutInvertColors.Trigger := 'IsMouseOver=true'; MyStyleLayoutInvertColors.Parent := MyStyleLayoutSurface; // (* MyStyleLayoutSurfaceColorAnim := TColorAnimation.Create(ViewFormMain); MyStyleLayoutSurfaceColorAnim.Name := 'MyStyleLayoutSurfaceColorAnim'; MyStyleLayoutSurfaceColorAnim.Duration := 0.2; MyStyleLayoutSurfaceColorAnim.PropertyName := 'Fill.Color'; MyStyleLayoutSurfaceColorAnim.StartValue := MyStyleLayoutSurfaceColor; MyStyleLayoutSurfaceColorAnim.StopValue := MyStyleLayoutSurfaceColorAnim; MyStyleLayoutSurfaceColorAnim.Trigger := 'IsMouseOver=true'; MyStyleLayoutSurfaceColorAnim.TriggerInverse := 'IsMouseOver=false'; MyStyleLayoutSurfaceColorAnim.Parent := MyStyleLayoutSurface; *) // MyStyleLayoutText := TText.Create(ViewFormMain); MyStyleLayoutText.Name := 'MyStyleLayoutText'; MyStyleLayoutText.StyleName := 'text'; // dont translate MyStyleLayoutText.Align := TAlignLayout.center; MyStyleLayoutText.AutoSize := true; MyStyleLayoutText.HitTest := false; MyStyleLayoutText.Text := 'Text'; MyStyleLayoutText.TextSettings.FontColor := MyStyleLayoutTextTextSettingsFontColor; MyStyleLayoutText.Parent := MyStyleLayoutSurface; // (* MyStyleLayoutTextColorAnim := TColorAnimation.Create(ViewFormMain); MyStyleLayoutTextColorAnim.Name := 'MyStyleLayoutTextColorAnim'; MyStyleLayoutTextColorAnim.Duration := 0.2; MyStyleLayoutTextColorAnim.PropertyName := 'TextSettings.FontColor'; MyStyleLayoutTextColorAnim.StartValue := MyStyleLayoutTextTextSettingsFontColor; MyStyleLayoutTextColorAnim.StopValue := MyStyleLayoutTextTextSettingsFontColorAnim; MyStyleLayoutTextColorAnim.Trigger := 'IsMouseOver=true'; MyStyleLayoutTextColorAnim.TriggerInverse := 'IsMouseOver=false'; MyStyleLayoutTextColorAnim.Parent := MyStyleLayoutText; *) // MyStyleLayoutGlyph := TImage.Create(ViewFormMain); MyStyleLayoutGlyph.Name := 'MyStyleLayoutGlyph'; MyStyleLayoutGlyph.HitTest := false; MyStyleLayoutGlyph.StyleName := 'glyphstyle'; // dont translate MyStyleLayoutGlyph.MultiResBitmap.Height := 32; MyStyleLayoutGlyph.MultiResBitmap.Width := 32; MyStyleLayoutGlyph.RotationAngle := -45.0; MyStyleLayoutGlyph.MultiResBitmap.Add.Bitmap.LoadFromFile('D:RADRIOTests_Images_For_TImageList_and_Othersarrow_right-up.png'); MyStyleLayoutGlyph.Parent := MyStyleLayout; // MyStyleLayoutGlyphFloatAnim := TFloatAnimation.Create(ViewFormMain); MyStyleLayoutGlyphFloatAnim.Name := 'MyStyleLayoutGlyphFloatAnim'; MyStyleLayoutGlyphFloatAnim.Duration := 0.2; MyStyleLayoutGlyphFloatAnim.PropertyName := 'RotationAngle'; MyStyleLayoutGlyphFloatAnim.StartValue := -45.0; MyStyleLayoutGlyphFloatAnim.StopValue := 45.0; MyStyleLayoutGlyphFloatAnim.Trigger := 'IsMouseOver=true'; MyStyleLayoutGlyphFloatAnim.TriggerInverse := 'IsMouseOver=false'; MyStyleLayoutGlyphFloatAnim.Parent := MyStyleLayoutGlyph; // result := true; end; procedure MyDestroyMyStyleToButtons; begin // FreeAndNil(MyStyleLayoutGlyphFloatAnim); // FreeAndNil(MyStyleLayoutText); // FreeAndNil(MyStyleLayoutGlyph); // FreeAndNil(MyStyleLayoutSurfaceAnim); // FreeAndNil(MyStyleLayoutSurface); // FreeAndNil(MyStyleLayout); // delete all "owned"... end; procedure TViewFormMain.BTn_Creating_My_Crazy_StyleClick(Sender: TObject); begin RadioButton3.Text := 'MyStyleLayout not created or destroyed...'; // if (Self.Findcomponent('MyStyleLayout') = nil) then begin MyNewStyleCreated := MyCreateMyNewStyle; // if MyNewStyleCreated then begin RadioButton3.Text := 'MyStyleLayout already created'; // RadioButton1.OnClick(Self); RadioButton1.IsChecked := true; end else RadioButton3.Text := 'MyStyleLayout was not created'; end else begin FreeAndNil(MyStyleLayout); // delete all "owned"... // RadioButton2.OnClick(Self); RadioButton2.IsChecked := true; end; end; procedure TViewFormMain.Button2Click(Sender: TObject); begin // if not(Self.FindStyleResource('styletomybuttons', false) = nil) then ... if "Parent = Self {form1}" but this way it will appears on form. // if MyNewStyleCreated { or not(Self.FindComponent('MyStyleLayout') = nil) } then ShowMessage('MyStyleLayout was created') else ShowMessage('MyStyleLayout was not created'); end; procedure TViewFormMain.RadioButton1Click(Sender: TObject); begin if MyNewStyleCreated then begin Button2.StyleLookup := 'mystylelayoutname'; SpeedButton1.StyleLookup := 'mystylelayoutname'; RadioButton1.StyleLookup := 'mystylelayoutname'; Memo1.StyleLookup := 'mystylelayoutname'; end else begin Button2.StyleLookup := ''; SpeedButton1.StyleLookup := ''; RadioButton1.StyleLookup := ''; Memo1.StyleLookup := ''; end; end; procedure TViewFormMain.RadioButton2Click(Sender: TObject); begin Button2.StyleLookup := ''; SpeedButton1.StyleLookup := ''; RadioButton1.StyleLookup := ''; Memo1.StyleLookup := ''; end; initialization ReportMemoryLeaksOnShutdown := true; finalization end.
代码执行的效果:
原文地址:http://BBS.2ccc.COM/topic.asp?topicid=628182
向Emailx45再一次感谢!感谢他无私的分享!
以上是脚本宝典为你收集整理的How to works the "Styles" and how create it in coding on FMX projects? by Emailx45全部内容,希望文章能够帮你解决How to works the "Styles" and how create it in coding on FMX projects? by Emailx45所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。