首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MT4专家贸易小组- "OBJ_RECTANGLE_LABEL“

MT4专家贸易小组- "OBJ_RECTANGLE_LABEL“
EN

Stack Overflow用户
提问于 2016-10-03 19:16:02
回答 2查看 1.5K关注 0票数 1

MetaTrader4贸易专家顾问小组。

如何链接一些OBJ_RECTANGLE_LABEL,以便与另一个对象一起移动?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-04 10:04:48

把它们间接连接起来

没有直接支持将几个GUI对象链接到另一个GUI对象。

这并不意味着它不可能像这样工作。

在一个增强的Trader用户界面工具中,我需要所有的GUI组件和一些计算值在一些类似的逻辑下运行(将所有的线条、矩形、文本标签和热图颜色保留在一些常见的UI控制逻辑之下)。所有的实时交互-GUI编排都锁定在几个经过处理的用户机器交互中,在这些交互中,用户能够使用一组UI控件移动--其中一些对象是可以自由修改的,而有些对象则被限制(使用增强现实控制器)仅垂直或水平移动,或者仅仅锁定为从这样一个位置的Bollinger带的边缘开始移动,在这个位置,UI-控件的垂直线被移动,等等。

解决方案很简单:

除了[ Expert Advisor ]创建并运行另一个进程外,负责GUI对象自动化的[ Script ]。在这个脚本中,使用来自对象的一些只读值,比如蓝色的垂直线,作为对GUI组合的输入。

如果有人或某物移动这条蓝色垂直线,脚本中的事件监视循环将检测到SENSOR_x1的一个新值。

通过添加刚刚观察到的/检测到的SENSOR_x1_delta = SENSOR_x1 - SENSOR_x1_previous;运动,重新处理所有UI布局方案。

通过这种方式,可以更新SENSOR_* [ Script ]中的运动检测器循环,跟踪所有的实际值,并将检测到的SENSOR_*_delta-s提升到正在GUI布局组合中使用的所有对象上。

最后,在中对增强现实进行重新处理的整个过程中,使用一些强制的WindowRedraw();指令对屏幕进行更新是值得的。

来自PoC演示器的代码

人们可能会注意到,代码采用的是一种新的MQL4.56789前语法,使用的是一些允许的变量命名约定,现在不再允许了。事件监控功能的范围(一个自成体系的函数,在处理MVC框架的所有三个角落(特定于Controller-is的Model-is Live项目、Visual-is Live增强-特定的、灵活的、作为一种有限状态机组成的、主要的构建块中并通过在switch(){}中通过"object.method"调用实现)的最大速度/分钟延迟优化。循环采样率可以大大降低到几十毫秒,因此Live是健壮的,并且在Trader的办公桌上平稳地浮动。

票数 2
EN

Stack Overflow用户

发布于 2016-10-04 13:57:49

这不是最好的方法,但示意性地说明了该做什么。

代码语言:javascript
复制
string      mainObjectNAME,
       dependantObjectNAME;                     // dependant - your obj label

void OnChartEvent( const int     id,
                   const long   &lparam,
                   const double &dparam,
                   const string &sparam
                   ){
   if (  id == CHARTEVENT_OBJECT_DRAG
      || id == CHARTEVENT_OBJECT_ENDEDIT
         ){
      if (  StringCompare( sparam, mainObjectNAME ) == 0 ){
            datetime time1  = (datetime) ObjectGetInteger( 0,      mainObjectNAME, OBJPROP_TIME1 );
            double   price1 =            ObjectGetDouble(  0, dependantObjectNAME, OBJPROP_PRICE1 );
            if ( !ObjectMove( 0, dependantObjectNAME, 0, time1, price1 ) )
                  Print( __LINE__,
                         "failed to move object ",
                         dependantObjectNAME
                         );
      }
      ChartRedraw();
   }
}

如果您使用任何公认的方法(通过拖动或传递其他参数)修改mainObject,那么依赖对象(在您的情况下是mainObject)将使用ObjectMove()ObjectSet()函数进行移动。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39838850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档