在Canvas上做一个众包项目 - 页 37

 
Алексей Барбашин:

从上面可以理解,结构元素是一个特定的对话框控件,它包含自己的属性,可以包含嵌套的控件。这样一个通用控件的属性集只受限于开发者的想象力。

当然,我们可以避免这种结构,用一个多维数组 来描述控件的属性,但最初并不划算,因为我们需要清楚地记住某些属性的哪个索引被存储。而且阵列不能包含异质数据类型。事实证明,程序化编程中的控制元素的描述只有通过结构才能实现。也就是说,结构元素是一个具体的控件,也就是具有属性的对话框的具体对象。

在标准库中,Include文件夹下有一个Generic 文件夹,它包含了实现 键值类型接口 的CHashMap类。
一个单一的对象可以有一组任何类型的值。虽然地图树的运行很耗时,但它的工作速度相当快。
甚至可能对描述属性起作用,一般情况下应该尝试。
或者使用本库中另一个更适合该任务的班级类型。

Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
  • www.mql5.com
Библиотека содержит классы и интерфейсы для определения шаблонных коллекций, которые, в свою очередь, дают пользователю возможность создавать строго типизированные коллекции. Они обеспечивают большее удобство и высокую производительность работы с данными, чем обычные типизированные коллекции.
 

再读一遍,即你提议存储一个等于像素数组的数组,以便在这个数组中存储信息(在你的案例中,"哪个函数号 "应该被用来处理)。?

 
Maxim Kuznetsov:

然后会有相反的情况--将界面与图表联系起来。例如,做一个与时间和价格严格挂钩的按钮。

一个独立的GUI可以在短时间内编写出来--有所有的表格、标签、菜单和口哨。在C#或甚至BASIC中。而在图表内部,对于外部应用来说是一个重大问题。

那么为什么要把界面和图表绑在一起呢?
毕竟,你可以直接从相关函数中获得任何数据,如时间戳和价格。

 
Alexandr Andreev:

再读一遍,即你提议存储一个等于像素数组的数组,以便在这个数组中存储信息(在你的案例中,"哪个函数号 "应该被用来处理)。?

如果你问我,我没有建议这样的事情。我根本就没有建议什么))。只是稍微描述了一下我的观点。你可以自由地提出不同意见。

 
Реter Konow:

原则上,有可能对类型进行概括。我得出的结论是,如果绝大多数对象的属性都是int类型的,那么就不会发生什么坏事。为了简化,所有其他(图形对象的属性中几乎没有double)的缩写类型我都拒绝了。记忆 "超限 "是如此微不足道,以至于思考它没有意义。当然,我们不能为了专业性而去做这样的亵渎行为)))。但现在是21世纪,我不会受到篝火的威胁)。

我把物体的名称作为数字,并把它们放在物体属性的一般系列中。

我需要不同类型数据的唯一地方是控制参数。我在那里创建了第二个内核,将参数属性和值本身存储为字符串类型,我可以很容易地将其还原为任何东西(更准确地说,是写在参数属性中的东西)。

提示:"控制元素参数 "是指由控制元素管理的参数。

事实证明,包含所有控件及其所有属性的全局数组,其维度深度等于所有控件的各种属性之和。也就是说,即使不需要控件的某些属性,这些单元仍然会在这个数组中,因为数组总是统一的。

然而,令人惊讶的是,该阵列本身的均匀性。在这方面,使用结构是比较合理的,因为在这种情况下,每个属性都可以用自己的类型来描述,包括联合

使用结构确实简化了属性的存储,你不必将自己限制在一种类型,也不必放弃任何东西。你不必处理从字符串到其他数据类型 的转换问题...一个结构从一开始就消除了所有这些限制。

除了属性和坐标本身之外,这个全局数组还应该存储元素的从属关系系统。如果我们绘图中的Caption对象发生了变化,那么按钮也必须重新绘制,因为它们位于标题栏上。因此,如果任何一个 "中间 "控件发生了变化,它上面的所有东西都应该被重新绘制。彼得,你是如何存储对象依赖结构的?
 
Алексей Барбашин:

事实证明,包含所有控件及其所有属性的全局数组,其维度深度等于所有控件的不同属性之和。也就是说,即使某个元素不需要某些属性,这些单元仍然会在这个数组中,因为数组始终是统一的。

然而,令人惊讶的是,该阵列本身的均匀性。在这方面,使用结构是比较合理的,因为在这种情况下,每个属性都可以用自己的类型来描述,包括联合

使用结构确实简化了属性的存储,你不必将自己限制在一种类型,也不必放弃任何东西。你不需要处理从字符串到其他数据类型 的转换...一个结构从一开始就消除了所有这些限制。

核心是矩阵。它持有对象的所有属性。

你可以选择你自己的方法。但是,在多年的gui中,我得出的结论是,没有其他方法会给一个不断发展的系统的功能带来类似的强大增长。最大限度的简单和高效是完美的。


 
Алексей Барбашин:

...彼得,你是如何存储对象依赖结构的?

如果你指的是协调依赖关系,也是在内核中。

我有一个特殊的处理程序,用于协调对象的依赖性。它适用于所有类型的依赖关系。
 
Roman:

那么为什么要把界面和图表绑在一起呢?
毕竟,你可以直接检索任何数据,同样的时间戳和价格,从相关功能。

对应用程序界面(用户操作的东西)不限于单一窗口的事实。

我们正在谈论交易,不是吗?

那么,交互式元素在图表上的位置(以及它们的绑定)几乎不可能通过外部手段解决。

同样,外部对话框/表格也很容易绘制。但如果没有终端和具体图表的具体情况,图表内的元素几乎不可能画出来。

 
Реter Konow:
核心是矩阵。它包含对象的所有属性。

你可以选择你自己的方法。但是,在多年的gui中,我得出的结论是,没有其他方法会给一个不断发展的系统的功能带来类似的强大增长。最大限度的简单和效率是完美的。


矩阵是嵌套循环,嵌套循环是时间。我认为,没有讽刺,只是在逻辑上进行推理。

 

彼得,你会得到以下信息:核心包括元素属性的全局矩阵、元素值的全局矩阵、依赖关系的全局矩阵、图片的全局矩阵......

如果有更多的属性需要添加,那么矩阵的维度就会增加。

因为单元格没有名字,所以属性是严格通过索引访问的。

至少字段名可以用结构来访问。

彼得,你是...巨人...

例如,我是这样看的(简化)。

class CControl : public CObject

{

public:

        int ПозицияХ;

        int ПозицияY;

        int Длина;

        int Ширина;

        color ЦветОсновы;

        color ЦветБордюра;

        int ТолщинаБордюра;

}

一个事实上的 "类 "是你的全局数组中的一个特定字符串,只是有一个更 "人性化 "的面孔。类被设计用来创建自己的数据对象,有一组可以理解的属性,可以通过名称而不是索引来访问。一个类只是一个通用的类型构造器。

因此,让我们创建一个基本的控件,它包含最常见的属性,几乎任何控件都有这些属性。

你可以在此基础上创建专门的对象。

class CButton : public CControl 

{

public:

        string Заголовок;

        int Image[];

}

也就是说,每个后续的控制类型只是用所需的属性来补充基础类型。

而且,正如我前面所写的,基本属性存储在基础控件中,所以在控件中 "击中 "光标的遍历是通过检查一个数据类型 来完成的 CControl。找到所需的对象后,程序立即可以访问该对象的属性,因为程序点已经在该对象本身,就像在你的循环中,程序在所需的数组行上。