函数库 (Clock.mqh) 能够创建模拟时钟作为 图形资源。
功能
以下源代码显示了该函数库的用法:
// MQL4&5-code // 跨平台智能交易系统的一个示例, 它在图表上创建一个模拟时钟 #property strict #include <fxsaber\Clock.mqh> // https://www.mql5.com/en/code/19388 const string ObjName = __FILE__; // 要显示时钟的位图对象的名称 const string ResourceName = "::" + ObjName; // 将形成时钟的资源名称 // 按照相应 INI 文件的设置创建时钟 CLOCK Clock("Clocks\\Clock01\\Clock01.INI", ResourceName); void OnINIt() { // 创建一个用于显示时钟的图形对象 ObjectCreate(0, ObjName, OBJ_BITMAP_LABEL, 0, 0, 0); // 指定时钟所在的资源名称 ObjectSetString(0, ObjName, OBJPROP_BMPFILE, 0, ResourceName); // 添加选择对象的可能性, 以便用鼠标拖动它 ObjectSetInteger(0, ObjName, OBJPROP_SELECTABLE, true); // 启用第二个定时器来更新时钟 EventSetTimer(1); } void OnTimer() { // 在时钟上设置当前时间 Clock.SetTime(TimeLocal()); // 刷新图表以使变化可见 ChartRedraw(); }
刷新后, 以下时钟出现在图表上:
指标
所附的跨平台 Clock.mq5 时钟指标能够立即 "开箱即用"。
指标实现皮肤的交互式更改: 使用键盘的向上/向下键切换时钟版本 (解压缩 ZIP 存档)。
功能
- 光栅 (非矢量) 时钟;
- 时针非平滑移动;
- 函数库可在 MetaTrader 4/5 中使用。
时钟如何形成
时钟的原版取自从网页上搜索到的 flash 格式时钟 (swf 文件在 ZIP 中提供) , 这很方便, 因为它们包含所需的钟面, 表针等图形素材。您也可以使用任何其它来源。例如, 您可以找到现成的矢量文件或自行绘制它们。
INI 文件 (参见示例) 设置形成时钟的逐层参数。以下设置可以在任何文本编辑器中编辑
ImageName = ClockFace.bmp BoundX = 0 // bmp 图像 (图层) 内零点的 X 坐标 BoundY = 0 // bmp 图像 (图层) 内零点的 Y 坐标 X = 0 // 由图层组成的图像内零点的 X 坐标 Y = 0 // 由图层组成的图像内零点的 Y 坐标 Rotate = 0 // 旋转速度 A = 100% // 使用的 Alpha 通道的值 R = 100% // 使用的红色通道的值 G = 100% // 使用的绿色通道的值 B = 100% // 使用的蓝色通道的值
列表中描述的图层位置越低, 它就会比之前描述的图层更高。层数没有特别的限制。
这种图像构建方法允许使用函数库来形成任何静态/动态对象, 而不仅仅是时钟。为了提供时钟动态, 我们只需要设置旋转。但是, 其它类型的移动 (例如移位, 缩放等) 可以在代码中添加几行。所附的源代码提供了一个在描述图像时如何实现这个方法的示例。
至于时钟, 逐层操作允许我们实现表针和光照的阴影 (如 flash 格式时钟所做的那样)。
如果您打算令拨盘透明, 您应该在相应的 INI 文件中设置 Alpha 通道小于 100%:
在发布时, 市场上没有模拟时钟。我在代码库里已发现 这一变体。
该函数库的新功能是用于旋转的 LAYER::Rotate。这个函数可能会引发类似于时钟, 但基于动态图形资源创建的第三方解决方案。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/19388