文章 "研究CCanvas类如何绘制透明的图形对象" - 页 3 123456789 新评论 Denis Kirichenko 2015.12.18 14:19 #21 弗拉基米尔,我不擅长画布....。 我在画布上绘制了不同的形状,并将它们叠加在一起。如何在不混合的情况下使颜色保持 原样?我设置了 COLOR_FORMAT_XRGB_NOALPHA,但还是发生了混合:-(((.......不过,我有一个变种。在 CDialog 类型的对话框中附加了一张 CPicture 类型的图片。它与 CCanvas 类型的资源相连。后者是在没有绑定到窗口的情况下创建的。 Vladimir Karputov 2015.12.19 07:08 #22 Dennis Kirichenko: 弗拉基米尔,我不擅长画布....。 我在画布上绘制了不同的形状,并将它们叠加在一起。如何在不混合的情况下使颜色保持 原样?我设置了 COLOR_FORMAT_XRGB_NOALPHA,但还是发生了混合 :-(((...画布上绘制的颜色(我们称之为 "顶部 "或最后的颜色)会取代之前在画布上绘制的颜色。//+------------------------------------------------------------------+ //|canvas+xor.mq5 //|版权 © 2015, Vladimir Karputov | | //|http://wmua.ru/slesar/ || //+------------------------------------------------------------------+ #property copyright "版权 © 2015 年,弗拉基米尔-卡尔普托夫" #property link "http://wmua.ru/slesar/" #property version "1.00" #property description "The script draws overlapping areas on canvas" //--- 启动脚本时显示输入参数窗口 #property script_show_inputs #include <Canvas\Canvas.mqh> //--- 输入 input uchar alfa=150; // alpha 通道管理颜色透明度 //--- 图表的宽度和高度可变。 int ChartWidth=-1; int ChartHeight=-1; //+------------------------------------------------------------------+ //| 脚本程序启动功能| //+------------------------------------------------------------------+ void OnStart() { //--- 图表的宽度和高度 ChartWidth=ChartWidthInPixels(); ChartHeight=ChartHeightInPixelsGet()-50; //--- 创建画布 COLOR_FORMAT_XRGB_NOALPHA CCanvas canvas_XARGB_NORMALIZE; if(!canvas_XARGB_NORMALIZE.CreateBitmapLabel("canvas_XARGB_NORMALIZE",0,0, ChartWidth,ChartHeight,COLOR_FORMAT_ARGB_NORMALIZE)) { Print("Error creating canvas: ",GetLastError()); return; } canvas_XARGB_NORMALIZE.Erase(ColorToARGB(clrAqua,255)); //--- 创建一个矩形 #1 canvas_XARGB_NORMALIZE.FillRectangle(ChartWidth/20,ChartHeight/20, 10*ChartWidth/20,10*ChartHeight/20, ColorToARGB(clrBlue,alfa)); canvas_XARGB_NORMALIZE.Update(); //--- 等待 3 秒钟 Sleep(3000); //--- 创建一个矩形 #2 canvas_XARGB_NORMALIZE.FillRectangle(7*ChartWidth/20,7*ChartHeight/20, 16*ChartWidth/20,16*ChartHeight/20, ColorToARGB(clrGreen,alfa)); canvas_XARGB_NORMALIZE.Update(); //--- 等待 3 秒钟 Sleep(3000); } //+------------------------------------------------------------------+ //| 图表属性宽度| //+------------------------------------------------------------------+ 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); } //+------------------------------------------------------------------+ 附加的文件: canvas3xor.mq5 4 kb Denis Kirichenko 2015.12.19 10:00 #23 弗拉基米尔,非常感谢!我刚刚忽略了 ColorToARGB() 的转换。 Vladimir Karputov 2015.12.19 10:08 #24 Dennis Kirichenko:弗拉基米尔,非常感谢!我只是忽略了 ColorToARGB() 的转换。 不客气 :) 。 Jorge Fernando De Los Rios De Los Rios 2016.05.30 12:36 #25 你好,我认为这篇文章非常出色。我有一个问题,如何在屏幕上以 x1、x2、y1、y2 为坐标创建一个矩形:x1 = 时间[1]x2 = 时间[0]y1 = 打开[1]y2 = 关闭[1] Vladimir Karputov 2016.05.30 12:39 #26 Jorge Fernando De Los Ríos De Los Ríos:你好,我认为这篇文章非常出色。我有一个问题,如何在屏幕上以 x1、x2、y1、y2 为坐标创建一个矩形:x1 = 时间[1]x2 = 时间[0]y1 = 打开[1]y2 = 关闭[1]通过类 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 的一个角。但宽度和高度都将以像素为单位设置。 Discussion of article "Studying drawing a trend line 为什么画不出矩形 Jorge Fernando De Los Rios De Los Rios 2016.05.30 16:13 #27 让我们做一个更简单的练习。我想让一个圆随价格移动,但为什么它不在 Y 轴上移动呢?代码如下void OnStart() { int ChartWidth=ChartWidthInPixels(); int ChartHeight=ChartHeightInPixelsGet(); CCanvas pepe; int t1,t0,p1,p0; ChartTimePriceToXY(0,0,Time[1],Open[1],t1,p1); ChartTimePriceToXY(0,0,Time[0],Close[1],t0,p0); pepe.CreateBitmapLabel("canvas_XRGB_NOALPHA",0,0,ChartWidth,ChartHeight,COLOR_FORMAT_ARGB_RAW); pepe.Erase(0); pepe.FillCircle(t0,p0,25,ColorToARGB(clrBlue,255)); pepe.Update(); return(rates_total); } Vladimir Karputov 2016.05.30 16:28 #28 Jorge Fernando De Los Ríos De Los Ríos:让我们做一个更简单的练习。我想让一个圆随价格移动,但为什么它不在 Y 轴上移动呢?代码如下 这个脚本没有经过编译。其中错误百出。 Vladimir Karputov 2016.05.30 16:39 #29 Jorge Fernando De Los Ríos De Los Ríos:让我们做一个更简单的练习。我想让一个圆随价格移动,但为什么它不在 Y 轴上移动呢?代码如下"时间[]"、"收盘价[]"- 的错误。MQL5 中没有此类变量! Artyom Trishkin 2016.05.30 16:57 #30 Karputov Vladimir: "时间[]"、"关闭[]"- 错误。MQL5 中没有此类变量! MQL4 ;) 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我在画布上绘制了不同的形状,并将它们叠加在一起。如何在不混合的情况下使颜色保持 原样?
我设置了 COLOR_FORMAT_XRGB_NOALPHA,但还是发生了混合:-(((.......
不过,我有一个变种。在 CDialog 类型的对话框中附加了一张 CPicture 类型的图片。它与 CCanvas 类型的资源相连。后者是在没有绑定到窗口的情况下创建的。
弗拉基米尔,我不擅长画布....。 我在画布上绘制了不同的形状,并将它们叠加在一起。如何在不混合的情况下使
颜色保持 原样?
我设置了 COLOR_FORMAT_XRGB_NOALPHA,但还是发生了混合 :-(((
...
画布上绘制的颜色(我们称之为 "顶部 "或最后的颜色)会取代之前在画布上绘制的颜色。
弗拉基米尔,非常感谢!
我刚刚忽略了 ColorToARGB() 的转换。
弗拉基米尔,非常感谢!
我只是忽略了 ColorToARGB() 的转换。
通过类 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 的一个角。但宽度和高度都将以像素为单位设置。
让我们做一个更简单的练习。我想让一个圆随价格移动,但为什么它不在 Y 轴上移动呢?
代码如下
让我们做一个更简单的练习。我想让一个圆随价格移动,但为什么它不在 Y 轴上移动呢?
代码如下
让我们做一个更简单的练习。我想让一个圆随价格移动,但为什么它不在 Y 轴上移动呢?
代码如下
"时间[]"、"关闭[]"- 错误。MQL5 中没有此类变量!