文章 "研究CCanvas类如何绘制透明的图形对象" - 页 4 123456789 新评论 Vladimir Karputov 2016.05.30 17:21 #31 Artyom Trishkin: MQL4 ;)我不欢迎 MQL4。所有示例都只使用 MQL5。//+------------------------------------------------------------------+ //|测试。mq5 //|版权 © 2016, 弗拉基米尔-卡尔普托夫 || //|http://wmua.ru/slesar/ || //+------------------------------------------------------------------+ #property copyright "版权归弗拉基米尔-卡尔普托夫 2016 所有 #property link "http://wmua.ru/slesar/" #property version "1.00" #include <Canvas\Canvas.mqh> CCanvas m_canvas; // 画布对象 //+------------------------------------------------------------------+ //| 脚本程序启动功能| //+------------------------------------------------------------------+ void OnStart() { datetime arr_time[]; double arr_open[]; double arr_close[]; if(CopyTime(Symbol(),Period(),0,2,arr_time)==-1) return; if(CopyClose(Symbol(),Period(),0,2,arr_close)==-1) return; if(CopyOpen(Symbol(),Period(),0,2,arr_open)==-1) return; int x1,y1,x2,y2; if(!ChartTimePriceToXY(0,0,arr_time[0],arr_open[0],x1,y1)) Print("Error ",GetLastError()); if(!ChartTimePriceToXY(0,0,arr_time[1],arr_close[0],x2,y2)) Print("Error ",GetLastError()); //x1 = Time[1]; //y1 = Open[1]; //x2 = Time[0]; //y2 = Close[1]; Print("arr_time[0]=",arr_time[0],", arr_open[0]=",arr_open[0]); m_canvas.CreateBitmapLabel("COLOR_FORMAT_ARGB_NORMALIZE",x1,y1,MathAbs(x2-x1),MathAbs(y2-y1),COLOR_FORMAT_ARGB_NORMALIZE); m_canvas.Erase(ColorToARGB(clrBlue,200)); m_canvas.Update(); Sleep(10000); m_canvas.Destroy(); } //+------------------------------------------------------------------+ //| 获取图表宽度(以像素为单位)| //+------------------------------------------------------------------+ int ChartWidthInPixels(const long chart_ID=0) { //--- 准备变量以获取属性值 long result=-1; //-- 重置错误值 ResetLastError(); //--- 接收属性值 if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_PIXELS,0,result)) { //--- 在专家日志中显示错误信息 Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- 返回图表属性的值 return((int)result); } //+------------------------------------------------------------------+ //| 获取图表的高度(单位:像素 //+------------------------------------------------------------------+ int ChartHeightInPixelsGet(const long chart_ID=0,const int sub_window=0) { //--- 准备变量以获取属性值 long result=-1; //-- 重置错误值 ResetLastError(); //--- 接收属性值 if(!ChartGetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,result)) { //--- 在专家日志中显示错误信息 Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- 返回图表属性的值 return((int)result); } //+------------------------------------------------------------------+ 以及脚本的结果: Denis Kirichenko 2016.10.16 17:17 #32 弗拉基米尔,有一个问题想请教您这位专家。有一个画布形式的面板。然后在图表上绘制趋势线。如何将它们隐藏在画布后面? MetaTrader 交易平台截图 RTS Splice,上半年,2016.10.16 JSC ''Otkritie Broker'', MetaTrader 5, 演示版 Vladimir Karputov 2016.10.16 18:03 #33 Dennis Kirichenko:弗拉基米尔,有一个问题想请教您这位专家。有一个画布形式的面板。然后在图表上绘制趋势线。如何将它们隐藏在画布后面? 例如,破坏面板并重新绘制它们....。 Denis Kirichenko 2016.10.17 00:50 #34 好的,谢谢。到目前为止,我想出了一个办法,就是把对象放在后台....。 [删除] 2017.07.29 13:46 #35 Vladimir Karputov: 感谢您的文章。遗憾的是,里面所有的文档链接都坏了。 Vladimir Karputov 2017.07.29 14:01 #36 Alexey Kozitsyn: 感谢您的文章。不幸的是,其中的所有文档链接都已损坏。感谢您的留言--帮助已重建,因此出现了错误。我们将更正链接。 Mikhail Dovbakh 2017.07.29 22:53 #37 Vladimir Karputov:通过类 CCanvas?请使用 CCanvas.CreateBitmap:创建绑定到图表对象的图形资源。1.在当前图表的主窗口中创建图形资源。bool CreateBitmap( const string name、 // name const datetimetime、 // 时间 const doubleprice、 // 价格 constintwidth、 // width const int height、 // height ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA// 格式 );这样,您就可以绑定 Canvas 的一个角。但宽度和高度都将以像素为单位设置。这里可以用俄语写吗?因为你给了一个人指示 ,但实际上你却奉行双重标准。 Alexey Petrov 2017.07.31 08:42 #38 Alexey Kozitsyn: 感谢您的文章。遗憾的是,文中所有的文档链接都已损坏。 链接已更正。感谢您的留言。 Vladimir Karputov 2017.07.31 08:55 #39 Alexey Petrov: 链接已更正。感谢您的留言。错误仍然存在。导言段:...在开始直接使用CCanvas 类绘制之前,您需要学习一些与颜色处理相关的定义。例如,什么是透明度,什么是 alpha 通道。...项目 "5.1 创建脚本 "Illusion.mq5""...绘制一个涂色的圆。圆将画在我们填充画布的颜色上(canvas_XRGB_NOALPHA.Erase(ColorToARGB(colr,alpha));)。canvas_XRGB_NOALPHA.CreateBitmapLabel - 在这里,我们创建了一个绑定到图表对象的图形资源。用 具有透明度 alpha 的 ARGB 格式颜色填充整个画布输出文本- 此画布的图像处理类型。以 ARGB 格式填充文本颜色,alpha 通道等于 255,即输出文本的颜色。如果我们希望绘制的所有内容都显示在屏幕 上,就需要刷新屏幕。由于我们创建的图形资源绑定到了图表对象(CreateBitmapLabel 方法),因此我们将使用Destroy() 方法删除该资源。... 研究CCanvas类如何绘制透明的图形对象 在 MQL 应用程序中运用 CCanvas 制作仪表板以显示指标和EA中的数据 Konstantin Seredkin 2017.08.17 04:49 #40 各位好,请问如何使信息面板 上的交易图标不叠加在上面。它似乎在前景,所有东西都画在它后面,但交易却叠加在上面。void CreateEdit(long chart_id, // 图表 ID int sub_window, // 窗口(子窗口)编号 string name, // 对象名称 color font_color, // 字体颜色 int x_size, // 宽度 int y_size, // 高度 int x_distance, // X 轴坐标 int y_distance, // Y 轴坐标 long z_order, // 优先权 color background_color) // 背景颜色 { // 如果对象创建成功,那么 if(ObjectCreate(chart_id,name,OBJ_RECTANGLE_LABEL,sub_window,0,0)) { // ...设置其属性 ObjectSetInteger(chart_id,name,OBJPROP_CORNER,CORNER_LEFT_UPPER); // 设置图形的角度 ObjectSetInteger(chart_id,name,OBJPROP_COLOR,font_color); // 字体颜色 ObjectSetInteger(chart_id,name,OBJPROP_BGCOLOR,background_color); // 背景颜色 ObjectSetInteger(chart_id,name,OBJPROP_XSIZE,x_size); // 宽度 ObjectSetInteger(chart_id,name,OBJPROP_YSIZE,y_size); // 高度 ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x_distance); // 设置 X 坐标 ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y_distance); // 设置 Y 坐标 ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,false); 如果为 FALSE,则 // 无法选择对象 ObjectSetInteger(chart_id,name,OBJPROP_ZORDER,z_order); // 对象优先级 ObjectSetInteger(chart_id,name,OBJPROP_READONLY,true); // 只读 ObjectSetInteger(chart_id,name,OBJPROP_ALIGN,ALIGN_LEFT); // 左对齐 //--- 在前景(false)或背景(true)中显示 ObjectSetInteger(chart_id,name,OBJPROP_BACK,false); ObjectSetString(chart_id,name,OBJPROP_TOOLTIP,"\n"); // no tooltip if "\n". } } 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
MQL4 ;)
我不欢迎 MQL4。所有示例都只使用 MQL5。
以及脚本的结果:
弗拉基米尔,有一个问题想请教您这位专家。
有一个画布形式的面板。然后在图表上绘制趋势线。如何将它们隐藏在画布后面?
MetaTrader 交易平台截图
RTS Splice,上半年,2016.10.16
JSC ''Otkritie Broker'', MetaTrader 5, 演示版
弗拉基米尔,有一个问题想请教您这位专家。
有一个画布形式的面板。然后在图表上绘制趋势线。如何将它们隐藏在画布后面?
感谢您的文章。不幸的是,其中的所有文档链接都已损坏。
感谢您的留言--帮助已重建,因此出现了错误。我们将更正链接。
通过类 CCanvas?
请使用 CCanvas.CreateBitmap:
创建绑定到图表对象的图形资源。
1.在当前图表的主窗口中创建图形资源。
bool CreateBitmap(
const string name、 // name
const datetimetime、 // 时间
const doubleprice、 // 价格
constintwidth、 // width
const int height、 // height
ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA// 格式
);
这样,您就可以绑定 Canvas 的一个角。但宽度和高度都将以像素为单位设置。
这里可以用俄语写吗?
因为你给了一个人指示 ,但实际上你却奉行双重标准。
感谢您的文章。遗憾的是,文中所有的文档链接都已损坏。
链接已更正。感谢您的留言。
错误仍然存在。
导言段:
...
在开始直接使用CCanvas 类绘制之前,您需要学习一些与颜色处理相关的定义。例如,什么是透明度,什么是 alpha 通道。
...
项目 "5.1 创建脚本 "Illusion.mq5""
...
绘制一个涂色的圆。圆将画在我们填充画布的颜色上(canvas_XRGB_NOALPHA.Erase(ColorToARGB(colr,alpha));)。
canvas_XRGB_NOALPHA.CreateBitmapLabel - 在这里,我们创建了一个绑定到图表对象的图形资源。
用 具有透明度 alpha 的 ARGB 格式颜色填充整个画布
输出文本- 此画布的图像处理类型。以 ARGB 格式填充文本颜色,alpha 通道等于 255,即输出文本的颜色。
如果我们希望绘制的所有内容都显示在屏幕 上,就需要刷新屏幕。
由于我们创建的图形资源绑定到了图表对象(CreateBitmapLabel 方法),因此我们将使用Destroy() 方法删除该资源。
...
各位好,请问如何使信息面板 上的交易图标不叠加在上面。
它似乎在前景,所有东西都画在它后面,但交易却叠加在上面。