程序库: 用于创建图形界面的 EasyAndFastGUI 开发库 - 页 22

 

同事们好!

通过将对象名称替换为"CElementBase::", 我成功地将错误数量从 18 个减少到 6 个

这 6 个错误减少为 4 种错误,具体如下。请帮助我正确处理它们。

1.如何正确地将 "m_tabs.GetButtonPointer(m_selected_tab). "替换为 "CElementBase::"?

//--- 为线条定义颜色
   color clr=m_back_color;
   if(m_tabs.GetButtonPointer(m_selected_tab).IsLocked()) // this one!
      clr=m_tabs.GetButtonPointer(m_selected_tab).BackColorLocked();
//--- 画一条线
   m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(clr,m_alpha));
  }


2. 这里--当我用 "CElementBase:: "替换 "el. "时。- 会出现一个新的编译错误 "IsAvailable - access to non-staticmember of function"(IsAvailable - 访问非静态函数成员)--如何正确修复这个错误?

      for(int e=0; e<elements_total; e++)
        {
         //--- 仅检查可用项目
         CElement *el=m_wnd[m_active_window_index].m_elements[e];
         if(!el.IsVisible() || !el.IsAvailable() || el.IsLocked())
            continue;
         //--- 项目处理程序中的事件处理
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }


3. 同一行:当我用 "CElementBase::IsLocked "替换 "el.IsLocked() "时:出现错误 "IsLocked- access to non-static member of function"

4. 最后--替换 "m_windows[0].IsLocked() "的正确方法是什么?

//--- 如果没有创建接口,则退出
   if(windows_total<1)
      return;
//--- 如果启用了其中一种模式,则调整锁定窗体所有元素的大小
   if(m_windows[0].IsLocked() && (m_windows[0].AutoXResizeMode() || m_windows[0].AutoXResizeMode()))
     {

如果能使用这个库就好了,但我需要先解决这些问题。


在此先表示感谢!

Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
  • www.mql5.com
Static Members of a Class - Object-Oriented Programming - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Yevgen Drumachyk:

各位同事,大家好

通过将对象名称替换为"CElementBase::", 我能够将 warrnings 的数量从 18 个减少到 6 个

el.CElementBase::IsLocked() ?
 
Edgar Akhmadeev:
el.CElementBase::IsLocked() ?

Edgar Akhmadeev,非常感谢你,同事!

成功了!))

 

各位同事,你们好!

您能告诉我如何使用该库创建两个窗口吗?我正在编写一个智能交易系统,它由两个窗口组成:1)交易面板;2)观察列表。

第一个窗口是交易面板,创建后运行正常:

CWindow m_window;

CreateWindow(m_window, "META TOOLS",1,1,175,175,200,false,false,true,true) + 添加按钮:


但在添加

CWindow m_watchlist_window;

CreateWindow(m_watchlist_window, "Watch List",150,1,100,100,150,false,false,true,true,false)

CreateButton(m_watchlist1_btn, "EURUSD",m_watchlist_window,0,245,25,60,30)

然后 EURUSD 按钮就会出现在空中...也就是说,没有创建另一个单独的窗口...为什么?



该用户界面是在以下上下文中创建的: class CProgram : public CWndCreate

我使用以下命令完成了用户界面的创建

CWndEvents::CompletedGUI()


能否请您告诉我,您是否成功创建了多窗口用户界面?

我指的是两个独立的窗口。也就是说,出现对话窗口(如设置窗口)的变体并不合适。您需要两个窗口都始终可见并可独立点击。为什么要分开?因为第一个窗口 - 交易面板 - 大小是固定的。第二个窗口 - 观察列表 - 窗口大小会随着添加或减少的项目数量而变化。

 

你们好!

您能否使用该库创建一个以上的独立窗口?也就是说,在同一个 EA 中多次调用 WindowCreate() 方法在图表上创建其他窗口?

我可以成功创建 1 个窗口。但当尝试创建第二个窗口时,却没有出现...

有什么原因吗?

或者举个例子,您是如何创建附加窗口(不是对话框)的?

谢谢!

 
Yevgen Drumachyk:

请告诉我如何使用该库创建两个窗口?


不能。一切都围绕一个主窗口展开。这也是我开始编写自己的库的原因之一 )

 
Oleksii Chepurnyi:

不可能。一切都围绕一个主窗口展开。这也是我开始编写自己的程序库的原因之一 )

谢谢,Oleksii Chepurnyi!没有这个库我也愿意。它做得非常好。


还有其他版本吗?也许有人绕过了这个问题,成功创建了不止一个窗口?

您可以在库代码中看到,新创建的窗口会被添加到 "通用元素数组 "中。因此,窗口可能不止一个......?请注意库中的这段代码:



//+------------------------------------------------------------------+
//| 向界面元素数据库添加窗口指针
//+------------------------------------------------------------------+
void CWndContainer::AddWindow(CWindow &object)
  {
   int windows_total=::ArraySize(m_windows);
//--- 如果还没有窗口,则将元素计数器重置为零
   if(windows_total<1)
     {
      m_counter_element_id=0;
      ::Comment("Loading. Please wait...");
     }
//--- 添加指向窗口数组的指针
   int new_size=windows_total+1;
   ::ArrayResize(m_wnd,new_size);
   ::ArrayResize(m_windows,new_size);
   m_windows[windows_total]=::GetPointer(object);
//--- 添加指向通用元素数组的指针
   int last_index=ResizeArray(m_wnd[windows_total].m_elements);
   m_wnd[windows_total].m_elements[last_index]=::GetPointer(object);
//--- 向数据库添加窗口按钮指针
   AddWindowElements(windows_total,object);
//--- 设置 id 并记住最后一个元素的 id
   m_windows[windows_total].Id(m_counter_element_id);
   m_windows[windows_total].LastId(m_counter_element_id);
//-- 增加元素标识符计数器
   m_counter_element_id++;
  }
 
要同时启动两个窗口并使其处于活动状态,需要编辑库。这可不是一项简单而繁重的任务。如果您非常需要,请写信给自由职业者
 
有史以来最棒的祝贺你
 

大家好,请问 CreateSimpleButton 有限制吗?我无法在窗口上放置超过 6 个简单按钮。我使用的是图形界面 x (mql4) 的代码。我遇到了 uninit 原因 8。 我非常感谢 Anatoli Kazharski Best, RDT。


我发现错误出在 metatrader 4 本身,我在同一个图表上多次编译 EA。我注意到,如果我做了更改并关闭图表,然后打开一个新图表并将 EA 放入其中,更改就会正确应用。阿纳托利,非常感谢你出色而完整的工作。最棒的,RDT

Anatoli Kazharski
Anatoli Kazharski
  • 2019.02.17
  • www.mql5.com
Perfil do Trader