根据我的亲身经历,我可以说,让窗口成为 "橡胶"(即动态)窗口绝非易事。如果我们谈论的是一个没有任何对象的简单形式的窗口,那么要使其具有可伸展性无疑是比较容易的,但在这里你需要一个用户与窗口之间交互的整体概念。一个标准的 Windows 窗口至少有 8 个手柄,抓住这些手柄可以方便地在任何方向上改变窗口的大小。
根据我的经验,我知道如何实现这一点,而且在计划出版的一个控件中已经实现了类似的功能。本系列的下一篇文章中将举例说明。
以"警报"窗口为例。实现这种窗口行为并不容易。
您认为有什么困难呢?这个窗口只有一个三列表格和一个 "关闭 "按钮。当您水平调整窗口大小时,列的宽度会与当前窗口宽度成比例变化。对我来说,最好是固定列的宽度。当窗口宽度改变时,让水平滚动条 出现。无论如何,所有这些都属于一个特定界面元素的范畴,没有什么能阻止你制作这样一个元素并将其连接到库引擎。
在本系列的第 18 篇文章中,我们将介绍三种带有水平和垂直滚动条的表格。在当前的实现中,它们并不是 "橡皮 "状的,但如果你真的需要,我稍后会在库的第二个版本中提供这样的功能。
现在让我们回到一个包含大量不同类型对象的普通窗口。你会发现这些对象之间存在着各种不同的关系。这意味着当你调整窗口大小时,它们的位置(或尺寸)会发生不同的变化。例如,一些图片会移动到笔的后面,而另一些图片则不会移动。一些输入框 的长度会发生变化,而另一些输入框 的大小则保持不变。因此,说这项任务是最容易解决的任务之一,我认为有点草率)。
我们可以通过在类中添加方法来解决这个问题,借助这些方法,您可以定位元素并根据窗口大小改变其大小。目前,所有这些都是次要任务,可以在第一版库发布后解决。
我将谈谈我的看法:
1.界面规范了窗口和对象的形式,以及它们在各种事件中的行为(对用户操作的反应)。
图形对象与其参数和功能之间有标准的连接方法,窗口、对象和事件有明确的分类。
这种标准化在面板中是完全不存在的。
2- 界面为用户与应用程序的交互提供了大量的可能性。它允许用户轻松地改变其外观,
,采用所需的尺寸或颜色。可以说,它 "适应 "了用户的要求。
3. 由于其图形优势,该界面可以在窗口中显示比面板多得多的信息。
毫无疑问,这是创建界面的第一步。在您的库中,您将窗口和控件的参数标准化,同时让其他人在合理的范围内覆盖特定属性。下一步是扩展用户与界面交互的可能性。这里有很多问题(如改变窗口大小),如果不解决这些问题,您的库就有可能只是新一代开发人员的面板标准化形式。 那么,在通往界面的道路上的最后一步--创建窗口与应用程序处理的信息进行交互的方法,但数量要比面板所能做的大得多。
我很高兴听到反对意见。:)
Реter Konow:
1.困难并不在于复制一个特定的窗口及其行为,而在于创建一个能够管理窗口的系统,以便在对象和窗口句柄之间实现任何类型的链接。
2.这将给您带来巨大的机遇,但 OOP 又一次不允许您有效地实现它。
3.您将不得不编写过多的代码。
4.我敢打赌,如果将我的结果与您的结果进行比较,优势肯定不在您这边)。
1.我不明白,我们在谈论的是什么?您已经有机会,而且随着本系列其余文章的发表,您将有更多机会与您的开发成果进行全面比较。那我该拿什么来比较呢?))
2. OOP 为您提供了有效管理这一切的机会。或者更详细地表达你的想法,为什么你这么认为。最好是用一些具体的例子和简短的代码来说明这个或那个问题。
3.我不怕这个或那个任务的复杂性,为此需要写多少代码都无所谓。
4.我不明白你说的优势是什么?我没打算比你占任何便宜。))
Retag Konow:
不过,我想就市场上许多开发者提供的面板与界面之间存在的差异提出一个问题。为什么尽管它们的外观与经典界面相似(尽管不是全部),但它们却不被视为一个完整的界面?它们与经典界面有何不同?为什么窗口和控件在外观上与常规界面相似还不够?什么时候面板才能被 "识别 "为界面?我会给出我的看法:
...
毫无疑问,您已经迈出了创建界面的第一步。在您的库中,您将窗口和控件的参数标准化,同时为其他人在合理范围内覆盖特定属性留出了可能性。下一步是扩展用户与界面交互的可能性。这里有很多任务(如调整窗口大小),如果没有这些任务,你的程序库就有可能只是新一代开发人员的面板标准化形式。
至于第一步和第二步,请等待该系列的所有文章出版。目前只发表了10 篇文章。总共将超过 25 篇。
雷塔格-科诺
那么,通往界面的最后一步就是为窗口创建与应用程序处理的信息进行交互的方法,但数量要比面板所能实现的大得多。
如果我没有理解错的话,我已经有这样的例子了。这可以包括用于存储、检索和显示大量数据的表格类。
假设您创建了一个窗口,并在其中放置了一个表格。碰巧的是,这个表格太大了(比方说,这是一个贸易历史统计指标表)。您在窗口中添加了垂直滚动条(或自动显示)。但这还不够。您希望用户能够调整窗口大小,以便只看到他需要的那部分表格。如果用户使用滚动,他所看到的内容仍然会超出需要。结论--你需要调整窗口的大小。根据重要区域的大小调整其视野。
关于优势,我只是开个玩笑。:D
让我试着更清楚地说明创建对象和窗口映射的任务。
假设您创建了一个窗口,并在其中放置了一个表格。碰巧的是,这个表格太大了(比方说,这是一个贸易历史统计指标表)。您在窗口中放置了垂直滚动条(或自动显示)。但这还不够。您希望用户能够调整窗口大小,以便只看到他需要的那部分表格。如果用户使用滚动,他所看到的内容仍然会超出需要。结论--你需要调整窗口的大小。根据重要区域的大小调整其视野。
现在让我们设想一下,除了表格之外,窗口还包含各种重要的静态对象(例如帮助图标、设置图标或窗口缩放按钮......)。当您调整窗口大小时(如果您移动窗口的右把手使其变小),这些对象将不得不位于窗口之外,当然,除非它们向正确的方向移动。但是,如果移动窗口的左把手,这些对象就会保持静止不动。可以说,您已将某些对象绑定到窗口的右侧句柄上,它们只会随窗口移动。
但是,有些对象可以同时绑定到多个其他对象上,而且绑定方式各不相同。例如,您已经厌倦了为每个对象分别计算和设定坐标。您只想把它固定到另一个已经设置好的对象上、下、左或右。您可以创建一个对象与另一个对象的绑定,如果第一个对象移动,第二个对象也会跟着移动。
以上都是相当简单的任务。我认为这没有任何问题。也就是说,在项目开发的任何阶段都可以添加这些功能。
重新标记 Konow:
不幸的是,显示代码片段是没有意义的,因为对它们的注释会超过这段代码大小的好几倍。你根本不熟悉我的编程方法,我的代码不会向你解释任何东西,反而会把你带入死胡同。我只能说,我所写的一切都已经实现,而且运行得非常好。我很快就会发布更多的截图和视频。
所以不会有例子来解释为什么 OOP 限制了你的编程能力?你只需画出一个方案,说明使用 OOP 是不可能实现这样一个项目的,但使用你的方法却是可能的。这就足够了。
那么我们应该如何处理您的截图和视频呢?MQL 功能允许您实现任何复杂程度的图形界面。关于图形界面的例子,最好以操作系统的图形界面为例。也就是说,要有足够的质量(Windows 也会出现错误和缺陷),并且可以自己测试,而不仅仅是通过视频观看。
如果您的计划是销售您的程序库,那么至少要在市场上发布您的免费 DEMO 示例,以便我们可以对其进行测试并得出结论。还可以写一篇文章,让我们了解如何使用您的库在我们的 MQL 应用程序中创建图形用户界面。仅有屏幕截图和视频是远远不够的。;)
我的截图和视频只是为了证明我所说的解决上述问题的方法。我打算把它们提供给你。
目前的事实是,我(而不是您)发表的文章中包含了对库的详细描述,而实际上这是向整个 MQL 社区免费提供的。与您不同的是,这就是实践的证明。
但你只想展示一些图片和视频,所以你就开始了一场无关痛痒的对话,同时还编造了一些其他的论点。等你公布了代码,我们再继续。与此同时,我将继续撰写本系列的其他文章,以便您以后可以进行更全面的比较。
前面至少还有15 篇文章。所以,现在开始比较还为时过早。
注:我认为节目规模小是一个优势。
不好笑。功能可能和代码一样多。如果能去掉所有注释,甚至混淆注释,程序就会更小。
目前的事实是,我(而不是你)发表的文章详细描述了资料库,事实上,资料库是免费提供给整个 MQL 社区的。与您不同的是,这就是实践的证据。
我不想写任何东西...但是
- 阿纳托利,在 "真理 "和 "证据 "问题上,你并不谦虚。
- 还记得那段对话吗?"......读您的文章有多难...... "作者的回答是:"您知道写文章有多难吗?阿纳托利,感谢您的劳动,但我有一个问题:您 "无偿地 "为谁发表文章?这对高级读者来说没意思,而对初学者来说又难以理解。其中有很多代码,您根本不想对所写的内容进行挑选和系统化。
- 阿纳托利,你的读者对你的文章提出了问题,显然你并不满意。此外,他的意见根本不会引起你的兴趣,甚至会激怒你。那你为什么还要写文章呢?
- 作者需要批评才能更好地改变。
恕我直言,你应该更贴近你的读者,不要在现场转半圈就激动起来。
新文章 图形界面III:简单与多功能按钮(第一章)已发布:
让我们探讨按钮控件。我们将讨论几个用于创建简单按钮,扩展功能按钮(图标按钮和分割按钮)以及关联按钮(按钮组和单选按钮)的类的实例。另外,我们还将在已有的类中增加一些内容以扩展它们的功能。
本文将比前面的文章简单得多,在此,我们将讨论按钮控件,
按钮是图形界面中用户可以互操作的最简单的控件。同时,还有多个实现选项。在本文中,我们将针对不同复杂度水平的按钮创建三个类。
另外,我们还将实现另外三个类用于创建相关联的按钮组。
我们还将在上下文菜单中增加一个模式,增强它的功能并增加一些内容。CWindow表单类将使用方法多接收一个栏位,使得可以定义到底是哪个控件在激活时封锁了表单,这将使表单只能被封锁它的控件来解锁。
编译文件之后,再把测试EA附加到图表上,您就应该能够看到如以下屏幕截图所示的结果:
作者:Anatoli Kazharski