超级棒
在我看来,您现在绝对领先于所有 MQL 图形开发人员。
我的结论是,我有了自己的追求。
结果令人惊叹!
祝您在进一步开发中好运。
超级棒
在我看来,您现在绝对领先于所有 MQL 图形开发人员。
我的结论是,我有了自己的追求。
结果令人惊叹!
祝您在进一步开发中好运。
总有一些东西值得我们为之奋斗。)
在这里,看看大师的作品,会给你更多启发:尤里-库里科夫 >>>>
谢谢你,真的令人印象深刻!
我想问你一个问题...
你使用 OOP 创建了你的项目。你实现了几乎所有的基本控件。你创建了一个丰富的库...
同时,你在工作中使用了多少代码?
例如,您使用了多少 MT、Canvas 等控件库?
就我个人而言,我必须从零开始,在全新的技术上创建一切,不可能使用已经开发出来的东西。
将来,其他开发人员也无法继续开发我的项目,他们也无法参与开发,因为除了我之外,其他人都不熟悉这项技术。
而你的情况恰恰相反...所有程序员都能参与改进和开发你的程序库。
而唯一能阻止这一切的就是懒惰。
同时,您在工作中已经使用了多少代码?
例如,您在 MT、Canvas 等控件库中使用了多少?
在本系列的第一篇文章中,我回答了这个问题:图形用户界面 I. 准备库结构(第 1 章):准备控件库结构(第 1 章)。其中介绍了用于标准图形对象原型的标准库类结构。
我在项目中使用的类列表如下
- CChartObjectRectLabel - 矩形标签。
- CChartObjectEdit - 输入字段。
- CChartObjectLabel - 文本标签。
- CChartObjectBmpLabel - 图形标签。
- CChartObjectButton - 按钮。
- CCanvas- 创建图形资源(无论是否与图表对象绑定)和绘制图形基元。
理想情况下,应该只剩下一个类 -CCanvas。有关此主题的有用主题请参见此处:在画布上开展众包项目 >>>
在开始开发之前,我研究了创建图形界面的标准库和Dmitry Fedoseev 的版本。然后,我列出了一份我个人所欠缺的清单,并开始了项目工作。需要完成的工作仍然很多,而且还在不断更新,以满足其他感兴趣的用户的建议。只是这些工作主要是在个人通信中进行的。我们还在努力解决在项目中使用程序库时逐渐暴露出来的错误。
唯一能阻止这一切的就是懒惰。
没有任何问题。)
在本系列的第一篇文章中,我回答了这个问题:图形界面 I:准备库结构(第 1 章)。这篇文章介绍了用于处理标准图形原始对象的标准库的类结构。
我在项目中使用的类列表如下
- CChartObjectRectLabel - 矩形标签。
- CChartObjectEdit - 输入字段。
- CChartObjectLabel - 文本标签。
- CChartObjectBmpLabel - 图形标签。
- CChartObjectButton - 按钮。
- CCanvas- 创建图形资源(无论是否与图表对象绑定)和绘制图形基元。
理想情况下,应该只剩下一个类 -CCanvas。有关此主题的有用主题:在画布上开展众包项目 >>>
在开始开发之前,我研究了创建图形界面的标准库和Dmitry Fedoseev 的版本。然后,我列出了一份我个人所欠缺的清单,并开始了项目的开发工作。需要完成的工作仍然很多,而且还在根据其他感兴趣用户的建议不断更新。只是这一切主要都是在私人通信中进行的。我也在处理在项目中使用程序库时逐渐暴露出来的错误。
这方面没有任何问题。)
感谢您的详细解答。)
祝你的工作更有成果。
阿纳托利,很抱歉打扰您,但我想知道如何才能在一个计算量很大的循环中更新进度条。
例如,我们有一个进度条 m_progress_bar,在 CProgram 内部有一个循环。
m_progress_bar.Show(); // 是没有意义的,因为在显示绑定它的窗口 (m_window.Show()) 时,它已经立即可见、 // 我希望将其创建为隐藏状态,并在需要时显示出来 int total=1000; // 希望用进度条显示的循环迭代次数 for(int i=0;i<total;i++) { Func(); // 在循环的每次迭代中进行大量计算的函数 m_progress_bar.Update(i,total); // 什么也不做:进度条处于 "挂起"--初始状态。 } //--- 循环完成后,进度条应该隐藏、 //---------------------------------------------------在这种情况下,循环过程中不会更新,然后用另一个对象覆盖它,将其隐藏起来 m_progress_bar.Hide(); 由于某些原因,// 不能隐藏进度条,我必须将其隐藏在另一个图形对象下。
您能在这样一个 "抽象 "的例子中解释一下我不明白的地方吗?
传递一些数据也无妨。
这个怎么样?
m_progress_bar.Update(i,total);
这个怎么样?
没用。
为什么不行?
//+------------------------------------------------------------------+ //| 更新进度条| //+------------------------------------------------------------------+ void CProgressBar::Update(const int index,const int total) { //--- 设置新索引 CurrentIndex(index); //--- 设置新范围 StepsTotal(total); //-- 计算指标的宽度 double new_width=(m_current_index/m_steps_total)*m_bar_bg.XSize(); //--- 如果小于 1,则进行调整 if((int)new_width<1) new_width=1; else { //--- 调整框架宽度 int x_size=m_bar_bg.XSize()-(m_bar_border_width*2); //--- 如果出界则更正 if((int)new_width>=x_size) new_width=x_size; } //--- 为指示器设置新的宽度 m_indicator.X_Size((int)new_width); //-- 计算百分比并形成字符串 double percent =m_current_index/m_steps_total*100; string desc =::DoubleToString((percent>100)? 100 : percent,m_digits)+"%"; //--- 设置新值 m_percent.Description(desc); } //+------------------------------------------------------------------+
新文章 图形界面 IX: 进度条和线形图表控件 (第二章)已发布:
第九部份的第二章致力于开发进度条和线形图表控件。与以往一样,会提供详细的实例展示如何在自定义的MQL应用程序中使用这些控件。
让我们列出所有用于开发库中创建进度条的组件。
图 1. 进度条控件的组成部分
作者:Anatoli Kazharski