文章 "图形界面 XI: 集成标准图形库 (统合构建 16)"

 

新文章 图形界面 XI: 集成标准图形库 (统合构建 16)已发布:

能够创建科学图表 (CGraphic 类) 的新版本图形库已于最近发布。创建图形界面的开发中函数库在本次更新中将引入创建图表的新版本控件。不同类型数据的可视化现在更加容易了。

结果如下所示:

 图例. 5. MQL 测试应用程序的第四个选项卡 (坐标轴) 的控件。

图例. 5. MQL 测试应用程序的第四个选项卡 (坐标轴) 的控件。


作者:Anatoli Kazharski

 
好文章。
 

很棒的图书馆

 

再次祝贺你!干得漂亮

 

下午好。

问题出现在我意想不到的地方...

有一个程序--一个主窗口,一个对话窗口。一切正常。我又添加了一个对话窗口

现在它们是这样运行的。我们打开一个对话窗口,一切正常。关闭它。打开第二个对话窗口,窗口中的元素对点击没有反应,或者说反应很奇怪(如截图所示)。直到点击窗口标题后,该窗口一切正常。但现在第一个窗口也出现了同样的问题,直到点击标题为止。

请问问题出在哪里?或者该去哪里找?

附加的文件:
123123123.gif  504 kb
 

我下载了软件包,并创建了 CTable 的图形用户界面演示。

#include <\\EasyAndFastGUI\\WndEvents.mqh>

//+------------------------------------------------------------------+
//| 创建应用程序的类|
//+------------------------------------------------------------------+
class CGUI : public CWndEvents {
  private:
    CWindow           m_window;
    CTable            m_table;

  public:
    bool              CreateGUI(const int x, const int y, const string caption_text);

  private:
    bool              CreateWindow(const int x, const int y, const int x_size, const int y_size, const string text);
    bool              CreateTable(const int x_gap, const int y_gap);
};

bool CGUI::CreateGUI(const int x, const int y, const string caption_text) {
  int x_size = 400,
      y_size = 400;
  
  if (!CreateWindow(x, y, x_size, y_size, caption_text)) {
    return(false);
  }

  if (!CreateTable(1, 20)) {
    return(false);
  }

  m_chart.Redraw();
  return(true);
}

//+------------------------------------------------------------------+
//| 为控件创建表格 1|
//+------------------------------------------------------------------+
bool CGUI::CreateWindow(const int x, const int y, const int x_size, const int y_size, const string caption_text) {
  CWndContainer::AddWindow(m_window);

  m_window.XSize(x_size);
  m_window.YSize(y_size);
  m_window.Alpha(255);

  m_window.IsMovable(true);
  m_window.ResizeMode(true);
  m_window.CloseButtonIsUsed(true);
  m_window.FullscreenButtonIsUsed(true);
  m_window.CollapseButtonIsUsed(true);
  m_window.TooltipsButtonIsUsed(true);
  m_window.RollUpSubwindowMode(true, true);
  m_window.TransparentOnlyCaption(true);

  //--- 设置工具提示
  m_window.GetCloseButtonPointer().Tooltip("Close");
  m_window.GetFullscreenButtonPointer().Tooltip("Fullscreen/Minimize");
  m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  m_window.GetTooltipButtonPointer().Tooltip("Tooltips");

  m_window.BackColor((color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND));
  m_window.BorderColor(clrMaroon);

  return(m_window.CreateWindow(m_chart_id, m_subwin, caption_text, x, y));
}

//+------------------------------------------------------------------+
//| 创建渲染表|
//+------------------------------------------------------------------+
bool CGUI::CreateTable(const int x_gap,const int y_gap) {
  m_table.MainPointer(m_window);

  int x_size = 300,
      y_size = 300;

  int column_width[] = {100, 200};

  m_table.XSize(x_size);
  m_table.YSize(y_size);

  m_table.TableSize(2, 10);

  m_table.ColumnsWidth(column_width);
  m_table.CellYSize(30);

  ENUM_ALIGN_MODE column_align[];
  ArrayResize(column_align, 2);
  ::ArrayInitialize(column_align, ALIGN_RIGHT);
  m_table.TextAlign(column_align);

  color bg_color = (color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND);
  m_table.CellColor(bg_color);
  m_table.GridColor(bg_color);
  m_table.BorderColor(bg_color);
  m_table.FontSize(12);

  /*
 CScrollV *scroll_v = m_table.GetScrollVPointer();
 scroll_v.ChangeThumbSize(0, 0);
 scroll_v.Hide();
 scroll_v.IsVisible(false); CScrollH *scroll_h = m_table.GetScrollHPointer(); scroll_h.IsVisible(false);

 CScrollH *scroll_h = m_table.GetScrollHPointer();
 scroll_h.ChangeThumbSize(0, 0);
 scroll_h.Hide();
 scroll_h.IsVisible(false);
 //*/
   

  //m_table.TextXOffset(5);
  //m_table.TextYOffset(4);
  m_table.ShowHeaders(false);
  m_table.SelectableRow(false);
  m_table.ColumnResizeMode(false);
  //m_table.IsZebraFormatRows(clrWhiteSmoke);
  //m_table.AutoXResizeMode(true);
  //m_table.AutoXResizeRightOffset(1);
  //m_table.AutoYResizeMode(true);
  //m_table.AutoYResizeBottomOffset(25);

  if (!m_table.CreateTable(x_gap, y_gap)) {
    return(false);
  }

  CWndContainer::AddToElementsArray(0, m_table);

  m_table.Update(true);

  m_window.Update(true);

  return(true);
}

//+------------------------------------------------------------------+
//| 专家初始化函数|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   CGUI gui;
   gui.CreateGUI(10, 50, "Test GUI");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 专家去初始化函数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| 专家勾选功能|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

但我发现 CTable 控件总是会留下 H/V 滚动条空间,我无法通过 Hide() 和 IsVisiable(false) 将其删除


所以,你能给我一个解决方法吗?

非常感谢、

戴维

 

也许这个问题已经有人讨论过了,但我没有看到。在图表中添加新对象(如线条)后,如何使面板重绘?


我注意到,如果我最小化面板,它就已经在这些线条的上方了,但不是所有线条 :(((



 
traderEvgen:

也许这个问题已经有人讨论过了,但我没有看到。如何在图表中添加新对象(例如线条)后使面板重绘?

  • 下载最新版本的库。
  • 尝试调用CWndEvents::ResetWindow() 方法。

附注:程序库 将不再更新。所有必要的更改、修正和添加,如果有此需要,用户应学会自行完成。

 
Anatoli Kazharski:

  • 下载最新版本的库。
  • 尝试调用CWndEvents::ResetWindow() 方法。

附注: 该程序库将不再更新。所有必要的更改、修正和添加,如果需要,用户应学会自己进行。


明白,谢谢

 

不幸的是,不同的构建(发布)版本并不兼容。

我的意思是:从 Article01 到 Article11 的所有示例都应该能正常运行,不会出错。

然而,编译器却在前面的示例中抛出了很多警告和错误。


通过 "复制 "新版本,旧版本的示例就不再工作了。

此外,翻译不充分或根本不存在。

好极了!


这是一种耻辱,也是 Metaquotes 的许多典型问题。

是时候在网上发布一个功能齐全的完整版本了,而不仅仅是不兼容的零碎文件。

样本文件的目录,以及在哪里可以找到缺少的内容。这将是本系列最后一篇文章的主题,因为有传言说它将不会继续。

如果没有可用的示例,浪费了所有的工作就太可惜了。

奥托-保泽尔

我们还缺少一个对话编辑器!

 

我要试试