文章 "图形界面 IV: 多窗口模式与优先级系统 (第二章)"

新文章 图形界面 IV: 多窗口模式与优先级系统 (第二章)已发布:

在本章中,我们将扩展库的实现,为MQL应用程序创建多窗口界面。我们还将开发一个优先级系统,用于管理鼠标左键对图形对象的点击,它是用于避免元件对用户操作没有回应的问题的。

图 1. 测试多窗口模式。

作者:Anatoli Kazharski

阿纳托利,我发现了一个错误--我决定看一下示例,然后立即发现,如果窗口被按到右边缘,并且启用了工具提示,这些工具提示就会超出屏幕右边缘。你能纠正工具提示超出屏幕时的 x 坐标吗?

还有一个建议:在菜单中,在带下拉子菜单的菜单项中(我不知道如何正确称呼它们),在有右箭头指示将打开另一个项目的菜单项中,我认为最好是将光标悬停在这样的菜单项上时打开(如 Windows)。或者将其设置为一个参数:通过悬停或单击(就像现在这样)打开一个新项目。

Artyom Trishkin:

阿纳托利,我发现了一个错误--我决定看一下示例,然后立即发现,如果窗口被按到右边缘,并且启用了工具提示,这些工具提示就会超出屏幕右边缘。你能纠正工具提示超出屏幕时的 x 坐标吗?

还有一个建议:在菜单中,在带下拉子菜单的菜单项中(我不知道如何正确称呼它们),在有右箭头指示将打开另一个项目的菜单项中,我认为最好是将光标悬停在这样的菜单项上时打开(如 Windows)。或者将其设置为一个参数:鼠标悬停或单击(就像现在这样)都可以打开一个新项目。

我们会做的。我们将在第一版库完全发布后进行修正和改进。我们需要修正当前的结果。

然后,我们将列出需要完成的工作清单,确定优先级,我们可以尝试单独发布一篇文章。

MetaQuotes Software Corp.:

新文章Graphical Interfaces IV: the Multi-Window Mode and System of Priorities(第 2 章) 已出版:

作者: Anatoli KazharskiAnatoli Kazharski

感谢您的精彩系列文章。 我很喜欢阅读 MQL4 代码。 Program.mqh 有以下两个错误:

//error#1: 'Program.mqh' 中的数组超出范围 (753,32) //通过修改第 742-746 行加以修正    string text[2]=      {       "\"Icon button\" (1) control",       "Opens the dialog box (2)."      }; //错误 2:"Program.mqh "中的数组超出范围 (1012,32) //通过更改第 1000-1005 行进行了修正    string text[3]=      {       "\"Icon button\" (5) control",       "This is the second line of the tooltip.",       "This is the third line of the tooltip."      };
Kaleem Haider:

感谢您的精彩系列文章。 我很喜欢阅读 MQL4 代码。 Program.mqh 有以下两个错误:

谢谢。

在我的版本中没有这些错误。

742-746:

//+------------------------------------------------------------------+ //| 工具提示 1| //+------------------------------------------------------------------+ bool CProgram::CreateTooltip1(void)   { #define  TOOLTIP1_LINES_TOTAL 2 //---     m_tooltip1.WindowPointer(m_window1);    m_tooltip1.ElementPointer(m_icon_button1); //---     string text[]=      {       "Line 1",       "Line 2"      }; //---     m_tooltip1.Header("Icon Button 1");    m_tooltip1.XSize(250);    m_tooltip1.YSize(70); //---     for(int i=0; i<TOOLTIP1_LINES_TOTAL; i++)       m_tooltip1.AddString(text[i]); //---     if(!m_tooltip1.CreateTooltip(m_chart_id,m_subwin))       return(false); //---     CWndContainer::AddToElementsArray(0,m_tooltip1);    return(true);   }

//---

1000-1005:

//+------------------------------------------------------------------+ //| 工具提示 5| //+------------------------------------------------------------------+ bool CProgram::CreateTooltip5(void)   { #define  TOOLTIP5_LINES_TOTAL 3 //---     m_tooltip5.WindowPointer(m_window1);    m_tooltip5.ElementPointer(m_icon_button5); //---     string text[]=      {       "Line 1",       "Line 2",       "Line 3"      }; //---     m_tooltip5.Header("Icon Button 5");    m_tooltip5.XSize(250);    m_tooltip5.YSize(80); //---     for(int i=0; i<TOOLTIP5_LINES_TOTAL; i++)       m_tooltip5.AddString(text[i]); //---     if(!m_tooltip5.CreateTooltip(m_chart_id,m_subwin))       return(false); //---     CWndContainer::AddToElementsArray(0,m_tooltip5);    return(true);   }
Anatoli Kazharski:

谢谢。

我的版本中没有这些错误。

742-746:

//---

1000-1005:

错误出现在文章下载部分,可能是没有更新。

看起来 Kaleem 使用的平台版本略显过时。

不过,为了清楚起见,也为了减少出错的可能性,应该修改源代码,将数组的大小明确定义为 text[TOOLTIP1_LINES_TOTAL] 和 text[TOOLTIP5_LINES_TOTAL]。否则,如果数组会发生变化,但定义不会因疏忽而发生变化,那么将来就会出现越界错误。

Kaleem Haider:
错误出现在文章下载部分,可能没有更新。

已检查

是的,英文版有这些错误。似乎是编辑在翻译成英文时,不小心删除了数组中的分隔符(,)元素。

Stanislav Korotky:

看起来 Kaleem 使用的平台版本略显过时。

不过,为了清楚起见,也为了减少出错的可能性,应该修改源代码,将数组的大小明确定义为 text[TOOLTIP1_LINES_TOTAL] 和 text[TOOLTIP5_LINES_TOTAL]。否则,如果数组发生变化,但定义不会因疏忽而发生变化,那么将来就会出现越界错误。

我使用的是 MetaTrader 4 版本:这不是最新版本吗?
Kaleem Haider:
我使用的是 MetaTrader 4 版本:这不是最新版本吗?
960 似乎是最新版本。

阿纳托利,有没有可能在主面板上打开两个窗口,使所有三个窗口都保持活动状态?

例如:我们有一个主面板,上面有按钮可以打开两个附加面板,每个附加面板都有自己的按钮和其他东西。

按下主面板上的按钮 1 - 打开面板 1。主面板上的按钮保持激活状态,面板 1 上的按钮也处于激活状态。

当面板 1 已打开时,按下主面板上的按钮 2 - 面板 2 打开。主面板、面板 1 和面板 2 上的所有按钮都保持激活状态。

这样就可以在界面上设置可移动的活动面板,每个面板都有自己的功能。

现在,一次只能有一个活动面板。

12
要添加评论,请登录注册