显然,这个问题可以通过设置控件的适当 Z 排序来解决。然而,即使在这里我们也发现了一个缺陷--该库没有考虑元素的 Z 排序。特别是,如果你研究一下 CWndContainer::OnMouseEvent 方法,你会看到一个简单的循环,以相反的顺序遍历所有下级元素,而没有试图通过 Z 顺序来确定它们的优先级。
В первой части публикации мы рассмотрели базовые принципы описания раскладки графического интерфейса MQL-программ на языке MQL. Для их реализации потребовалось создать несколько классов, отвечающих непосредственно за инициализацию интерфейсных элементов, их объединение в общую иерархию и настройку свойств. Сейчас мы готовимся перейти к более...
您好!
我有这样一个问题--我想在交易面板上创建几个标签,即按下一个按钮会出现一组项目,按下另一个按钮会出现另一组项目。为了隐藏一个选项卡中的元素,我在选项卡按钮的 onClick 事件处理程序中为该元素应用了 Hide() 属性,这样该元素在面板上就不再可见,但它的属性不会丢失,如果点击该元素所在的位置,面板的 onEvent() 将接受该事件。问题是--如何让隐藏的元素也不对用户的任何操作做出反应。我尝试在按钮选项卡的 onClick 方法中再次启用属性 Element.Disable(),但什么也没发生,该元素对按钮点击有反应,因此虽然不可见,但仍有反应。如何通过点击一个标签页,以编程方式将其关闭,然后通过点击另一个标签页,以编程方式将其打开?
请尝试修补控件库:Wnd.mqh 文件中的 OnMouseEvent 方法开头少了一行:
详细信息请参阅文章(OLAP 在交易中的应用(第 2 部分)--这篇文章是关于 OLAP 的,但有一部分是关于图形用户界面的,其中提到了上述问题):
在最小化状态下,"调整大小 "按钮被隐藏并处于非活动状态。问题出在 CWnd::OnMouseEvent 方法上。它缺少这样的检查:
// if(!IS_ENABLED || !IS_VISIBLE) return false; - 这一行不存在显然,这个问题可以通过设置控件的适当 Z 排序来解决。然而,即使在这里我们也发现了一个缺陷--该库没有考虑元素的 Z 排序。特别是,如果你研究一下 CWndContainer::OnMouseEvent 方法,你会看到一个简单的循环,以相反的顺序遍历所有下级元素,而没有试图通过 Z 顺序来确定它们的优先级。
因此,要么需要另一个库的 "补丁",要么需要在派生类中使用一些 "技巧"。
原则上,标准控制库中有很多需要修正的地方。因此,我们编写了 ControlsPlus 的另一种实现方法,而且已经打了补丁--您可以在MQL 作为标记 MQL 程序图形界面的一种方法 这篇文章中获得它的全部内容。第 2 部分(如果您感兴趣,还有第 1 和第 3 部分)。
尝试修补控件库:Wnd.mqh 文件缺少 OnMouseEvent 方法开头的一行:
详情请参阅文章(OLAP 在交易中的应用(第 2 部分)--该文章是关于 OLAP 的,但有一部分是关于图形用户界面的,其中提到了上述问题):
基本上,标准控制库中有很多东西需要调整。这就是为什么我们编写了一个已经打了补丁的 ControlsPlus 替代实现--你可以在MQL 作为标记 MQL 程序图形用户界面的一种手段 这篇文章中获得它的全部内容。第二部分(如果您感兴趣,还有第一部分和第三部分)。
谢谢,我们会尝试的。
如何通过 OnTick 向CLabel 写入/发送文本?
class CControlsDialog : public CAppDialog
{
private:
CLabel m_label;// CLabel 对象
.....
void OnTick()
{
m_label.Text(DoubleToString(Ask,4));
....
出现错误
m_label' - 未声明标识符 ...
出了什么问题?
如何从 OnTick 向CLabel 写入/传输文本?
我得到的错误信息是m_label' - 未声明标识符 ...
有什么问题?
您是否按照帮助 中所示的CreateLabel() 函数绑定了图表、坐标等?
帮助 中显示了CreateLabel() 中与图表、坐标等的绑定,您完成了吗?
是的
如果在这里向对象写入文本,一切都会正常。
但如果我尝试在 OnTick 中写入,就会失败。
你不需要在每次 tick 时都重新创建对象吧?是
如果就在这里向对象写入文本,则一切正常。
但如果我尝试在 OnTick 中写入,就会失败。
你不需要在每次 tick 时都重新创建对象吧?如果把m_label 移到公共 部分呢?
我试过了,还是一样的错误。
只是我是在 4pc 上做的。
我想这就是问题所在。
另外,这个也不行,虽然它能编译。
m_scroll_v1.Disable();(我想切换单选按钮,改变界面很有趣)。Destroy()可以正常工作,但 Disable 并不想这样做
尝试过
只是我是在 4RK 上做的。
我想这就是问题所在。
另外,这个程序虽然能编译,但不能工作。
m_scroll_v1.Disable();(我想切换单选按钮,改变界面很有趣)。Destroy()可以正常工作,但 Disable 并不想这样做
一切都在 4 中运行。而您定义的对象比如 Panel.m_label.Text("Max.Margin")。
这样就可以了。
谢谢!
我首先添加了父对象,然后将其移至公共对象,这样就可以了。
这是 m_scroll_v1。Disable(); 还不起作用
它是这样工作的
谢谢!
先添加了父级,然后将其移至公共级,现在就可以了
而这个 m_scroll_v1.Disable(); 还不起作用