VAPS XT入门教程08.02:工具栏
系列索引:VAPS XT入门教程索引
工具栏是VAPS XT编辑器设计过程中最常用的控件。
按照惯例来讲,工具栏不是在软件中间,主要是因为这里的控件太多了。
表元素(TableElements)
此控件位于编辑器的Toolbox中的TableElements。
VAPS XT提供了表元素用于管理内部的资源。将需要使用的资源添加到表中,然后以资源索引的方式使用
表元素是和工程中的Tables
子工程配合使用的
如果没有打开表中的任何一个实际文件,表元素是不可用的。
Pointer
从鼠标图标就可以看出,点击此控件可以回到鼠标状态,也就是说这个控件用来取消选择的。
AudioTableElement
向AudioTable添加音频
EasingFunctionTable
与Toolbox中的Animation相配合
ErrorCodeTableElement
定义错误代码和错误信息,与PostError函数配合使用
FontTableElements
打开FontTable后,会发现FontTableElements表元素可以使用了。
将字体表元素拖拽到字体表中,修改字体名、字体的属性、字体的类型、字体的位置、是否使用系统自带字体等等。
ImageTableElements
打开图片表后,会发现ImageTableElements表元素可以使用。
将图像表元素拖拽到图像表中,可以设置图片的名称、位置、大小、数据格式。
当然这种方法使用的图片会被解码为原始数据。
如果想要动态使用这些图片,可以参考VAPS XT入门教程15.04:动态加载图片。当然动态加载不是所有版本都支持的,目前已经测试过4.0.1/4.1/4.2.1都可以。
LocalizedTextTableElement
类似于Qt的本地化功能
SkinnedRectTableElement
设计带皮肤的四边形,比如圆角、颜色等等
VideoTableElement
这个控件根据版本来说,低版本的不支持视频功能就没有这个控件。
这个控件要求配合视频解码器使用。
计算器(Calculator)
VAPS XT对于常用的操作、算法进行了封装,用户只需要输入输入源就可以获得需要的结果,这一类被称为计算器(Calculators)
其位于默认界面的Toolbox的Calculators下
当然也可以直接在数据流中使用对应的函数。
1输入0输出
- LanguageCfg 设置语言索引,与Table中的LocalizedTextTable配合使用
1输入1输出
abs的定义是
1 |
|
所以它只有一个输入,并且输出不可编辑。
类似的函数还有
- Abs 取正值
- ArcCos 取反余弦值
- ArcSin 取反正弦值
- Ceil 返回大于或者等于指定表达式的最小整数
- Cos 取欲弦值
- Exp e的i次方,i为输入值,
- Floor 向下取整,即取不大于x的最大整数,与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个整数值。
- Log 取e为底的对数
- Log10 取10为底的对数
- NormalizeAngle 将角度作为输入,并输出与输入角度相对应的-180到+180范围内的角度。例如,如果输入角度为270,输出角度将为-90。
- Root 返回给定数字的平方根。
- Sin 取正弦值
- Tan 取正切值
- Trunc 将数字小数点后的数字全部丢掉
1输入4输出
- SystemClock 根据输入频率输出当前日期和时间
2输入1输出
如图,arctan2输入为y/x输出为结果,计算方法为
类似的函数为:
- ArcTan2 取反正切值
- Hyport 求斜边长
- IsBitSet 检查第二个参数指定的位是否在第一个参数指定的数字中设置(即等于1,而不是0)。
- Pow 计算a的b次方,Exp函数就是Pow(e,i)
- Round 返回一个给定双精度值的四舍五入双精度值,并舍入到最接近的舍入值。如果输入值正好是RoundToNearest的两个倍数的中间值,它将被四舍五入到更正值。
4输入0输出
- Counter 跟踪一个整数值,该整数值在逻辑上可以递增或递减。
4输入1输出
- RepeatString 将字符串重复n次作为结果
- RepeatWString 同上
- TruncateString 从左到右截取指定数量的字符串
- TruncateWString
4输入2输出
将两个字符串拼接并输出为一个字符串。需要先设置输入字符串的容量。
如果输入超过两个怎么办,就这样俄罗斯套娃使劲套,将两个拼为一个,并将这一个作为新的输入。
- ConcatStrings 拼接字符串
- ConcatWStrings 拼接字符串
- StringBuilder 用于操作(插入删除)字符串
4输入3输出
- SQLQuery 数据库操作控件
5输入1输出
- CircularInterpolation 将一个输入范围内的值转换为描述圆的完整旋转的输出范围内的等效值。其返回类型为浮点型,其中角度以输出范围表示。
- LinearInterpolation 将一个输入范围内的值转换为输出范围内的等效值。
- SubStr 从字符串1中i位置删除n个字符
- Timer 定时器
5输入2输出
- PointPolar 返回点相对于圆心和半径的位置。
6输入2输出
- PointMid 获取两个点和两个分数(X和Y),并返回PointMid,其X和Y值被线性插值,$PointMid.X = Point1.X + (Point2.X - Point1.X) * FractionX \ PointMid.Y = Point1.Y + (Point2.Y - Point1.Y) * FractionY $
9输入1输出
用于产生模拟数据。
可以在属性中设置起始与终点值、产生频率、更新频率等等。
- FiniteSignalGenerator 指定频率输出指定范围的数据
- FormatDouble 接受一个double值,并通过提供不同的参数将其格式化为特定的字符串。FormatFloat比FormatDouble更高效,并且具有类似的行为。
- FormatFloat
- SignalGenerator
数据对象(DataObjects)
此控件位于编辑器的Toolbox中的DataObjects。
其实就是通过基本数据类型组合为自定义数据类型,将一些常用用的数据格式做了一个内部封装方便使用。
以data结尾的就是某种数据结构的实例化,而以Array结尾的是某种数据结构的数组,使用前要先设置数组的容量和大小,在使用时只能使用数组内数据而不能修改其容量和大小。
调试对象(DebugObjects)
如果在开发是出错了进行排查,或者开发时查看一下开发效果是不是我需要的。这个时候我们需要类似于debug输出的功能。
此控件位于编辑器的Toolbox中的DebugObjects。
DebugConsole
此计算器可以把信息直接输出到Output窗口
DebugStatistics
提供了包含所有可能有价值的信息并提供了接口
VisualDebugStatistics
将DebugStatics的信息套个界面并显示
设备输入(DeviceInput)
VAPS XT提供了两种基本的输入设备支持:鼠标和触屏,只支持主流设备和操作系统。
目前已知Windows、Ubuntu、Ubuntu嵌入式是支持的。VxWorks是不支持非标鼠标输入。
ActiveAreaGroup
是一个组,将捕捉组内的所有窗口的鼠标操作
DiscreteEvtReceiver
接收窗口点击、释放、旋转操作
DiscreteEvtSender
发送窗口捕捉到点击等事件
InputBlocker
屏蔽输入事件一段时间
PolarActiveArea
捕捉圆形范围内的所有鼠标操作
RectActiveArea
鼠标输入需要RectActiveArea
支持
页面边框红色虚线就是鼠标捕获界面,只捕获宏虚线界面以内的鼠标事件。
鼠标左键按下触发evPress
事件
鼠标左键松开触发evRelease
事件
鼠标左键按住移动触发evDrag
事件
TextActiveArea
文字所示范围内处于可编辑状态
地图对象(MapObjects)
此控件位于编辑器的Toolbox中的MapObjects。
MapGroup
MapGroup是一个可以存放MapLayer/MapItem/图片的容器(组)
MapItem
MapItem添加到MapGroup中,可以将地理值转换为屏幕坐标。因此,它可以用来显示MapGroup中的地理参照对象。
MapLayer
MapLayer由地图组显示的指定地图类型(CADRG、GeoTiff、DTED等)。
总结
MapLayer用于显示地图片,MapItem显示目标对象,MapGroup用于管理子控件。
触屏输入(TouchInput)
此控件位于编辑器的Toolbox中的TouchInput。
主要是处理触屏相关操作,因为战斗机之类的设备并没有鼠标这种东西
GestureDrag
此控件必须在RectTouchArea内部
此控件用于捕获RectTouchArea中的拖拽操作,可以通过参数设置拖拽的手指数量(1根手指、5根手指)
GestureHold
此控件必须在RectTouchArea内部
此控件用于捕获RectTouchArea中的停留(比如点击)操作,可以通过参数设置手指数量(1根手指、5根手指)
GestureRotate
此控件必须在RectTouchArea内部
此控件用于捕获RectTouchArea中的旋转操作(手指绕圈),可以通过参数设置手指数量(1根手指、5根手指)
GestureSwipe
此控件必须在RectTouchArea内部
此控件用于捕获RectTouchArea中的左右上下等滑动操作,可以通过参数设置手指数量(1根手指、5根手指)、滑动的触发角度(比如向左滑动就是180度)
GestureTap
此控件必须在RectTouchArea内部
此控件用于捕获RectTouchArea中的点击操作,可以通过参数设置手指数量(1根手指、5根手指)
GestureZoom
此控件必须在RectTouchArea内部
此控件用于捕获RectTouchArea中的缩小放大操作(类似于触屏手机的缩小放大操作),可以通过参数设置手指数量(1根手指、5根手指)
RectTouchArea
触屏输入需要RectTouchArea
支持,它有捕获范围,捕获事件。
GestureTap可以用来捕获触屏点击,GestureDrag可以用来捕获触屏拖拽效果。
可以在属性中设置一次捕获的点数。
TouchVisuallizer
这个就是在RectTouchArea上面套了个壳子,用于调试触屏操作,显式的表示出当前触控的位置。
动画(Animation)
此控件位于编辑器的Toolbox中的Animation。
此控件主要是将控件的各种操作添加动画渐变的效果
不同的控件有不同的动画效果,那么由什么决定呢?由TableElements中的EasingFunctionTable决定
AnimatedTranslateGroup
AnimatedTranslateGroup对象是一个图形组,它基于引用EasingFunction表元素,在一段时间内以动画效果平移(移动)其子对象。
如果您还需要子控件进行缩放,那么动画TranslateScaleGroup是一个更好的选择。AnimatedTranslateGroup是一个内置实现,使用内部AnimationController对象实现(其许多属性、事件和操作直接映射到AnimationController对象)。
创建AnimateTranslateGroup的推荐方法是对其所需的子级使用GroupAs操作。这将导致它有一个在其范围内的起始位置,以及更直观的交互使用和整体行为。向AnimateTranslateGroup添加子对象的推荐方法是将新对象从工具箱拖放到其中,然后编辑新的子对象。
AnimatedTranlateScaleGroup
AnimatedTranslateScaleGroup对象是一个图形组,在一段时间内,基于引用EasingFunction表元素,使用动画效果平移(移动)并缩放其子对象。
如果您只需要子控件移动,而不需要缩放,那么动画TranslateGroup将是一个更好的选择。AnimatedTranslateScaleGroup是使用内部AnimationController对象(其许多属性、事件和操作直接映射到AnimationController对象)实现的内置实现。
创建AnimateTranslateScaleGroup的推荐方法是对所需的子对象使用GroupAs操作。这将导致它有一个在其范围内的起始位置,以及更直观的交互使用和整体行为。向AnimateTranslateScaleGroup添加子对象的推荐方法是将新对象从工具箱拖放到其中,然后编辑新的子对象。
AnimationController
AnimationController对象是一个计算器,可用于生成动画效果。它根据其EasingFunctionIndex属性引用的EasingFunctionTable元素生成其输出属性值,作为时间的函数。这通常在一段时间内呈非线性变化。
AnimationController是一个低级对象,提供对easing Function表中定义的easing函数的基本访问功能。AnimationController可用于构建具有更具体行为、更直观、更可用的动画对象。例如,AnimationController用作AnimatedTranslateGroup和AnimatedTranslateScaleGroup的内置实现中的一个组件,这些实现允许简单的动画运动(和/或缩放)。
可以将AnimationController用于上面这些组尚未涵盖的动画效果。
示例
本部分拆自官方示例AnimationExample
一般拖拽界面时,界面从起点移动到终点,一般是直接移动过去,如果加上缓慢移动的效果就是动画。
但是一般机载不使用动画效果,因为飞机安全性比较高,如果因为这个可有可无的功能导致系统故障就麻烦了。
界面
创建一个名为Animation的根工程
向其中添加一个名为AnimationFmt的Format,作为显示界面
向Format中添加一个ClippingRegion,用于将控件的一部分隐藏起来。
在ClippingRegion中添加一个AnimationTranslateGroup用于实现动画效果。
在动画组件中添加一个Bezel作为背景,添加一个Image作为图标,添加一个Label作为文字显示标签
Bezel大小为(1276,256)
Label大小为(1024,256)
Image位置为(1024,0),即图标在Label右侧
动画控件的起始位置为(-1024,0),终点位置为(0,0),即初始状态标签所在的界面被隐藏到ClippingRegion不可见区域中。
左侧的圆点是动画的起始点,圆点右侧的箭头是动画的移动终点。
EasingFunctionIndex为Linear
可以看到Linear就是线性函数,非常平滑。
事件
此时还不能实现动画效果,因为我们并没有调用动画的动作函数。
我们在Format中添加一个RectActiveArea用于捕获鼠标,当鼠标进入范围时就进行动作,鼠标离开范围时就至初始状态。
1 |
|
初始时只有一个小图标,鼠标进入范围内就是动画显示完整界面。
也可以试试其他EasingFunctions效果。
基本组(BasicGroups)
此控件位于编辑器的Toolbox中的BasicGroups。
AttributesGroup
AttributesGroup可用于将填充和画笔属性设置应用于一组GraphicsPrimitives和/或SVGPrimitives对象。如果组中的对象的FillAttributes和/或PenAttribute设置为inherit,则该组中的对象将继承AttributesGroup设置。
GraphicPrimitives对象没有AttributesGroup定义的所有适用属性。例如,SVGPrimitives具有PenGradient属性,但GraphicsPrimitives没有。
还可以在AttributesGroup对象内使用PenAttributesGroup或FillAttributesGroup来控制一组对象的特定画笔或填充属性。
根据此group的属性界面可以看出这个组控件可以向组内的控件传递颜色、渐变度等等参数。
ClippingRegion
ClippingRegion组定义了一个区域,其对象可以出现在显示中;放置在此区域之外的任何图形对象都不会显示。
可以看到圆的右下角被挡住了看不见
ExtentGroup
ExtentGroup计算新图形的大小,以便它们在使用滚动条时正确移动。ExtentGroup的大小根据其内容而变化。
初始状态,此组内无控件,那么自然就没有大小
添加一个椭圆后
再次添加一个圆后
红框部分就是此组的当前大小和范围
FillAttributesGroup
FillAttributesGroup允许您将某些填充属性设置应用于一组GraphicPrimitives和/或SVGPrimitives对象。如果组中的对象的FillAttributes属性设置为“继承”,则该组中的对象可以由FillAttributesGroup设置控制。
和AttributesGroup相比,FillAttributesGroup可以直接控制子控件
FocusCycleGroup
FocusCycleGroup允许您确定哪个对象在运行时获得焦点。这在构建菜单、弹出菜单、按钮等时非常有用,。。。
InheritanceGroup
InheritanceGroup允许您定义图形对象在显示中可见的状态级别。默认情况下,将图形对象添加到状态时,它在所有状态级别(从顶部状态到最低嵌套状态)的显示中都可见。
在实现中创建一组状态时,放置在这些状态中的任何图形对象都将在所有状态级别可见。
但是,如果需要图形对象仅在特定级别可见,可以创建InheritanceGroup的实例并将图形对象添加到其中。在运行模式下,只有当受影响的状态级别处于活动状态时,图形对象才会出现在显示屏上。
InstanceGroup
编码对象拥有InstanceAllocators子对象的所有权,并在名为Allocators的子部分中显示它们。此外,InstanceAllocator管理的所有实例化对象都显示在名为Instances的子部分中。
在VAPS XT提供的工程示例中,有一个InstanceGroupExample
,介绍如何动态创建页面实例,以及如何动态销毁。
实例
直接编译官方提供的MultiPageExamples就可以了。
默认显示界面占用
PFD界面占用
stores界面占用
engines界面占用
extras界面占用
隐藏
把实例代码改为显示隐藏的代码
默认显示界面占用
PFD界面占用
stores界面占用
engines界面占用
extras界面占用
总结
- 显示隐藏模式必须提供IsVisible功能接口,而实例模式不用
- 显示隐藏模式在运行时所有界面都在绘制,会占用CPU、内存、GPU,而实例模式只有当前显示的实例有
- 可以看到就算是动态实例化,在设计时界面已经有位置在程序中。不允许new操作。
Map2dGroup
Map2dGroup允许您将数字地图放置到显示器中。Map2dGroup定义了相关地图图像将出现的区域,并允许您使用默认显示在中心的interactor将该地图放置在该区域内。
Map2dOverlayGroup
Map2dOverlayGroup允许您将图形图像放置在数字地图中(由Map2dGroup显示)。
使用interactor,您可以选择该图像在地图上叠加的位置,以及调整图像大小和扭曲图像。
MatrixGroup
MatrixGroup由SVG导入器使用,它包含一组复杂的计算,可以重新创建SVG图形布局。
在原始SVG文件中,可以使用矩阵命令复制或转换图形。如果在原始SVG文件中复制了一个对象,则该对象仅作为原始图形的反射而存在。
MutuallyExclusiveGroup
MutuallyExclusiveGroup(相当于VAPS灯光对象)是一个输出对象,最多可以包含65535个子图形对象。每个子对象代表一个不同的状态,该状态可以基于另一个对象的输入值显示(零状态表示没有要显示的对象)。
此组内的控件一次只显示一个,此控件显示后,其他的控件都是不显示状态。
PenAttributesGroup
PenAttributesGroup允许您将特定笔属性设置应用于一组GraphicPrimitives和/或SVGPrimitives对象。如果组中的对象的PenAttributes属性设置为inherit,则该组中的对象可以由PenAttributesGroup设置控制。
可以参考AttributesGroup/FillAttributesGroup
PopUpContext
PopUpContext对象允许您定义一个额外的非窗口弹出上下文,弹出窗口可能会出现在其中。
此组内部的控件可能是弹出窗口
PopUpPart
PopUpPart组允许将弹出功能添加到构建的对象或小部件中。弹出部分中的图形将绘制在所选弹出上下文中其他对象的顶部。
ReorderGroup
ReorderGroup允许在运行时通过调用子对象上的BringToFront()或SendToBack()操作对子对象进行重新排序。
RepeatGroup
在一个界面中重复使用某个组件(比如按钮等),VAPS XT提供了一个RepeatGroup
这个组用于简化开发工作。
当然了,主要是按钮。本文通过此控件实现大批量按钮显示。
1、先准备一个界面
2、向界面中添加RepeatGroup
控件
3、将需要重复的按钮控件添加到RepeatGroup
中,
同时设置一些属性值
4、在界面中添加一个ShortArray
对象,数量为4个,值分别为-80/80/-240/240。它将被用于按钮组中每个按钮的X坐标。
5、在数据流中添加一条数据流,设置重复的次数
1 |
|
.Name是字符串数组,用于在此界面的父界面设置参数
6、设置按钮组中的每个按钮的位置
1 |
|
数据流右侧是按钮组中按钮的位置(x,y)坐标。
先看X坐标,可以看出是循环从IconPosX中获取4个值(只有四个),Y坐标则是新一行向下移动80像素。
那么按钮坐标点为(-80,0)/(80,0)/(-240,0)/(240,0),四个点之后换行(-80,-80)/(80,-80)/(-240,-80)/(240,-80),然后继续。
7、从字符串数组设置按钮名
1 |
|
8、这个数据流和整个工程有关,
1 |
|
将按钮组循环的索引作为按钮所代表的模块索引
9、在父界面点击显示菜单页面,就可以看见正常效果的按钮组
ScaleToFitGroup
ScaleToFitGroup允许您将一组图形对象作为单个单元调整大小。更改该组中对象的比例时,对象不会扭曲:高度和宽度将在调整分组对象的大小时自动调整。
原始图像是正方形,调整此组的长和宽后图并没有变形
SimpleGroup
这个组的主要用途是将组内的所有页面控件整合成一个,这样操作的时候方便一些。比如说,我想隐藏组内的所有页面,只需要把组隐藏就可以了。
没有进行组合前
使用SimpleGroup之后,
红色的点为页面的坐标原点。
StencilGroup
这个组可以将两个控件组合起来实现一个新的控件
墙上开了个洞上了窗户,透过窗户我们可以看到松树和马路,当然松树只是树林的一部分,马路会延伸很远,但是这两个一组合我们就只看见这一小部分。
比如说中间这个姿态仪,可以在前面放个窗,后面放个圆,两个一叠加
TransformGroup
TransformGroup允许您将一组图形对象作为一个单元来调整大小、定位和旋转
基本控件(GraphicPrimitives)
VAPS XT给设计师提供了最基本的控件:圆、椭圆、不规则四边形、直线、文字等。
本文相关的控件在默认界面的Toolbox的GraphicPrimitives中
所有的复杂界面都是由这些控件的分解、组合、设置属性得到的。
属性可以是宽度、背景色、颜色、渐变、文字大小等等。
Arc
封闭圆弧,由三个点来确定,以向右水平线为基准,上方的点可以随意移动,相应的右侧属性栏的SweptAngle也跟着变化。
FillColor可以调整填充颜色,默认为白色。
Center.X/Y设置圆弧表示的圆的圆心
Radius表示圆的边长
Bezier
贝塞尔曲线,此曲线由四个点确定,下方的两个点是左侧是Point1/右侧是Ctrl1,上方左侧是Ctrl2/右侧Point2。
由此确定的两条线确定了一条贝塞尔曲线。
可以通过右侧的坐标准确的绘制曲线
LineStyle确定线型
PenColor确定颜色
Precision确定反采样的精度
Circle
绘制圆,此圆由圆心和边长决定。可以通过属性设置圆心坐标、填充颜色、半径
CornerStyleRect
带圆角的矩形,属性可以定义边长、起始坐标点、边框线型、填充颜色、四个边角的形状
Crown
扇区,和Arc差不多,属性可以设置两个圆的边长、圆心点、起始结束角度、填充颜色等等
Ellipse
绘制椭圆,属性设置y方向的圆半径为RadiusX,X方向为圆半径为RadiusY,椭圆圆心,填充颜色等等
Fillet
效果和带圆角的矩形差不多
Image
之前的文章介绍过ImageElement,那个相当于最基本的数据,这个控件通过图片数据索引来使用数据。
Line
绘制线,属性可以设置起始点的坐标、线型、线颜色
LinearTicks
ticks是滴答,滴答不止一次,此控件会绘制不止一条线。
属性可以设置线条数、起止点坐标、每条线长、填充颜色
LocalizedText
与LocalizedTextTableElement类似,用于本地化控件中的文本
MultiLineText
多行文本,除了能够显示不止一行外其他和TextInput一样
Polygon
不规则多边形,属性可以设置多边形点的数量、每个点的坐标、边框颜色、填充颜色等等
默认是三个点
PolygonRegular
这个和Polygon差不多,不过这个绘制的一定是多边形。属性可以配置边数、中心点、边长、填充颜色
Polyline
多边形线段,和Polygon类似
Rect2Pnt
这是我用的最多的控件
绘制直角矩形,此矩形的位置由对角的两个点确定。
RectWidthHeight
绘制直角矩形,此矩形的位置由左下角的顶点坐标和矩形的宽高值确定。
RotTicks
和linearTicks一样,不过这个程弧度。
SkinnedRect
带皮肤的四边形
StyledText
个性化文本
TextInput
点击此控件时处于可编译状态(比如弹出虚拟键盘)
Text/WideText
文本框,两个文本框的属性都是一样的,不同的是WideText支持非英文字符。如果在Text控件中输入汉字,可以正常输入,都是不会显示在控件上。
VAPS XT主要应用于航空领域,不允许动态创建界面。程序运行时,所有的界面都已经示例化。像我动态的根据已有的界面创建一个新实例,是不允许的。一个程序有10个界面,只显示了4个,那么其余6个就是隐藏了。不会出现程序只有4个界面,运行时创建出其他6个的情况。
SVG控件(SVGPrimitives)
此控件位于编辑器的Toolbox中的SVGPrimitives。
svgArc
SVGArc定义了一个半径和两个角度。
svgCircle
SVG圆基于圆心和半径定义圆。
svgEllipse
svgEllipse基于一个中心点和两个半径定义一个椭圆。
svgLine
svgLine定义了一条从一点开始到另一点结束的线段。
svgPath
svgPath工具允许创建具有独特形状的SVG对象,该形状遵循顶点路径。此外,导入SVG对象时,VAPS XT会使用SVGPrimitives工具箱中的兼容SVG工具重新创建它。
如果导入的图形具有唯一的形状,VAPS XT将使用svgPath工具重新创建该形状。
svgPolygon
svgPolygon定义了一个由一组连接的直线段组成的闭合形状。
svgPolyline
svgPolyline定义了一组连接的直线段。多段线元素定义开放形状。
svgRectangle
svgRectangle定义了一个矩形多边形,其中两个点分别位于左下角和右上角。此基本体不旋转。
总结
可以看到svg图形控件的效果和基本图形控件的效果差不多,至于这两个有什么区别暂时还不知道。
UI组件(UI Components)
此部分控件是VAPS XT官方使用基本控件先设计好的,我们一般是用VAPS XT显示界面,不需要窗口管理这部分。像VxWorks这类的操作系统没有UI控件,可能会用到这部分控件。
此控件位于编辑器的Toolbox中的UI Components。
Bezel
指边框效果。
就是四边对应的四边形效果。
CheckBox
可选中的按钮
未选中状态
可以看到少了点东西,我怎么知道我选中了什么呢?那就得与文字配合了。
具体可以查看官方示例中的FocusExample
ComboBox
下拉列表框,点击此控件会弹出一个下拉列表,可以在一系列选项中选择一个。
可以看到属性中可以设置下拉选项的数量以及每个选项的内容,当然还有对应的选择事件。
下拉列表
DraggableWindow
可以拖拽的窗口
拖拽效果为
并不是窗口的所有部分都能拖拽,只有窗口的标题栏可以拖拽。
Label
用于显示文字,并且无法运行时修改,可以与选择框配合使用。
Menu
菜单控件,只是一个容器,只是表示这个控件是菜单,要配合MenuElement一起使用。
MenuElement
菜单元素,此控件有文字显示和控件事件,单独看起来是黑色文字,容易和背景混淆,和Menu配合就向正常的菜单了。
MultiStateButton
多种状态按钮
比如播放音乐的时候,有播放、暂停、停止、传播等控制方法,就可以使用这种按钮来控制。
PictureButton
PushButton的基础上添加了图片背景效果
PushButton
普通的按钮,但是鼠标点击按下时会有点击的动画效果。
RadioList
带圆点可选中的按钮,但是一组此类的按钮是互斥的,只有一个可以被选中。
三个子按钮只有一个能被选中。
ScrollBarVert
可以上下移动的滑动栏
ScrollList
可以上下调整页面的列表
通过右侧的滑块向下拉显示不可见的部分内容。
可以看出是ComboBox和ScrollBarVert的一个组合。
TabPanel
标签页面板
需要在属性中设置标签页面数量,标签页面名称,然后向每个页面添加不同子控件。
而标签管理可以通过implementation看出来是通过SimpleGroup
输入对象(InputObjects)
此部分控件是VAPS XT官方使用基本控件先设计好的界面,根据开发需要觉得是否使用。
此控件位于编辑器的Toolbox中的InputObjects。
Button
可以看到按钮有两种状态,每种状态都由矩形和文字控件组成。鼠标点击按钮事会切换文字内容。但是VAPS XT中所有程序的鼠标操作不支持连击。
KnobCircular
类似于老式旋转拨电话的效果,使用鼠标旋转白色线条会产生不同的值。
KnobFinite
和KnobCircular类似,只不过本控件只能在指定角度范围内旋转。
Rotor
类似于按钮控件,只有三个状态,旋转白色控件会自动跳转到下一个状态。
SliderHoriz
左右滑动栏
SliderVert
上下滑动栏
Switch
类似于标签切换
总结
可以看到官方提供的控件基本上都是使用最基本的控件,但是它隐藏了逻辑控制部分,比如如何限制旋转角度、如何旋转移动距离。
输出对象(OutputObjects)
此部分控件是VAPS XT官方使用基本控件先设计好的界面,根据开发需要觉得是否使用。
此控件位于编辑器的Toolbox中的OutputObjects。
ADI
简单的地平仪演示控件,根据输入的数据自动旋转画面
BarChartHoriz
水平进度条
BarCharVert
垂直进度条
DialCircular
指示器
DialFinite
有限制范围的指示器
MMAudio
用于播放音频(使用audiotable中的索引)
已废弃
MMVideo
用于播放视频(使用videotable中的索引)
已废弃
OutputField
显示带小数点的数字
Scale
进度指示器
TapeCircular
TapeFinite
和TapeCircular类似,不过数值有限制
技术交流群,欢迎加入讨论。这个圈子很小,大佬可能没兴趣加这些群聊社区之类的。所以只能带你入门,当然,欢迎大佬指导