在本文中,我将研究创建开发绑定到另一个图形元素的图形控件的功能。 假设我们有面板控件。 元素本身只是一个能够存储其它控件的容器。 当移动面板时,绑定到面板的所有控制对象也会随之移动。 面板是可把 GUI 元素分组在一起的基准对象。 由于终端没有可视化 GUI 构造函数,因此构造这些元素的任务只能分配给程序员。 该函数库则能够轻松开发此类 GUI 元素,因为我们只需指定所需图形元素的创建顺序即可将其置于面板内。 此外,还可以通过编程方式创建元素,并将其添加到面板中。
在本文中,我将继续开发所需的方法,因为我已经有了在另一个元素中创建元素的方法工件。 这些方法允许我们直接从面板创建一个新的绑定图形元素,并将其作为 GUI 程序的独立部分进行处理。 反过来,创建并附着到面板的每个此类图元,也可以在其自身内创建其它图元。 拥有这种功能的最小单元是窗体类对象。
此外,我还会稍微修改一下图形元素阴影对象,因为把它应用于任何有阴影的对象时会遇到一些逻辑错误。 例如,阴影仅绘制在图表的顶部,而它应叠加在对象上,位于该对象的投射上方。
改进库类
\MQL5\Include\DoEasy\Defines.mqh 拥有许多宏替换来指定某些函数库对象的默认值。
在画布参数模块中,将宏替换名称 CLR_FORE_COLOR 更改为 CLR_DEF_FORE_COLOR,为图形元素对象的非透明度添加默认值,并为阴影对象属性添加其它一些默认值:
//--- Canvas parameters #define PAUSE_FOR_CANV_UPDATE (16) // Canvas update frequency #define CLR_CANV_NULL (0x00FFFFFF) // Zero for the canvas with the alpha channel #define CLR_DEF_FORE_COLOR (C'0x2D,0x43,0x48') // Default color for texts of objects on canvas #define CLR_DEF_OPACITY (200) // Default color non-transparency for canvas objects #define CLR_DEF_SHADOW_COLOR (C'0x6B,0x6B,0x6B') // Default color for canvas object shadows #define CLR_DEF_SHADOW_OPACITY (127) // Default color non-transparency for canvas objects #define DEF_SHADOW_BLUR (4) // Default blur for canvas object shadows #define DEF_FONT ("Calibri") // Default font #define DEF_FONT_SIZE (8) // Default font size #define OUTER_AREA_SIZE (16) // Size of one side of the outer area around the form workspace #define DEF_FRAME_WIDTH_SIZE (3) // Default form/panel/window frame width //--- Graphical object parameters
函数库将在创建图形元素的方法中用到这些值。 一旦创建完毕,默认值始终可以被更改。