文章 "DoEasy. 控件 (第 17 部分): 裁剪对象不可见部分、辅助箭头按钮 WinForms 对象"

 

新文章 DoEasy. 控件 (第 17 部分): 裁剪对象不可见部分、辅助箭头按钮 WinForms 对象已发布:

在本文中,我将创建一种功能,可隐藏超出其容器之外的对象部分。 此外,我亦将创建辅助箭头按钮对象,作为其它 WinForms 对象的一部分。

编译 EA,并在图表上启动它:


超出可视区域的裁剪区域可以正常工作,超出容器的标题会沿着其边缘被裁剪,如果我们设置 TabControl 的坐标,令元素超出左侧的容器,那么这里的所有内容也会被正确裁剪 — 元素本身沿着面板的边缘被裁剪, 控件上的按钮也按面板可视区域的边缘被裁剪,而不是按其容器。 这里一切正常。 水平左右按钮的宽度小于默认宽度(9 个像素)。 尽管如此,它们还是被正确显示。
还有什么需要修复? 阴影对象显示在投射它的面板之前。 我稍后会处理这个问题。

作者:Artyom Trishkin

 
奇怪的是,社区的反应如此冷淡。难道没有人需要图形界面了吗?曾几何时,围绕这一话题曾有过激烈的讨论。显然,讨论的队伍已经稀疏了许多。真遗憾。

直到现在,我才有时间更详细地阅读了这一系列的代码,并感到非常惊喜。这么多年过去了,终于有人成熟起来,决定开始新一轮的 MQL 图形界面开发进化,同时考虑到其他作者之前所有迭代的不足之处。

就在最近,在 MQL 开发暂停了很长时间之后,我开始开发EasyAndFastGUI 库的新版本,但现在我发现它很快就会与 MQL 开发者社区无关,因为这个版本已经有了一个基础,可以实现更有趣的解决方案。

我希望该项目能最终完成,甚至有可能取代标准库的图形部分。如果能实现EasyAndFastGUI 中的所有最低要求以及更多要求,我将非常乐意在我的项目中使用它。

当然,还有很多工作要做,但我相信作者会做到的。

祝你好运
EasyAndFastGUI - библиотека для создания графических интерфейсов
EasyAndFastGUI - библиотека для создания графических интерфейсов
  • www.mql5.com
Библиотека EasyAndFastGUI дает возможность создавать графические интерфейсы для своих MQL-программ.
 
Anatoli Kazharski #:
奇怪的是,社区的反应如此冷淡。难道没有人需要图形界面了吗?曾几何时,围绕这一话题曾有过激烈的讨论。显然,现在的队伍已经稀疏了许多。真遗憾。

直到现在,我才抽出时间详细阅读了这个系列的代码,并感到非常惊喜。经过这么多年,终于有人成熟起来,决定在 MQL 图形界面开发方面开始新一轮的进化,同时考虑到其他作者之前所有迭代的不足之处。

就在最近,在 MQL 开发暂停了很长时间之后,我开始开发EasyAndFastGUI 库的新版本,但现在我发现它很快就会与 MQL 开发者社区无关了,因为这个版本已经有了一个基础,可以实现更有趣的解决方案。

我希望该项目能最终完成,甚至有可能取代标准库的图形部分。如果能实现EasyAndFastGUI 以及更多对我来说最基本的要求,我将很乐意在我的项目中使用它。

虽然还有很多工作要做,但我相信作者会完成的。

成功了

我需要创建一个界面,但没有一个库具有完善的事件、正确的窗口管理(包括相互位置、重叠和范围限制)。如果说在某个地方有上述不同程度的详细说明,那么在任意时间点创建、删除窗口和更改属性则存在问题。

这些都应该是图形用户界面的支柱。至于为什么马上就开始 "绘图",我就不清楚了。

我对 Expert Advisor 中当前文章的源代码做了一些小改动:

//--- Создадим объект WinForms Panel
for(int i1=0; i1<2; i1++)
     {
      CPanel *pnl=NULL;
      pnl=engine.CreateWFPanel("WFPanel"+string(i1),50,50,410,200,array_clr,200,true,true,false,-1,FRAME_STYLE_BEVEL,true,false);
      ...
     }

我对面板做了一些改动,结果如下:

将窗口切换到前台是在点击鼠标时发生的,尽管应该是在点击时发生。

通过指标接收事件,这可能是为测试器制作的,没有它,事件不起作用,在测试器中也是如此,即使通过模板.... 加载指标时也是如此。

 
Anatoli Kazharski #:
奇怪的是,社区的反应如此冷淡。难道没有人需要图形界面了吗?曾几何时,围绕这一话题曾有过激烈的讨论。显然,现在的队伍已经稀疏了许多。真遗憾。

直到现在,我才抽出时间详细阅读了这个系列的代码,并感到非常惊喜。经过这么多年,终于有人成熟起来,决定在 MQL 图形界面开发方面开始新一轮的进化,同时考虑到其他作者之前所有迭代的不足之处。

就在最近,在 MQL 开发暂停了很长时间之后,我开始开发EasyAndFastGUI 库的新版本,但现在我发现它很快就会与 MQL 开发者社区无关了,因为这个版本已经包含了一个基础,可以实现一个更有趣的解决方案。

我希望该项目能最终完成,甚至取代标准库的图形部分。如果能实现EasyAndFastGUI 以及更多对我来说最基本的要求,我将很乐意在我的项目中使用它。

虽然还有很多工作要做,但我相信作者会完成的。

成功了!
感谢您的反馈,阿纳托利。当然,一切都将最终确定。
我想知道您希望在这里看到什么,有哪些功能?
我们非常缺乏反馈。
 
Aliaksandr Hryshyn #:

我需要创建一个界面,但没有一个库具有完善的事件、正确的窗口管理(包括相互位置、重叠和范围限制)。如果说在某个地方有上述不同程度的详细说明,那么在任意时间点创建、删除窗口和更改属性则存在问题。

这些都应该是图形用户界面的支柱。为什么一上来就开始做 "绘图",这一点还不清楚。

我对 Expert Advisor 中当前文章的源代码做了一些小改动:

我对面板做了一些改动,结果如下:

按下鼠标时,窗口被切换到前台,尽管它应该是按下的。

接收事件是通过指示器完成的,可能是为了测试,没有指示器,事件就不起作用,在测试中也是如此,即使通过模板.... 加载指示器时也是如此。

从另一个图表监听事件是通过指标-间谍实现的。
如果您有其他更好的方法,请提出建议,我们将予以考虑。
事件在测试器中无法正常工作。
感谢您指出缺陷--我们会修复的,目前仍在开发阶段。您所说的主干。
 

其他图表中的事件有什么用?

我点击了我的可视化应用程序,您的智能交易系统正在并行运行,日志中也有记录:

2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Состояние кнопки: Отжата
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Изменено свойство графического объекта:
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Имя BMP-файла:
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)        - Состояние "On" [0]: "\Experts\Greshnik\Strategy_viewer.ex5::1716653226_u_012896816886410156413404032"
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)        - Состояние "Off" [1]: Отсутствует
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       CGStdGraphObj::PropertiesCheckChanged: Создан снимок истории изменений графического объекта #19: 2022.09.09 23:54:59.875
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Изменено свойство графического объекта:
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Время создания: 2022.09.10 22:18:38
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Изменено свойство графического объекта:
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Имя BMP-файла:
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)        - Состояние "On" [0]: "\Experts\Greshnik\Strategy_viewer.ex5::1716653226_u_012896816886410156413395097"
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)        - Состояние "Off" [1]: Отсутствует
2022.09.10 22:18:38.959 TestDoEasy117 (AUDUSD,M1)       CGStdGraphObj::PropertiesCheckChanged: Создан снимок истории изменений графического объекта #20: 2022.09.09 23:54:59.875

我不明白这样做的目的。


计算速度非常慢。有大量单元格的表格会发生什么情况?

测量图形对象的更新速度:

//--- 处理图形项目集合的事件
   ulong mcs=GetMicrosecondCount();
   engine.GetGraphicObjCollection().OnChartEvent(id,lparam,dparam,sparam);
   Print((GetMicrosecondCount()-mcs)/1000.0);

鼠标左键点击面板中心:5 毫秒

点击活动选项卡的页眉:7 毫秒。

点击非活动选项卡的页眉:20 毫秒


 
Aliaksandr Hryshyn #:

其他图表中的事件是做什么用的?

我点击了我的可视化应用程序,您的智能交易系统正在并行运行,日志显示了这一点:

我不明白这样做的目的。


计算速度非常慢。如果表格中有大量单元格,会发生什么情况?

测量图形对象的更新速度:

鼠标左键点击面板中心:5 毫秒

点击活动选项卡的标题:7 毫秒

点击非活动选项卡的标题:20 毫秒


程序库会扫描整个环境,并输出有关记录事件的信息。目前,这些只是调试信息--该库正在开发中。当它完全投入使用时,就可以选择哪些是需要的,哪些是不需要的。

 
Artyom Trishkin #:
感谢您的反馈,阿纳托利。当然,一切都将最终确定。
我想知道您希望在这里看到什么,有哪些功能?
我们非常缺乏反馈。

EasyAndFastGUI 可以满足最低需求。也许可以在市场上发布最新版本并收取少量费用,因为没有太多时间提供免费支持。

就目前而言,这个主题可以无止境地发展下去。有这么多不同的选择,这一切可能导致的结果,真是太棒了。)

我们会再回来讨论这个问题的。现在很忙。继续努力,这非常令人兴奋!👍

 
Anatoli Kazharski #:

EasyAndFastGUI 满足了我的最低需求。可能会在市场上发布最新版本,但要收取少量费用,因为没有太多时间提供免费支持。

就目前而言,这个主题可以无止境地发展下去。有这么多不同的选择,这一切可能导致的结果,真是太棒了。)

我们会再回来讨论这个问题的。现在很忙。继续努力,这非常令人兴奋!👍

Dobro 👌