一套自由形式的按钮类 - MetaTrader 5程序库
- 显示:
- 2316
- 等级:
- 已发布:
- 2015.04.17 13:13
- 已更新:
- 2016.11.22 07:33
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
这个类设计用于创建价格图表上的多种交互按钮。
开发此类是为了参加由慷慨的 TheXpert 举办的大赛。多谢您。
类 CBtn 的演示
类方法
Create(long chart_id,int sub_wnd,string name,int x,int y,int dx,int dy) - 创建带参数的按钮:
- 窗口标识符
- 子窗口号码
- 按钮名称
- X 坐标
- Y 坐标
- 水平尺寸
- 垂直尺寸
Resources(string img_up,string img_up_active="",string img_dn="",string img_dn_active="",string img_up_disable="",string img_dn_disable="",string img_mask="") - 定义按钮的不同状态图像:
- 正常未按压按钮
- 按钮被光标悬浮
- 按压按钮
- 按压的按钮被光标悬浮
- 禁止按钮
- 按钮轮廓蒙版
SetUseMask(ENUM_USEMASK mask,int x=0,int y=0) - 设置指定像素颜色的蒙版; 蒙版从标准未按压按钮图像形成。
- 使用蒙版类型
- X 坐标
- Y 坐标
SetUseMask(ENUM_USEMASK mask,uint acolor) - 设置蒙版颜色; 蒙版从标准未按压按钮图像形成。
- 使用蒙版类型
- 颜色
SetCorner(ENUM_BASE_CORNER corner) - 设置按钮位于图表角落的锚点
SetAnchor(ENUM_ANCHOR_POINT anchor) - 设置锚点类型
SetX(int x) - 设置 X 坐标
SetY(int y) - 设置 Y 坐标
SetXY(int x,int y) - 单一方法设置 X 和 Y 坐标
On(bool state) - 设置按钮状态 (true 按压, false 未按压)
Enable(bool state) - 启用/禁用按钮
Paint(void) - 绘制按钮
Event(int id,long lparam,double dparam,string sparam) - 传递事件至按钮
所有参数从 OnChartEvent 函数复制
GetX(void) - 获取 X 坐标
GetY(void) - 获取 Y 坐标
GetEnable(void) - 获取启用/禁用状态
GetOn(void) - 获取按压/未按压状态
GetCorner(void) - 获取按钮位于图表角落的锚点
GetAnchor(void) - 获取锚点类型
AddText(int x,int y,string font_name,int font_size,color text_color,string text) - 添加按钮文本
- X 坐标
- Y 坐标
- 字体名称
- 字体大小
- 文本颜色
- 文本
Text(string text) - 更新按钮文本 (未调用 AddText(...) 则不工作)
创建按钮
省缺, 一个按钮有以下参数:
- 未按压
- 启用
- 图表左上角的锚点
- 按钮左上角锚点
设置按钮蒙版
省缺, 按钮从正常的未按压按钮图形创建。透明像素作为蒙版。
- UseMask(MASK_STANDALONE_RESOURCE) - 蒙版使用在 Resources() 里指定的图像。如果图像未设置, 整个按钮区域 (长方形) 将作为工作区域。
- UseMask(MASK_PIXEL,x,y) - 蒙版使用指定像素的颜色。如果像素颜色与指定颜色不匹配, 它变为蒙版。如果坐标未设置, 则使用 [0,0] 坐标。
- UseMask(MASK_COLOR,color) - 指定用于蒙版的颜色。如果像素颜色与指定颜色不匹配, 它变为蒙版。颜色应设置为 ARGB 格式。
例如
//+------------------------------------------------------------------+ //| 3dButtons.mq5 | //| Copyright 2015, fyords | //| https://login.mql5.com/ru/users/fyords | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, fyords" #property link "https://www.mql5.com/en/users/fyords" #property version "1.01" //+------------------------------------------------------------------+ //| Insert resources | //+------------------------------------------------------------------+ #resource "img\\200_1.bmp" #resource "img\\200_2.bmp" #resource "img\\200_3.bmp" #resource "img\\200_4.bmp" #resource "img\\200_5.bmp" #resource "img\\200_6.bmp" //+------------------------------------------------------------------+ #include "Class.mqh" //+------------------------------------------------------------------+ enum Adjust { UpperLeft, UpperRight, LowerLeft, LowerRight }; //+------------------------------------------------------------------+ //| Input property | //+------------------------------------------------------------------+ input Adjust adj_corner=UpperLeft; //Corner //+------------------------------------------------------------------+ //| Global variables | //+------------------------------------------------------------------+ CBtn *btn[]; int num_buttons; //+------------------------------------------------------------------+ //| Initialization function | //+------------------------------------------------------------------+ int OnInit() { long wnd=ChartID(); int sub_wnd=ChartWindowOnDropped(); ArrayFree(btn); int n=0; num_buttons=0; for(int y=0;y<3;y++) { for(int x=0;x<3;x++) { ArrayResize(btn,n+1); btn[n]=new CBtn; btn[n].Create(wnd,sub_wnd,"3dButtons_"+(string)MathRand(),x*152+10,y*152+10,200,200); btn[n].Resources("img\\200_1.bmp","img\\200_2.bmp","img\\200_3.bmp","img\\200_4.bmp","img\\200_5.bmp","img\\200_6.bmp"); btn[n].AddText(80,80,"Arial",25,clrWhite,"Button"+(string)(n+1)); switch(adj_corner) { case UpperLeft: btn[n].SetAnchor(ANCHOR_LEFT_UPPER); btn[n].SetCorner(CORNER_LEFT_UPPER); break; case UpperRight: btn[n].SetAnchor(ANCHOR_RIGHT_UPPER); btn[n].SetCorner(CORNER_RIGHT_UPPER); break; case LowerLeft: btn[n].SetAnchor(ANCHOR_LEFT_LOWER); btn[n].SetCorner(CORNER_LEFT_LOWER); break; case LowerRight: btn[n].SetAnchor(ANCHOR_RIGHT_LOWER); btn[n].SetCorner(CORNER_RIGHT_LOWER); break; } btn[n].Paint(); n++; } } ChartRedraw(); num_buttons=ArraySize(btn); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(int i=0;i<num_buttons;i++) delete btn[i]; ArrayFree(btn); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { for(int i=0;i<num_buttons;i++) btn[i].Event(id,lparam,dparam,sparam); }
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/12637
此指标在同一时间显示当前点差和距收盘的剩余时间 (蜡烛条)。
AFL_Winner_Signal此 AFL_Winner_Signal 指标基于 AFL_Winner 指标显示当前趋势信息和信号。