FireMonkey 界面的玩法

FireMonkey 用来做 APP 的一个特点就是做界面通吃各平台,因为它自己画图。因为自己画图,所以如果 APP 需要一些效果,也可以程序员自己搞定,通过组合各种形状,无需找第三方控件。

先看一个效图图:

第一个图是界面元素,第二个图中的圆圈发光,是因为鼠标点下去(或者手指头触摸)。

这种效果,我摸索了一下,发现用 FireMonkey 完全可以在设计期用现场控件堆出来。

首先说这个圆圈:

1. 放一个 TLayout 作为圆圈的托盘。

2. 在这个 TLayout 上面,放两个 TCircle 圆圈控件。设置其 Align 为 Client,充满这个 TLayout。注意 Layout 的长宽要一样。

2.1. 设置两个圆圈的属性:Fill 属性里面的子项目 Kind 设置为 none,这样圆圈没有填充颜色。

2.2. 圆圈1的 Stroke 属性的子项目 Color 设置为 #FF3592F6,蓝色;Thickness 设置为 6,粗线条,模糊后,就是图中的发光。

2.3. 圆圈2的 Stroke 属性的子项目 Color 设置为 Azure,浅蓝色;Thickness 设置为默认的 1,细线条。也就是图中圆圈的亮线。

3. 拖一个 TBlurEffect 过来,在 Delphi IDE 左边的 Struct 窗口里面,把这个 TBlurEffect 拖到第一个圆圈下面。效果就算第一个圆圈模糊了。在黑色背景上,就是圆圈发光。

3.1. 这时候你看到模糊的发光在线条圆圈的里面。我想要的效果是线条圆圈内外都发光。办法是,设置圆圈2的 Margin 属性,修改其4个值,在设计期,逐渐增大那4个值(Top, Bottom, Left, Right),这个 Align 为 Client 的圆圈会逐渐缩小,缩小到合适的位置,就有了想要的效果。

4. 拖一个 TGlowEffict 过来,在 Struct 窗口里,把它拖到作为容器托盘的 Layout 下面。如果设置它的 Enabled 为 True 则圆圈就显示为图2的效果。设计期设置为 False。

5. 代码:FireMonkey 的每个元素,比如 TCircle 或者 TLayout 都有一个 HitTest 属性,这个属性设置为 True 则它可以响应触摸或者鼠标。因此,对这个圆圈,随便选择一个,比如选择圆圈 2,在属性面板里,切换到 Events ,找到它的 OnMouseDown 事件,鼠标双击,IDE 帮你创建 OnMouseDown 事件的代码框架,在里面填写:GlowEffict1.Enabled := True;  同理,在 OnMouseUp 事件方法里面填写 GlowEffict1.Enabled := False;

6. 黑色背景:我在这里采用深蓝色背景。拖一个 TRectangle 过来,设置它的 Align 属性为 Contant,这样它会充满屏幕,但不会抢容器位置。鼠标右键点击它,在下拉菜单里面选择 Control -- Send to back 把它放到底层去。

7. 在 WINDOWS 底下运行这个程序,可以看到效果。编译为 Android 让它跑到手机上,效果相同。

然后是三角形,视觉效果相同,因此做法相同。但 FireMonkey 木有三角形控件,怎么办?

FireMonkey 有一个控件叫做 TPath,路径控件。它支持 SVG 这样的矢量图数据。

1. 拖一个 Layout 过来作为容器;

2. 拖2个 TPath 过来,放到上述 Layout 容器里面,设置 Align 为 Client;

3. 三角形的实现:Path 控件在 IDE 的属性面板里面,有个 Data 属性,拉开,底下还有个子项目叫 Data,在里面直接填入:M250,150 L150,350 L350,350 Z  这一串字符,Path 就呈现为三角形了。

4. 其它视觉效果,按照上面圆圈的做法,同样做一遍。

5. 上述三角形是朝上的。想要朝下的,用鼠标点击,选中作为容器托盘的 Layout,按 Ctr-C 复制,再按 Ctr-V 粘贴,界面上就再多一个包含了三角形的 Layout,在属性面板里面设置这个 Layout 的 RotationAngle 为 180,它就旋转 180度,三角形朝下了。

然后,是摆位置。我想要的效果是上下两个三角形,中间是圆圈。三个图都位于屏幕水平方向的中间。不管屏幕大小,相对位置都是这样。摆位的方式是依赖 Align 属性。

1. 拖三个 Layout 作为摆位的容器。其 Align 设置为:A. Top;B. VertCenter;C. Bottom;

2. 顶部和底部的 Layout 不想让它贴屏幕的上下边,方法是设置其 Margin 属性的 Top 和 Bottom 值。

3. 把圆圈和三角形的 Layout 托盘,在 IDE 左边的 Struct 窗口里面,拖到对应的摆位容器 Layout 下面。

4. 设置三个图形的托盘 Layout 的 Align 属性为 Center。

这样设置下来,不管屏幕大小,它都能正确显示相对位置。

这样的一个界面,如果把它放进一个 FireMonkey 的 TFrame,就相当于自己组合出了一个通用的控件,需要的地方,拖这个 Frame 过去摆进 Form 就有了,可以重复使用。

搞定。

发布了116 篇原创文章 · 获赞 19 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/pcplayer/article/details/99096830
今日推荐