阿纳托利,我发现了一个错误--我决定看一下示例,然后立即发现,如果窗口被按到右边缘,并且启用了工具提示,这些工具提示就会超出屏幕右边缘。你能纠正工具提示超出屏幕时的 x 坐标吗?
还有一个建议:在菜单中,在带下拉子菜单的菜单项中(我不知道如何正确称呼它们),在有右箭头指示将打开另一个项目的菜单项中,我认为最好是将光标悬停在这样的菜单项上时打开(如 Windows)。或者将其设置为一个参数:通过悬停或单击(就像现在这样)打开一个新项目。
阿纳托利,我发现了一个错误--我决定看一下示例,然后立即发现,如果窗口被按到右边缘,并且启用了工具提示,这些工具提示就会超出屏幕右边缘。你能纠正工具提示超出屏幕时的 x 坐标吗?
还有一个建议:在菜单中,在带下拉子菜单的菜单项中(我不知道如何正确称呼它们),在有右箭头指示将打开另一个项目的菜单项中,我认为最好是将光标悬停在这样的菜单项上时打开(如 Windows)。或者将其设置为一个参数:鼠标悬停或单击(就像现在这样)都可以打开一个新项目。
我们会做的。我们将在第一版库完全发布后进行修正和改进。我们需要修正当前的结果。
然后,我们将列出需要完成的工作清单,确定优先级,我们可以尝试单独发布一篇文章。
新文章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." };
感谢您的精彩系列文章。 我很喜欢阅读 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); }
谢谢。
我的版本中没有这些错误。
742-746:
//---
1000-1005:
看起来 Kaleem 使用的平台版本略显过时。
不过,为了清楚起见,也为了减少出错的可能性,应该修改源代码,将数组的大小明确定义为 text[TOOLTIP1_LINES_TOTAL] 和 text[TOOLTIP5_LINES_TOTAL]。否则,如果数组会发生变化,但定义不会因疏忽而发生变化,那么将来就会出现越界错误。
看起来 Kaleem 使用的平台版本略显过时。
不过,为了清楚起见,也为了减少出错的可能性,应该修改源代码,将数组的大小明确定义为 text[TOOLTIP1_LINES_TOTAL] 和 text[TOOLTIP5_LINES_TOTAL]。否则,如果数组发生变化,但定义不会因疏忽而发生变化,那么将来就会出现越界错误。
我使用的是 MetaTrader 4 版本:这不是最新版本吗?
阿纳托利,有没有可能在主面板上打开两个窗口,使所有三个窗口都保持活动状态?
例如:我们有一个主面板,上面有按钮可以打开两个附加面板,每个附加面板都有自己的按钮和其他东西。
按下主面板上的按钮 1 - 打开面板 1。主面板上的按钮保持激活状态,面板 1 上的按钮也处于激活状态。
当面板 1 已打开时,按下主面板上的按钮 2 - 面板 2 打开。主面板、面板 1 和面板 2 上的所有按钮都保持激活状态。
这样就可以在界面上设置可移动的活动面板,每个面板都有自己的功能。
现在,一次只能有一个活动面板。
新文章 图形界面 IV: 多窗口模式与优先级系统 (第二章)已发布:
在本章中,我们将扩展库的实现,为MQL应用程序创建多窗口界面。我们还将开发一个优先级系统,用于管理鼠标左键对图形对象的点击,它是用于避免元件对用户操作没有回应的问题的。
作者:Anatoli Kazharski