文章 "如何创建任意复杂度的图形面板" - 页 13

 

您好!

能否请您告诉我,为什么您的面板在真实图表上运行正常,但在策略测试器中 却无法运行?

也就是说,例如按下按钮的事件没有得到处理。

我该如何解决?

在此先表示感谢!

 
在 mt5 上 使用另一种语言的 面板是否更好,完全取决于终端和图表
 
Vitaliy Davydov 策略测试器中 却无法运行?

也就是说,例如按下按钮的事件没有得到处理。

我该如何解决?

非常感谢!

几年前我发布过一个带按钮的有效解决方案 。但在 MT5 测试版中,编辑字段不起作用。虽然您可以在编辑栏旁边添加小的 +/- 按钮,并通过它们进行编辑。但这其中会有细微差别。
 
ON_MOUSE_FOCUS_KILL 似乎没有以任何方式被使用。将其添加到 Map 时不会发生任何事情。您也可以注释掉 ON_MOUSE_FOCUS_KILL,这样编译器就会跳过它。
 

您好!

我创建了一个继承自 CDialog(或CWndContainer,没有区别)的面板。

如果我在图表的主窗口中创建一个面板,一切都能正常工作--用鼠标移动面板,用关闭按钮关闭面板。

如果在子窗口中创建面板,则一切正常--面板不会移动,也不会对关闭按钮做出反应。

问题:如何使面板对子窗口中图表的事件做出正常反应?

 

你好,我成功制作了我的面板。非常感谢你的精彩教程。

 
Vasiliy Pushkaryov #:
几年前,我发布了一个带按钮的有效解决方案 。但在 MT5 测试版中,编辑字段不起作用。虽然您可以在编辑栏旁边添加小的 +/- 按钮并通过它们进行编辑。但其中会有细微差别。

下午好!

谢谢您,我想明白了。

现在还有其他问题--所有这些来自标准库的面板、

在 MT4 测试仪的测试可视化模式下完全不起作用。

有没有解决这个问题的全局解决方案,这样我就不必为每个控件都手舞足蹈了?

 
Vitaliy Davydov #:

下午好!

谢谢,解决了。

现在还有其他问题--所有这些面板都来自标准库、

在 MT4 测试仪的测试可视化模式下完全不起作用。

有没有解决这个问题的全局解决方案,这样我就不必为每个控件都手舞足蹈了?

什么叫非功能性?在我的 MT4 测试器中,它们都能实现各自的功能。

我举了一个例子 ,当我继承自 CButton 并添加了cMyButton::isButtonPushed() 函数以与测试器配合使用时。

我对 CEdit 和 CCheckBox 也做了同样的处理,然后我一直使用我的继承者。这是一项一次性工作。

在 TestPush 文件中有一个示例函数 checkPushingButtons()

void OnTick()
{
    if(MQLInfoInteger(MQL_VISUAL_MODE)) ExtDialog.checkPushingButttons();
}

//+------------------------------------------------------------------------------------------------------------------+
//| 用于测试器和 OnTick。检查按钮(或对象)是否被按下
//+------------------------------------------------------------------------------------------------------------------+
void CAppWindowCorrectMinimization::checkPushingButttons()
{
   if(m_button1.isButtonPushed())    print1();
   if(m_button2.isButtonPushed())    print2();
}


下面是我的工作代码:

//+------------------------------------------------------------------------------------------------------------------+
//| 用于测试器和 OnTick。检查按钮(或对象)是否被按下
//+------------------------------------------------------------------------------------------------------------------+
void cInterface::checkPushingButttons()
{
  if(btnOnOff.isButtonPushed())    OnClickOnOff();
  if(btnLong.isButtonPushed())     OnClickLong();
  if(btnShort.isButtonPushed())    OnClickShort();

  if(btnCloseOff.isButtonPushed()) OnClickCloseOff();
  if(btnProtocol.isButtonPushed()) OnClickProtocol();
  if(btnOpposMA6.isButtonPushed()) OnClickOpposMA6();

  if(editMA2plus.isEditChanged())  OnEditMA2plus();
  if(editPunct.isEditChanged())    OnEditPuncture();

也就是说,不使用测试器和使用测试器的区别就在于添加了一个 checkPushingButttons() 函数,在这个函数中,我们为每个控件添加一个字符串,并通过勾选来检查它是推送还是输入。

准备模板,多做几次,我想你就会习惯了。

 

你好,弗拉基米尔,
,首先我还要感谢您的精彩教程。我在模板中使用时发现了一个问题:只需将您的任何应用程序放入一个空图表模板中即可。加载该模板后,应用程序会出现两次,如图所示。您知道如何解决这个问题吗?

非常感谢

附加的文件:
 

为什么面板/窗口不能拖动/移动到图表边界之外?

与 Anatoli 的 easyfastgui 库有什么区别?