阿纳托利,这一系列文章很棒,而且很有意义。您能否: 1.在每篇文章的开头列出以前的文章。网站上的搜索并不总是正确的) 2.以举例的形式总结一些知识。我想,读过你文章的人都会明白,没必要嚼烂。但如果能一下子看到有趣的结果,那就很有意思了。3.祝你好运,我期待着你的继续)
Anatoli Kazharski:
+1
谢谢。
您可以单独撰写一篇文章,以创建一个包含所有库控件的图形用户界面应用程序为例。在这篇文章中已经包含了所有文章的链接。
Rashid Umarov:
Deal.)
太棒了感谢 Anatoli。
您好~我載了你提供的範本進行測試,但是出現了錯誤
描述:'return'-cannot convert from const pointer to nonconst pointer
文件:SplitButton.mqh
請問該怎麼解決呢?
Tol,我没有看过最近两个版本,但在这两个版本之前,CCtatusBar 存在一个错误:
如果状态栏 m_status_bar.ValueToItem() 在定时器中更新,那么如果主窗口最小化,状态栏就会一直挂在图表上 - 它不会最小化。我不得不以这种方式 在我的 CP 程序中持续监控:
if(m_status_bar.IsDropdown()) { m_status_bar.ValueToItem(....); }
要解决这个问题,您需要在 ValueToItem() 方法中为 CCtatusBar 添加这样一个检查:
//+------------------------------------------------------------------+ //| 设置指定索引处的值 || //+------------------------------------------------------------------+ void CStatusBar::ValueToItem(const uint index,const string value) { //--- 检查是否超出范围 uint array_size=::ArraySize(m_items); if(array_size<1 || m_wnd.IsMinimized()) return; //--- 如果超出范围,则调整索引值 uint correct_index=(index>=array_size)? array_size-1 : index; //--- 设置传输文本 m_items[correct_index].Description(value); } //+------------------------------------------------------------------+
这样一切都会好起来,您也不必经常记住它并在程序中加以控制。
Artyom Trishkin:
已检查。几乎所有文章中的测试示例都有一个在计时器中更新的状态栏。所述行为未再现。
...
如果在计时器中更新状态栏 m_status_bar.ValueToItem(),那么如果主窗口最小化,状态栏就会一直挂在图表上 - 而不会最小化。
...
Anatoli Kazharski:
检查。几乎所有文章中的测试示例都有一条状态行,其中计时器有更新。描述的行为没有重现。
检查。几乎所有文章中的测试示例都有一条状态行,其中计时器有更新。描述的行为没有重现。
你知道,我本想录制一段视频,看看它是如何工作的,但可惜的是,在返回到您的 ValueToItem() 版本后,我也失去了这种行为。但它确实存在...也许是因为现在市场关闭了....
我还是按我建议的方式操作吧--这样我就不会在某个地方、某个时候再次遇到这个错误了。
新文章 图形界面 IV: 信息界面元件 (第一章)已发布:
在当前开发阶段,用于创建图形界面的库包含了表单以及可以附加其中的几个控件。之前已经说过,未来的文章中将有一篇专门致力于多窗口模式,现在,我们已经万事具备,我们将在下面的章节中讨论它。在本章中,我们将开发用于创建状态栏和工具提示信息界面元件的类。
在本文中,我们将创建一个简单的状态栏,不支持项目中包含上下文菜单选项。与其他界面元件类似,状态栏由几个基本对象构成:
图 1. 状态栏元件的组成部分.
作者:Anatoli Kazharski