文章 "图形界面 XI: 渲染控件 (统合构建14.2)" - 页 3

 
Artyom Trishkin:

Tol,您可以在本系列的哪些文章中阅读到有关 CKeys 的信息?

...

例如:我启动了一个程序并开始按 Backspace 键--每次按 Backspace 键都会删除所有控件,从最后添加的控件开始。最后,已经清空的窗体窗口也会被删除。

...


图形用户界面 X:多行文本输入框元素(第 8 版)

无法重现按Backspace 键删除图形用户界面元素的情况。

 
Artyom Trishkin:

如果在 TestLibrary14 的 Program.mqh 中写入一行内容--更改窗口标题颜色

那么最小化窗口后,颜色将返回默认值。而工具提示、最小化/取消修改和关闭按钮则会以程序设置的窗口标题颜色重新绘制。只有当光标悬停在上面时,这些按钮的颜色才会变为默认颜色。

...

我忘了添加鼠标悬停时更改表单标题颜色的功能。这将在下一次更新中加入。

现在,两种状态都需要设置颜色:

...
   m_window.CaptionColor(clrDimGray);
   m_window.CaptionColorHover(clrDimGray);
...

//---

对于按钮,可以通过其指针并在创建表格后设置颜色。

...
   m_window.GetCollapseButtonPointer().BackColorHover(clrGray);
   m_window.GetTooltipButtonPointer().BackColorHover(clrGray);
//---
   m_window.GetCollapseButtonPointer().BackColorPressed(clrGray);
   m_window.GetTooltipButtonPointer().BackColorPressed(clrGray);
...

//---


 

我认为,文章中使用的 "库核心 "一词不太正确。早些时候曾使用过 "库引擎 "一词,但并不十分合适。

核心 "一词应该指的是一个静态数组,它将所有必要的信息组合在一起,而 "引擎 "一词应该指的是一种机制,它利用这些信息来执行一系列任务。

程序设计中的 "库 "一词指的是多样化、分散和独立的功能,是解决一系列任务的工具包,而不是围绕一个中心。这种工具包既不是 "引擎",也不是 "内核",而只是一套用于构建用户机制的工具。

如果一个库包含一个内核和一个引擎,那么它就不再是一个库,而是一个作为一个整体运作的系统。

将图形库转变为创建图形用户界面的整体机制是一个自然的发展阶段,在这之后,图形库本身将不复存在。也就是说,不再需要分散的功能,因为现成的机制可以更有效地解决一系列任务。

也许现在图书馆正在变成这样一种机制,但目前还没有实现。因此,库的 "核心 "和 "引擎 "这两个词并不完全正确。

我认为

 

您好,这套控件 非常不错,很有帮助,但如果能更好地处理更高的 DPI 设置就更好了。

很明显,位图可以正确显示,但文字却不行。如下图所示,文本被下移和剪切:

我使用的显示设置如下


 
Artur Zas:

您好,这套控件真的很不错,很有帮助,但如果能更好地处理更高的 DPI 设置就更好了。

很明显,位图可以正确显示,但文字却不行。如下图所示,文字被下移和剪切:

我使用的显示设置如下


 
Facundo Laje:
你好,它可以与 MT4 一起使用吗?

 
Facundo Laje:
您好,它可以用于 MT4 吗?

从技术上讲可以,因为 OBJ-BITMAP_LABEL 在 MQL4 中也可用,但您需要调整库代码,因为有几处代码无法使用 MQL4 编译器编译。

我会尝试使用该库,如果能将其移植到 MQL4,我会通知您。您也可以自己尝试。只需将示例 EA 的 .mq5 扩展名重命名为 .mq4 并尝试编译代码。

显然,您会遇到编译错误,但您可以检查 错误的位置和内容。

 

你好、

我正试着根据这一系列文章开发我自己的控制面板...我对多窗口模式部分(第 04 条)很感兴趣,但我使用了更新的 Library14(第 10 条)。

我目前的成果(见附图):


图像1

图像2

我漏掉了什么,因为窗口 2 和窗口 3 没有移动,按下关闭按钮和 colapse 按钮时也没有关闭。

下面是窗口 2 和窗口 3 的代码部分:

//-------- Window2-------
#resource "\\Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp"
bool CmyPanel_Test2::CreateWindow2(const string caption_text)
  {
//--- 存储窗口指针
   CWndContainer::AddWindow(m_window2);
    m_window2.MainPointer(m_mb_contextmenu1);
//--- 坐标
   int x =(m_window2.X()>0) ? m_window2.X() : 100;
   int y =(m_window2.Y()>0) ? m_window2.Y() : 100;
//--- 属性
   m_window2.Movable(true);
   m_window2.Alpha(200);
   m_window2.XSize(300);
   m_window2.YSize(100);
   m_window2.IconXGap(3);
   m_window2.IconYGap(2);
   m_window2.WindowType(W_DIALOG);
   m_window2.CloseButtonIsUsed(true);
   m_window2.GetCloseButtonPointer().Tooltip("Close");
   m_window2.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
   m_window2.IconFile("Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp");
//--- 创建表格
   if(!m_window2.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }
//------------------Window3----------------
bool CmyPanel_Test2::CreateWindow3(const string caption_text)
  {
//--- 存储窗口指针
   CWndContainer::AddWindow(m_window3);
    m_window2.MainPointer(m_menubar);
//--- 坐标
   int x =(m_window2.X()>0) ? m_window2.X() : 100;
   int y =(m_window2.Y()>0) ? m_window2.Y() : 100;
//--- 属性
   m_window3.Movable(true);
   m_window3.Alpha(200);
   m_window3.XSize(200);
   m_window3.YSize(200);
   m_window3.IconXGap(3);
   m_window3.IconYGap(2);
   m_window3.WindowType(W_DIALOG);
   m_window3.CloseButtonIsUsed(true);
   m_window3.GetCloseButtonPointer().Tooltip("Close");
   m_window3.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
   m_window3.IconFile("Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp");
//--- 创建表格
   if(!m_window3.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }

以及 OnEvent 部分:

void CmyPanel_Test2::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {

   if(id==CHARTEVENT_CUSTOM+ON_CLICK_MENU_ITEM)
     {
      PRINT_EVENT(ON_CLICK_MENU_ITEM,id,lparam,dparam,sparam);
      return;
     }
//---
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
     {
     PRINT_EVENT(ON_CLICK_BUTTON,id,lparam,dparam,sparam);
     
     if(lparam==1 && dparam==1)
     {
      m_window3.Show();
      return;
     }
      return;
     }
//---
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_CONTEXTMENU_ITEM)
     {
      if (dparam==0)
      m_window2.Show();
      PRINT_EVENT(ON_CLICK_CONTEXTMENU_ITEM,id,lparam,dparam,sparam);
      return;
     }

谢谢。

 
zlory73:

你好、

我正试着根据这一系列文章开发我自己的控制面板...我对多窗口模式部分(第 04 条)很感兴趣,但我使用了更新的 Library14(第 10 条)。

我目前的成果(见附图):


我漏掉了什么,因为窗口 2 和窗口 3 没有移动,按下关闭按钮和 colapse 按钮时也没有关闭。

下面是窗口 2 和窗口 3 的代码部分:

以及 OnEvent 部分:

谢谢。


对不起,已修改:

bool CmyPanel_Test2::CreateWindow3(const string caption_text)
  {
//--- 存储窗口指针
   CWndContainer::AddWindow(m_window3);
    m_window3.MainPointer(m_window);

和:

bool CmyPanel_Test2::CreateWindow2(const string caption_text)
  {
//--- 存储窗口指针
   CWndContainer::AddWindow(m_window2);
    m_window2.MainPointer(m_window);

仍然没有结果...

请帮助1

 
Artur Zas:

从技术上讲,它应该可用,因为 OBJ-BITMAP_LABEL 在 MQL4 中也可用,但您需要调整库代码,因为有几处代码无法使用 MQL4 编译器编译。

我会尝试使用该库,如果能将其移植到 MQL4,我会通知您。您也可以自己尝试。只需将示例 EA 的 .mq5 扩展名重命名为 .mq4 并尝试编译代码。

显然,您会遇到编译错误,但您可以检查错误的位置和内容。