文章 "自定义图形控件。第一部分:创建简单控件" - 页 2

 
Urain:

创建简单代码的例子已经够多了,但创建一个成功的类层次结构,或者至少是一个通用的、易于转换的产品的易实施方案的例子却没有。即使是 MQ 的标准类,也常常因为预先设定了各种可能性而使程序的编写复杂化。

这就是我的意思。

你需要先对整个系统进行演示。架构 先行。并展示每块砖头--特定的控制器--在其中的位置。

然后再演示这些控制器的工作原理(对不起,MFC 只是一张好图片)。



 
sergeev:

好的这非常好。

如果在第二部分讲述高级功能,人们就会更快地开始使用文章中的组件。
我还是会从表单 + 按钮(+ 输入框)开始,然后在第三部分才讲具体的控件组件--列表、菜单等。

毕竟,我们的任务是教授如何编写此类控件。
此外,只要在第二部分中给出表单+按钮(我指的是三种--单选、按下、复选)+编辑框,用户就会将这些类视为一个整体,并能独立创建自己的控件。


为了与表单交互,控件应该有四个方法:Init(...)、Show(X,Y)、Hide()、Event(),一切都将与现在在图表上创建控件时完全一样。因此,您已经可以编写自己的控制器了。

不过,我还是会坚持我的计划,在第三部分中将会有一个包含所有控件 的表单--作为一个示例或现成的模板使用会更方便--有必要删除一些东西、加倍一些东西以及所有东西,它将会是一个更现成的半成品。

 
Integer:

我还是会坚持我的计划,在第三部分中将会有一个包含所有控件的表单。

好的,我们拭目以待:)
 

这个话题很有意义......感谢您的报道....。

不过,读完这篇文章和评论后,我觉得算法的精髓有点难以实现。

我想:下面的算法不是更简单、更通用吗?

一个带有控制按钮的面板可以用任何具有强大编辑器的语言(如Visual Studio)来实现。

而且它(实现带按钮和其他功能的控制面板的程序)可以独立于 MT5 自主运行。

这些结果会输入一个文件,MT5 会定期从该文件中读取(设置中断也不错)。

因此,编程过程将得到简化,并具有通用性(可与任何程序和 MT4 一起工作)。

因此,主要问题是将生成的参数文件与程序正文对接。

在这个方向上,我希望看到 MT5 的发展,而不是功能.... 的平庸扩展。

通过 RAM 进行交换也不会有什么坏处--速度可能还要快 1000 倍。

此外,我们还可以考虑通过网络连接......这将非常有趣。

您怎么看?

 
我不明白第四项原则。你能举个例子吗?
 

我不明白第四项原则。你能举个例子吗?

 
LeoAndriolo:

我不明白第四项原则。你能举个例子吗?

你好,Leo,当你提到第四项原则时,你具体指的是什么?我知道这篇文章的主题 4 涉及 "控制 工件"。您能再详细说明一下您的问题吗?
 
Malacarne:
你好,Leo,当你提到第四项原则时,你具体指的是什么?我知道这篇文章的主题 4 涉及 "控制工件"。您能进一步说明一下您的问题吗?
1.1.4
 

我想创建一个自定义图形对象,它由矩形、方框和一些信息组成。我会经常使用这个对象,因此我希望它能方便访问。是否可以在 MT5 工具栏中添加自定义图形对象?如果不能,能否提供一些其他建议?

 

奇怪...

Для примера, один метод создания графического объекта вертикальная линия (OBJ_VLINE):

void CreateVLine(string aName,int aSubWindow=0,long aChartID=0)
  {
   ObjectCreate(m_id,m_name,OBJ_VLINE,aSubWindow,0,0);
   Attach(aName,aChartID);
  }

不是应该这样吗?

Для примера, один метод создания графического объекта вертикальная линия (OBJ_VLINE):

void CreateVLine(string aName,int aSubWindow=0,long aChartID=0)
  {
   Attach(aName,aChartID);
   ObjectCreate(m_id,m_name,OBJ_VLINE,aSubWindow,0,0);
  }

或者像这样

Для примера, один метод создания графического объекта вертикальная линия (OBJ_VLINE):

void CreateVLine(string aName,int aSubWindow=0,long aChartID=0)
  {
   ObjectCreate(aChartID,aName,OBJ_VLINE,aSubWindow,0,0);
   Attach(aName,aChartID);
  }