文章 "图形界面 X: 文本编辑框, 图片滑块和简单控件 (构建 5)" - 页 4

 
Artyom Trishkin:
为什么文本输入框 中的空字符串不是"",而是""""? 很久以来,我一直不明白为什么检查空字符串不起作用....。

我也不知道为什么。它是以空字符串("")初始化的。您可以通过查看CTextEdit 类的构造函数来确定这一点

//+------------------------------------------------------------------+
//| 构造函数|
//+------------------------------------------------------------------+
CTextEdit::CTextEdit(void) : m_edit_value(""),
                             m_reset_mode(false),
                             m_show_text_pointer_mode(false),
                             m_align_mode(ALIGN_LEFT),
                             m_text_edit_state(true),
                             m_area_color(clrNONE),
                             m_icon_x_gap(0),
                             m_icon_y_gap(3),
                             m_icon_file_on(""),
                             m_icon_file_off(""),
                             m_label_text(""),
                             m_label_x_gap(0),
                             m_label_y_gap(4),
                             m_label_color(clrBlack),
                             m_label_color_hover(C'85,170,255'),
                             m_label_color_locked(clrSilver),
                             m_edit_y_size(20),
                             m_edit_x_gap(50),
                             m_edit_y_gap(0),
                             m_edit_color(clrWhite),
                             m_edit_color_locked(clrWhiteSmoke),
                             m_edit_text_color(clrBlack),
                             m_edit_text_color_locked(clrSilver),
                             m_edit_text_color_highlight(clrRed),
                             m_edit_border_color(clrSilver),
                             m_edit_border_color_hover(C'85,170,255'),
                             m_edit_border_color_locked(clrSilver)

  {
//--- 在基类中保存元素类的名称
   CElementBase::ClassName(CLASS_NAME);
//--- 设置按下鼠标左键的优先级
   m_area_zorder  =1;
   m_label_zorder =0;
   m_edit_zorder  =2;
  }
 
Anatoli Kazharski:

我不知道为什么。它的初始化值是空字符串("")。你可以在CTextEdit 类的构造函数中找到 答案:

...

是的,我看到了。这就是为什么我不明白为什么检查""的条件在初始化后不起作用。然后我注意到,当光标放在输入框 内时,会在输入框 内创建一个很宽的空格--正好是一个空格的大小(大约像这样: )。我检查了" ",一切正常。
 
Pavel Kolchin:

连接时出现以下错误(不影响工作)

cannot load custom indicator 'C:\MetaTrader\MT5 demo\MQL5\Experts\new_menue_fc_1.00.ex5::Indicators\SubWindow.ex5' [4802]

CWndEvents::DetermineSubwindow > Ошибка при получении хэндла индикатора в директории ::Indicators\SubWindow.ex5 !

我使用的是这个版本的程序库,菜单在主图形中。

我在文件中找不到它的连接位置
 
Pavel Kolchin:
我找不到它在文件中的连接位置

在您测试的 MQL 应用程序的主文件中,删除这一行

//+------------------------------------------------------------------+
//|TestLibrary05.mq5
//| Copyright 2016, MetaQuotes Software Corp.
//|http://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "2016, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//--- 连接 "子窗口专家 "模式的指示器
#resource "\\Indicators\\SubWindow.ex5"
 
Anatoli Kazharski:

在您测试的 MQL 应用程序的主文件中,删除这一行

#resource "\\Indicators\\SubWindow.ex5"
这就是问题所在,已删除
 
Pavel Kolchin:
问题就在这里,它被删除了

Defines.mqh 文件中,将EXPERT_IN_SUBWINDOW 参数设置为false

//+------------------------------------------------------------------+
//|定义。mqh
///2015年,MetaQuotes Software Corp.版权所有。
//|http://www.mql5.com ||
//+------------------------------------------------------------------+
//--- 窗口模式下的专家
#define EXPERT_IN_SUBWINDOW false
 
Anatoli Kazharski:

Defines.mqh 文件中,将EXPERT_IN_SUBWINDOW 参数设置为false

 
Pavel Kolchin:
好极了!)
 
在 Defines.mqh 中,"子窗口中的专家 "模式默认为 true,这有什么原因吗?
//--- "子窗口专家 "模式
#define EXPERT_IN_SUBWINDOW true

当专家不在子窗口中使用时,这会导致错误。
我将 Defines.mqh 中的默认值改为 false,直到现在一切似乎都能正常工作。

 
亲爱的阿纳托利,恭喜你,你的界面非常有用、简单、漂亮。我的 EA 和指标都采用了它。真的非常感谢你。请继续努力!