文章 "如何创建任意复杂度的图形面板" - 页 12 1...567891011121314 新评论 Quan tum 2021.09.02 09:06 #111 Vladimir Karputov #:这是禁止的。面板与图表相连。 非常感谢。我明白了 我还想问一个问题。 我想创建一个面板来显示一些表格,就像这样 但我只能找到下面的控件,这是否意味着面板不支持创建表格,谢谢。 文本标签 基于 "文本标签 "图形对象的控件 CBmpButton 基于 "位图标签 "图形对象的控件 CButton 控件,基于 "按钮 "图形对象 CEdit 控件,基于 "编辑栏 "图形对象 面板 基于 "矩形标签 "的控件 图片 控件,基于 "位图标签 Documentation on MQL5: Standard Library / Panels and Dialogs / CEdit www.mql5.com CEdit - Panels and Dialogs - Standard Library - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5 Vladimir Karputov 2021.09.02 09:09 #112 Quan tum # :非常感谢我明白了请允许我再问一个问题。我想创建一个面板来显示一些表格,就像这样 但我只能找到下面的控件,这是否意味着面板不支持创建表格,谢谢。 文本标签 基于 "文本标签 "图形对象的控件 CBmpButton 基于 "位图标签 "图形对象的控件 CButton 控件,基于 "按钮 "图形对象 CEdit 控件,基于 "编辑栏 "图形对象 面板 基于 "矩形标签 "的控件 图片 控件,基于 "位图标签 您需要自己创建表格。请在文章和 CodeBase 中查找示例。 Quan tum 2021.09.02 09:15 #113 Vladimir Karputov #:您需要自己创建表格。请在文章和 CodeBase 中查找示例。 好的,非常感谢。我想也是。 我会尝试在文章和代码库中找到它们。 再次感谢您的 支持 。 Noralden mama 2021.11.15 09:25 #114 喜欢 Vasiliy Pushkaryov 2021.12.21 10:12 #115 我正试图创建一个垂直滚动条,而不链接到面板,只在图表上显示,但由于某些原因无法正常工作。 例如,对于复选框,这段代码会对鼠标点击做出反应。勾号会出现和消失。 #include <Controls\CheckBox.mqh> CCheckBox Chbox; //+------------------------------------------------------------------+ void OnInit() { Chbox.Create(0, "MyCheckBox", 0, 20, 20, 100, 40); ChartRedraw(); } //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { Chbox.OnEvent(id, lparam, dparam, sparam); } //+------------------------------------------------------------------+ 但是对于垂直滚动条,鼠标点击没有任何反应。 #include <Controls\Scrolls.mqh> CScrollV Scroll; void OnInit() { Scroll.Create(0, "MyScrollV", 0, 20, 20, 40, 200); ChartRedraw(); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { Scroll.OnEvent(id, lparam, dparam, sparam); } //+------------------------------------------------------------------+ 请问谁知道如何让这种组合元素在图表上工作? Nextor 2022.03.16 20:01 #116 您能告诉我如何调用对话框 吗? 例如,我创建了一个面板,面板上有一个按钮 "关闭所有位置"。当我点击这个按钮时,应该弹出一个 "您确定吗?是/否。如何实现? 目前,我继承了 CAppDialog,创建了一个带有 "确定"/"取消 "按钮的小表单。当点击 "确定 "按钮时,我添加了一行内容 gDialogForm.Destroy(); ChartRedraw(); 如何解决? Vitaly Muzichenko 2022.03.16 20:04 #117 Nextor 对话框 吗? 例如,我创建了一个面板,面板上有一个按钮 "关闭所有位置"。当我点击这个按钮时,应该弹出一个 "您确定吗?是/否。如何实现? 目前,我继承了 CAppDialog,创建了一个带有 "确定"/"取消 "按钮的小表单。当点击 "确定 "按钮时,我添加了一行内容但对话表单仍留在屏幕上。 如何解决这个问题? void OnChartEvent(const int id, // 事件 ID const long& lparam, // 长事件类型参数 const double& dparam, // 双事件类型参数 const string& sparam // 参数类型为字符串事件 ) { // 关闭所有账户 if(id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,"ClosePos",0)!=-1)) { int MB=MessageBox("Close All Positions\nAccount Profit= "+DoubleToString(AccountInfoDouble(ACCOUNT_PROFIT),2), "Close All Positions?", MB_OKCANCEL|MB_ICONQUESTION); if(MB==1) ClosePosSortProfit("", -1, -1, clrGray); } } Vasiliy Pushkaryov 2022.03.16 20:08 #118 Nextor 对话框 吗? 例如,我创建了一个面板,面板上有一个按钮 "关闭所有位置"。当我点击这个按钮时,应该弹出一个 "您确定吗?是/否。如何实现? 目前,我继承了 CAppDialog,创建了一个带有 "确定"/"取消 "按钮的小表单。当点击 "确定 "按钮时,我添加了一行内容但对话表单仍留在屏幕上。 如何解决这个问题? 也许这条 评论会有所帮助 Vladimir Karputov 2022.03.17 05:11 #119 Nextor 对话框 吗? 例如,我创建了一个面板,面板上有一个按钮 "关闭所有位置"。当我点击这个按钮时,应该弹出一个 "您确定吗?是/否。如何实现? 目前,我继承了 CAppDialog,创建了一个带有 "确定"/"取消 "按钮的小表单。当点击 "确定 "按钮时,我添加了一行内容但对话表单仍留在屏幕上。 如何解决这个问题? 以关闭图表 面板为例,在点击处理程序中插入 "MessageBox "调用。 在 "Close On Chart Panel Dialog.mqh "文件中进行这些更改: //+------------------------------------------------------------------+ //| 事件处理程序| //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton1(void) { int answer=MessageBox("Close all Sell?","Close all Sell",MB_OKCANCEL|MB_ICONQUESTION); if(answer==IDOK) { Print(__FUNCTION__); m_trading_engine.ClosePositions(POSITION_TYPE_SELL); } } //+------------------------------------------------------------------+ //| 事件处理程序| //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton2(void) { int answer=MessageBox("Close all Buy?","Close all Buy",MB_OKCANCEL|MB_ICONQUESTION); if(answer==IDOK) { Print(__FUNCTION__); m_trading_engine.ClosePositions(POSITION_TYPE_BUY); } } //+------------------------------------------------------------------+ //| 事件处理程序| //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton3(void) { int answer=MessageBox("Close all Profit?","Close all Profit",MB_OKCANCEL|MB_ICONQUESTION); if(answer==IDOK) { Print(__FUNCTION__); m_trading_engine.CloseProfitPositions(); } } //+------------------------------------------------------------------+ //| 事件处理程序| //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton4(void) { int answer=MessageBox("Close all Loss?","Close all Loss",MB_OKCANCEL|MB_ICONQUESTION); if(answer==IDOK) { Print(__FUNCTION__); m_trading_engine.CloseLossPositions(); } } 结果: Close On Chart Panel www.mql5.com Советник-утилита. Панель на базе класса CDialog. Кнопки на базе класса СButton. Четыре кнопки для закрытия BUY, SELL, всех прибыльных, всех убыточных. Работа по текущему символу Seyedmasoud Hashemi 2022.08.13 23:35 #120 您好,感谢您的精彩教程 我想自己做一个,在我的面板中,点击一个按钮,另一个按钮应该是禁用和隐藏的,当我点击隐藏按钮的区域时,它将是隐藏的,它仍然工作 我把代码放在这里,如果您能帮助我,那就太好了 指标: //+------------------------------------------------------------------+ //|Indicator_Q_Test.mq4 //| Copyright 2020, MetaQuotes Software Corp.| //|https://www.mql5.com || //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window #include <WinUser32.mqh> #include "PanelDialog_Q.mqh" CPanelDialogQ ExtDialog; //+------------------------------------------------------------------+ //| 自定义指示器初始化函数 //+------------------------------------------------------------------+ int OnInit() { //--- 指示器缓冲区映射 if(!ExtDialog.CreateQ(0,"Question",0,100,100,400,230,"This the test Question?")) return(INIT_FAILED); //--- 运行应用程序 if(!ExtDialog.Run()) return(INIT_FAILED); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 自定义指标迭代函数| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //--- 为下一次调用返回 prev_calculated 的值 return(rates_total); } //+------------------------------------------------------------------+ //| 图表事件函数| //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- ExtDialog.ChartEvent(id,lparam,dparam,sparam); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtDialog.Destroy(reason); } 类 //+------------------------------------------------------------------+ //|PanelDialog.mqh //| 2009-2015, MetaQuotes Software Corp.版权所有。| //|http://www.mql5.com || //+------------------------------------------------------------------+ #include <Controls\Dialog.mqh> #include <Controls\Button.mqh> #include <Controls\Edit.mqh> #include <Controls\ListView.mqh> #include <Controls\ComboBox.mqh> #include <Controls\SpinEdit.mqh> #include <Controls\RadioGroup.mqh> #include <Controls\CheckGroup.mqh> #include <Controls\Label.mqh> #include <Controls\Scrolls.mqh> //+------------------------------------------------------------------+ //| defines| //+------------------------------------------------------------------+ //-- 缩进和间隙 #define INDENT_LEFT_ScrollQ (11) // 从左缩进(考虑到边框宽度)(仅适用于滚动条) #define INDENT_LEFTQ (11) // 从左缩进(考虑到边框宽度) #define INDENT_TOPQ (11) // 从顶部开始缩进(考虑到边框宽度) #define INDENT_RIGHTQ (11) // 从右边开始缩进(考虑到边框宽度) #define INDENT_BOTTOMQ (11) // 从底部开始缩进(考虑到边框宽度) #define CONTROLS_GAP_XQ (80) // X 坐标的间隙 #define CONTROLS_GAP_YQ (40) // 按 Y 坐标计算的间隙 //--- 用于按钮 #define BUTTON_WIDTHQ (60) // 按 X 坐标计算大小 #define BUTTON_HEIGHTQ (20) // 根据 Y 坐标确定尺寸 //--- 指示区域 #define EDIT_HEIGHTQ (20) // 根据 Y 坐标确定尺寸 #define GROUP_WIDTHQ (150) // 按 X 坐标计算大小 #define LIST_HEIGHTQ (379) // 根据 Y 坐标确定尺寸 #define RADIO_HEIGHTQ (56) // 根据 Y 坐标确定尺寸 #define CHECK_HEIGHTQ (93) // 根据 Y 坐标确定尺寸 //+------------------------------------------------------------------+ //| CPanelDialog 类| //| 使用方法:SimplePanel 应用程序的主对话框 //+------------------------------------------------------------------+ class CPanelDialogQ : public CAppDialog { private: CLabel m_Label_Q_text; CButton m_button_Yes; CButton m_button_No; //**************************************************** public: CPanelDialogQ(void); ~CPanelDialogQ(void); //--- 创建 virtual bool CreateQ(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2,string QText); //--- 图表事件处理程序 virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); protected: //--- 创建从属控件 bool CreateLabel_Q_text(string QT); bool CreateButton_Yes(void); bool CreateButton_No(void); void OnClick_button_Yes(void); void OnClick_button_No(void); }; //+------------------------------------------------------------------+ //| 事件处理| //+------------------------------------------------------------------+ EVENT_MAP_BEGIN(CPanelDialogQ) //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ ON_EVENT(ON_CLICK,m_button_Yes,OnClick_button_Yes) ON_EVENT(ON_CLICK,m_button_No,OnClick_button_No) //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ EVENT_MAP_END(CAppDialog) //+------------------------------------------------------------------+ //| 构造函数| //+------------------------------------------------------------------+ CPanelDialogQ::CPanelDialogQ(void) { } //+------------------------------------------------------------------+ //| 销毁器| //+------------------------------------------------------------------+ CPanelDialogQ::~CPanelDialogQ(void) { } //+------------------------------------------------------------------+ //| 创建| //+------------------------------------------------------------------+ bool CPanelDialogQ::CreateQ(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2,string QText) { if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2)) return(false); //--- 创建从属控件 if(!CreateLabel_Q_text(QText)) return(false); if(!CreateButton_Yes()) return(false); if(!CreateButton_No()) return(false); //--- 成功 return(true); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool CPanelDialogQ::CreateLabel_Q_text(string QT) { //--- 坐标 int x1=INDENT_LEFTQ; int y1=INDENT_TOPQ; int x2=ClientAreaWidth()-(INDENT_RIGHTQ+BUTTON_WIDTHQ+CONTROLS_GAP_XQ); int y2=y1+EDIT_HEIGHTQ; //--- 创建 if(!m_Label_Q_text.Create(m_chart_id,"QT",m_subwin,x1,y1,x2,y2)) return(false); if(!m_Label_Q_text.Text(QT)) return(false); if(!m_Label_Q_text.FontSize(12)) return(false); if(!m_Label_Q_text.Color(clrBlack)) return(false); if(!m_Label_Q_text.ColorBorder(clrBlack)) return(false); if(!m_Label_Q_text.ColorBackground(clrBlack)) return(false); // if(!m_edit.ReadOnly(true)) // return(false); if(!Add(m_Label_Q_text)) return(false); m_Label_Q_text.Alignment(WND_ALIGN_WIDTH,INDENT_LEFTQ,0,INDENT_RIGHTQ+BUTTON_WIDTHQ+CONTROLS_GAP_XQ,0); //--- 成功 return(true); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool CPanelDialogQ::CreateButton_Yes(void) { //--- 坐标 int x1=INDENT_LEFTQ; int y1=INDENT_TOPQ+CONTROLS_GAP_YQ; int x2=x1+BUTTON_WIDTHQ; int y2=y1+BUTTON_HEIGHTQ; //--- 创建 if(!m_button_Yes.Create(m_chart_id,m_name+"Yes",m_subwin,x1,y1,x2,y2)) return(false); if(!m_button_Yes.Text("Yes")) return(false); if(!Add(m_button_Yes)) return(false); m_button_Yes.Alignment(WND_ALIGN_RIGHT,0,0,INDENT_RIGHTQ+CONTROLS_GAP_XQ*2,0); //--- 成功 return(true); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool CPanelDialogQ::CreateButton_No(void) { //--- 坐标 int x1=INDENT_LEFTQ+CONTROLS_GAP_XQ; int y1=INDENT_TOPQ+CONTROLS_GAP_YQ; int x2=x1+BUTTON_WIDTHQ; int y2=y1+BUTTON_HEIGHTQ; //--- 创建 if(!m_button_No.Create(m_chart_id,m_name+"NO",m_subwin,x1,y1,x2,y2)) return(false); if(!m_button_No.Text("NO")) return(false); if(!Add(m_button_No)) return(false); m_button_No.Alignment(WND_ALIGN_RIGHT,0,0,INDENT_RIGHTQ+CONTROLS_GAP_XQ*1,0); //--- 成功 return(true); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void CPanelDialogQ::OnClick_button_Yes(void) { Print("OnClick_button_Yes", "Last Error: ",GetLastError()); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void CPanelDialogQ::OnClick_button_No(void) { Print("OnClick_button_No", "Last Error: ",GetLastError()); m_button_Yes.Hide(); m_button_Yes.Disable(); m_button_Yes.Deactivate(); } //+------------------------------------------------------------------+ 1...567891011121314 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这是禁止的。面板与图表相连。
非常感谢。我明白了
我还想问一个问题。
我想创建一个面板来显示一些表格,就像这样
但我只能找到下面的控件,这是否意味着面板不支持创建表格,谢谢。
文本标签
基于 "文本标签 "图形对象的控件
CBmpButton
基于 "位图标签 "图形对象的控件
CButton
控件,基于 "按钮 "图形对象
CEdit
控件,基于 "编辑栏 "图形对象
面板
基于 "矩形标签 "的控件
图片
控件,基于 "位图标签
非常感谢我明白了
请允许我再问一个问题。
我想创建一个面板来显示一些表格,就像这样
但我只能找到下面的控件,这是否意味着面板不支持创建表格,谢谢。
文本标签
基于 "文本标签 "图形对象的控件
CBmpButton
基于 "位图标签 "图形对象的控件
CButton
控件,基于 "按钮 "图形对象
CEdit
控件,基于 "编辑栏 "图形对象
面板
基于 "矩形标签 "的控件
图片
控件,基于 "位图标签
您需要自己创建表格。请在文章和 CodeBase 中查找示例。
您需要自己创建表格。请在文章和 CodeBase 中查找示例。
好的,非常感谢。我想也是。
我会尝试在文章和代码库中找到它们。
再次感谢您的 支持 。
我正试图创建一个垂直滚动条,而不链接到面板,只在图表上显示,但由于某些原因无法正常工作。
例如,对于复选框,这段代码会对鼠标点击做出反应。勾号会出现和消失。
但是对于垂直滚动条,鼠标点击没有任何反应。
请问谁知道如何让这种组合元素在图表上工作?
您能告诉我如何调用对话框 吗?
例如,我创建了一个面板,面板上有一个按钮 "关闭所有位置"。当我点击这个按钮时,应该弹出一个 "您确定吗?是/否。如何实现?
目前,我继承了 CAppDialog,创建了一个带有 "确定"/"取消 "按钮的小表单。当点击 "确定 "按钮时,我添加了一行内容
gDialogForm.Destroy(); ChartRedraw();如何解决?
例如,我创建了一个面板,面板上有一个按钮 "关闭所有位置"。当我点击这个按钮时,应该弹出一个 "您确定吗?是/否。如何实现?
目前,我继承了 CAppDialog,创建了一个带有 "确定"/"取消 "按钮的小表单。当点击 "确定 "按钮时,我添加了一行内容
但对话表单仍留在屏幕上。
如何解决这个问题?
例如,我创建了一个面板,面板上有一个按钮 "关闭所有位置"。当我点击这个按钮时,应该弹出一个 "您确定吗?是/否。如何实现?
目前,我继承了 CAppDialog,创建了一个带有 "确定"/"取消 "按钮的小表单。当点击 "确定 "按钮时,我添加了一行内容
但对话表单仍留在屏幕上。
如何解决这个问题?
例如,我创建了一个面板,面板上有一个按钮 "关闭所有位置"。当我点击这个按钮时,应该弹出一个 "您确定吗?是/否。如何实现?
目前,我继承了 CAppDialog,创建了一个带有 "确定"/"取消 "按钮的小表单。当点击 "确定 "按钮时,我添加了一行内容
但对话表单仍留在屏幕上。
如何解决这个问题?
以关闭图表 面板为例,在点击处理程序中插入 "MessageBox "调用。
在 "Close On Chart Panel Dialog.mqh "文件中进行这些更改:
结果:
您好,感谢您的精彩教程
我想自己做一个,在我的面板中,点击一个按钮,另一个按钮应该是禁用和隐藏的,当我点击隐藏按钮的区域时,它将是隐藏的,它仍然工作
我把代码放在这里,如果您能帮助我,那就太好了
指标:
类