文章 "图形界面 X: 在多行文本框中选择文本 (集成构建 13)" - 页 7 1234567891011121314...16 新评论 Anatoli Kazharski 2017.04.26 13:50 #61 Konstantin: 方法X(const int x) 和 Y(const int y) 不会以任何方式影响表格在表单中的位置,它始终位于左上角在自定义类中创建元素时会设置 相对坐标://--- 创建一个控件 if(!m_canvas_table.CreateTable(m_chart_id,m_subwin,x_gap,y_gap)) return(false);//---任务是什么? Konstantin 2017.04.26 13:54 #62 Anatoli Kazharski:在自定义类中创建元素时会设置 相对坐标://---任务是什么?将两个表格水平放置,x_gap,y_gap 改变水平滚动的位置,就这样((.PS. 所以,看起来是移动了,但由于某些原因,两个表格被移动了 ))在该方法中CWndContainer::AddToElementsArray(0, m_table_pair.GetTbl());如果有两个表,第一个参数总是 0 还是相同对象的序列号?由于某种原因,第一个表一直移动到第二个表下面。 Anatoli Kazharski 2017.04.26 14:00 #63 Konstantin:...PS. 因此,它似乎发生了移动,但由于某种原因,有两张表发生了移动 ))而在该方法中:CWndContainer::AddToElementsArray(0, m_table_pair.GetTbl());如果有两个表,第一个参数总是 0 还是相同对象的序列号? 第一个参数是项目所属表格的编号。也许您在共同元素列表中添加了一个相同的表格。 Konstantin 2017.04.26 14:02 #64 Anatoli Kazharski: 第一个参数是附加元素的表格编号。也许您正在将同一个表格添加到项目的公共列表中。 在公共列表中是什么意思?下面是表单类中的创建方法:/*! \brief Create object \param const string a_name - program name \param const uint a_pause - pause for status line update \return true if successful, otherwise false */ bool CMainForm::Create(const string a_name,const uint a_pause) { m_counter500.SetParameters(16, a_pause); m_counter16.SetParameters(16, 16); if(!CreateForm(m_form, a_name)) return false; if(!CreateStatusBar(m_status_bar, m_form, 1, STATUS_SIZE_HEIGHT)) return false; if(!m_table_sign.Create(m_form, m_chart_id, m_subwin, 1, 20)) return false; if(!m_table_pair.Create(m_form, m_chart_id, m_subwin, 450, 20)) return false; //--- 将表格对象添加到对象组的通用数组中 CWndContainer::AddToElementsArray(0, m_table_sign.GetTbl()); CWndContainer::AddToElementsArray(0, m_table_pair.GetTbl()); m_chart.Redraw(); //--- return true; }GetTbl 方法 返回一个指向 CCanvasTable m_table 的指针 Anatoli Kazharski 2017.04.26 14:18 #65 Konstantin:...这是你想要的结果吗?//---我在档案中附上了一个示例: 附加的文件: TestLibrary11_05.zip 5 kb Anatoli Kazharski 2017.04.26 14:20 #66 Konstantin:这里是表单类中的创建方法:GetTbl 方法 返回指向 CCanvasTable m_table 的指针 //--- 创建一个控件 if(!m_canvas_table2.CreateTable(m_chart_id,m_subwin,x_gap,y_gap)) return(false); //--- 将对象添加到对象组的通用数组中 CWndContainer::AddToElementsArray(0,m_canvas_table2); Konstantin 2017.04.26 14:30 #67 Anatoli Kazharski:你想要这样的结果吗?//---档案中附有一个示例: 我是这样做的:/*! \brief Create object \param const string a_name - program name \param const uint a_pause - pause for status line update \return true if successful, otherwise false */ bool CMainForm::Create(const string a_name,const uint a_pause) { m_counter500.SetParameters(16, a_pause); m_counter16.SetParameters(16, 16); if(!CreateForm(m_form, a_name)) return false; if(!CreateStatusBar(m_status_bar, m_form, 1, STATUS_SIZE_HEIGHT)) return false; if(!m_table_sign.Create(m_form, m_chart_id, m_subwin, 1, 20)) return false; //--- 将表格对象添加到对象组的通用数组中 CWndContainer::AddToElementsArray(0, m_table_sign.GetTbl()); if(!m_table_pair.Create(m_form, m_chart_id, m_subwin, 450, 20)) return false; //--- 将表格对象添加到对象组的通用数组中 CWndContainer::AddToElementsArray(0, m_table_pair.GetTbl()); m_chart.Redraw(); //--- return true; }结果发现,在创建对象后,应立即将其放入容器中,然后再创建另一个对象 )) Konstantin 2017.04.26 14:32 #68 Anatoli Kazharski: 不,我把表格放在其他类中,我使用模块化编程 ))这样更便于管理功能--主表单类、表格类 1、表格类 2 等,最终所有元素都作为单独的现成对象组合在主表单类中。 Anatoli Kazharski 2017.04.26 14:38 #69 Konstantin: 不,我把表格放在其他类中,我使用模块化编程 ))这样更便于管理功能--主表单类、表单类 1、表单类 2 等。 同意。这个库的许多用户都是这样做的,但我无法使用。) Konstantin 2017.04.26 14:55 #70 Anatoli Kazharski: 我同意。这个图书馆的许多用户都是这么做的,但我就是拿不到。) 顺便说一下,有一个问题:CWndEvents::CWndEvents(void) : m_chart_id(0), m_subwin(0), m_active_window_index(0), m_indicator_shortname(""), m_program_name(PROGRAM_NAME), m_subwindow_handle(INVALID_HANDLE), m_subwindow_shortname(""), m_subwindows_total(1) { //--- 启动计时器 if(!::MQLInfoInteger(MQL_TESTER)) ::EventSetMillisecondTimer(TIMER_STEP_MSC); //--- 获取当前图表的 ID m_chart.Attach(); //--- 启用鼠标事件跟踪 m_chart.EventMouseMove(true); //--- 禁用命令行调用空格键和回车键 m_chart.SetInteger(CHART_QUICK_NAVIGATION,false); //-- 确定子窗口编号 DetermineSubwindow(); }选定的行不允许在测试器中工作。最好这样选择:enum ENUM_GRAPHICS { GRAPHICS_NO = 0, // 无需图形 GRAPHICS_REAL = 1, // 真实交易图表 GRAPHICS_TEST = 2 // 测试图形 }; /*! 获取运行程序的指示 */ ENUM_GRAPHICS CCheck::GetGraphics(void) { return m_graphics; } //-----------------------------------------------------------------------------+ /*! 图形显示的符号 (从 ENUM_GRAPHICS 枚举中返回程序运行的符号 */ ENUM_GRAPHICS CCheck::CheckGraphicsDisplay(void) { if(MQLInfoInteger(MQL_OPTIMIZATION) || (MQLInfoInteger(MQL_TESTER) && !MQLInfoInteger(MQL_VISUAL_MODE))) m_graphics = GRAPHICS_NO; else if(!MQLInfoInteger(MQL_OPTIMIZATION) && !MQLInfoInteger(MQL_TESTER) && !MQLInfoInteger(MQL_VISUAL_MODE)) m_graphics = GRAPHICS_REAL; else if(MQLInfoInteger(MQL_VISUAL_MODE)) m_graphics = GRAPHICS_TEST; //--- return m_graphics; }并在程序中做出这样的选择: //--- 设置 OnTimer() uint _pause = 0; if(in_param.graphics == GRAPHICS_REAL) _pause = 500; // 500 ms else if(in_param.graphics == GRAPHICS_TEST) _pause = 60000; // 1 分钟 if(!main_form.Create(name_mts, _pause)) { ::Print(__FUNCTION__," > 创建图形用户界面失败!"); return INIT_FAILED; }或直接使用标志进行选择 1234567891011121314...16 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
方法X(const int x) 和 Y(const int y) 不会以任何方式影响表格在表单中的位置,它始终位于左上角
在自定义类中创建元素时会设置 相对坐标:
//---
任务是什么?
在自定义类中创建元素时会设置 相对坐标:
//---
任务是什么?
将两个表格水平放置,x_gap,y_gap 改变水平滚动的位置,就这样((.
PS. 所以,看起来是移动了,但由于某些原因,两个表格被移动了 ))
在该方法中
CWndContainer::AddToElementsArray(0, m_table_pair.GetTbl());如果有两个表,第一个参数总是 0 还是相同对象的序列号?
由于某种原因,第一个表一直移动到第二个表下面。
...
PS. 因此,它似乎发生了移动,但由于某种原因,有两张表发生了移动 ))
而在该方法中:
CWndContainer::AddToElementsArray(0, m_table_pair.GetTbl());如果有两个表,第一个参数总是 0 还是相同对象的序列号?
第一个参数是附加元素的表格编号。也许您正在将同一个表格添加到项目的公共列表中。
在公共列表中是什么意思?
下面是表单类中的创建方法:
GetTbl 方法 返回一个指向 CCanvasTable m_table 的指针
...
这是你想要的结果吗?
//---
我在档案中附上了一个示例:
这里是表单类中的创建方法:
GetTbl 方法 返回指向 CCanvasTable m_table 的指针
你想要这样的结果吗?
//---
档案中附有一个示例:
我是这样做的:
结果发现,在创建对象后,应立即将其放入容器中,然后再创建另一个对象 ))
不,我把表格放在其他类中,我使用模块化编程 ))这样更便于管理功能--主表单类、表格类 1、表格类 2 等,最终所有元素都作为单独的现成对象组合在主表单类中。
不,我把表格放在其他类中,我使用模块化编程 ))这样更便于管理功能--主表单类、表单类 1、表单类 2 等。
我同意。这个图书馆的许多用户都是这么做的,但我就是拿不到。)
顺便说一下,有一个问题:
选定的行不允许在测试器中工作。最好这样选择:
并在程序中做出这样的选择:
或直接使用标志进行选择