帆布很酷! - 页 28 1...212223242526272829303132333435...93 新评论 Nikolai Semko 2019.09.12 17:20 #271 Evgeny Potapov:谢谢你!这个选项看起来相当现实 谢谢你的问题,因为在回答这个问题时,我意识到我不知道的一个非常重要的事情。 如果有人知道这件事,我会感到惊讶。 如果你使用ObjectSetInteger 调整画布或其位置,你不需要重新绘制它。 即使我们调整了生成的kanvas的大小,然后再把它调整回来,kanvas的数据也会被原画保留。 如果你增加异形画布的大小,数据就会消失,但当你把它的大小调整到原来的大小时,又会重新出现。 当调整大小或改变kanvas的位置时,甚至不需要做Update()或ChartRedraw(),它将随着新的tick或窗口变化而更新。 这个指标表明了这一点。画布只生成一次。但是它的大小和位置可以被改变,而数值的数组被保留。只需在屏幕上移动鼠标 #property indicator_chart_window #define protected public // увы, это необходимо, чтобы расширить наши возможности #include <Canvas\Canvas.mqh> #undef protected CCanvas C; int OnInit() { if(!C.CreateBitmapLabel(0,0,"_Canvas",100,100,600,400,COLOR_FORMAT_ARGB_NORMALIZE)) Print("Error creating canvas: ",GetLastError()); DrawCanvas(600,400); ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { C.Destroy(); } //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, const int prev_calculated, const int begin, const double& price[]) { return prev_calculated; } void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { if (id==CHARTEVENT_MOUSE_MOVE) DrawCanvas((int)lparam,(int)dparam); } //+------------------------------------------------------------------+ void DrawCanvas(int x, int y) { static bool first=true; //Comment(string(x)+" " +string(y)); ObjectSetInteger(C.m_chart_id,C.m_objname,OBJPROP_XDISTANCE,x/5); ObjectSetInteger(C.m_chart_id,C.m_objname,OBJPROP_YDISTANCE,y/5); ObjectSetInteger(C.m_chart_id,C.m_objname,OBJPROP_XSIZE,x); ObjectSetInteger(C.m_chart_id,C.m_objname,OBJPROP_YSIZE,y); if(first) // канвас формируется только один раз { C.Erase(); C.FillCircle(100,100,70,ColorToARGB(clrViolet,200)); C.FillCircle(300,200,100,ColorToARGB(clrLightBlue,100)); C.Rectangle(140,50,250,150,ColorToARGB(clrAqua)); C.Update(); first=false; } ChartRedraw(); // можно обойтись и без этого, но тогда перерисовка будет только с каждым тиком или изменением чарта } 附加的文件: TestResizeCanvas.mq5 5 kb Andrey Dik 2019.09.12 20:49 #272 是否可以保存为视频? Nikolai Semko 2019.09.12 20:57 #273 Andrey Dik: 你能保存为视频吗? 你可以 Andrey Dik 2019.09.12 20:59 #274 Nikolai Semko: 你可以 酷!希望不是通过创建一百万张图片,然后在一些视频编辑器中把它们组合成一个视频?) 如果你不介意的话,请详细说明一下 Nikolai Semko 2019.09.12 21:24 #275 Andrey Dik: 酷!希望不是通过创建一百万张图片,然后在一些视频编辑器中把它们组合成一个视频?) 如果你不介意的话,请详细说明一下 不,当然不是。 它将。 Andrey Dik 2019.09.12 22:01 #276 Nikolai Semko: 不,当然不是。 这是个麻烦事。 你不需要代码,给我一个提示怎么做。 Andrey Khatimlianskii 2019.09.12 22:14 #277 Nikolai Semko: 当调整画布的大小或改变位置时,你甚至不需要做Update()或ChartRedraw(),它将随着新的刻度或窗口的改变而 被更新。 嗯,终端 根据这些事件 自己调用ChartRedraw();) Nikolai Semko 2019.09.12 22:17 #278 Andrey Dik: 不需要代码,提示如何做到这一点 有很多选择,这取决于你想拍摄什么样的视频。只是在窗口中实时发生的鼠标指针、指标、对象、GUI ?还是别的什么? Darirunu 2019.09.12 22:18 #279 这个芯片的真正效用是什么?在价格图上找到有助于交易的模式,是否有帮助? Nikolai Semko 2019.09.12 22:28 #280 Andrey Khatimlianskii: 嗯,终端 本身在这些事件 上调用ChartRedraw();) 我理解,我只是不想谈细节问题。 我提请你注意,因为chartRedraw()并不重绘画布对象,它只在Update() 期间重绘。如果你使用 ObjectSetInteger来重绘画布对象,那么当ChartRedraw()发生时,强制ChartRedraw()或等待图表的变化或新刻度的到来就足够了。 1...212223242526272829303132333435...93 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢你!这个选项看起来相当现实
谢谢你的问题,因为在回答这个问题时,我意识到我不知道的一个非常重要的事情。
如果有人知道这件事,我会感到惊讶。
如果你使用ObjectSetInteger 调整画布或其位置,你不需要重新绘制它。
这个指标表明了这一点。画布只生成一次。但是它的大小和位置可以被改变,而数值的数组被保留。只需在屏幕上移动鼠标
你能保存为视频吗?
你可以
酷!希望不是通过创建一百万张图片,然后在一些视频编辑器中把它们组合成一个视频?)
如果你不介意的话,请详细说明一下
酷!希望不是通过创建一百万张图片,然后在一些视频编辑器中把它们组合成一个视频?)
如果你不介意的话,请详细说明一下
不,当然不是。
它将。
不,当然不是。
这是个麻烦事。
你不需要代码,给我一个提示怎么做。
嗯,终端 根据这些事件 自己调用ChartRedraw();)
不需要代码,提示如何做到这一点
有很多选择,这取决于你想拍摄什么样的视频。只是在窗口中实时发生的鼠标指针、指标、对象、GUI ?还是别的什么?
嗯,终端 本身在这些事件 上调用ChartRedraw();)
我理解,我只是不想谈细节问题。
我提请你注意,因为chartRedraw()并不重绘画布对象,它只在Update() 期间重绘。如果你使用 ObjectSetInteger来重绘画布对象,那么当ChartRedraw()发生时,强制ChartRedraw()或等待图表的变化或新刻度的到来就足够了。