帆布很酷! - 页 44 1...373839404142434445464748495051...93 新评论 Andrey Khatimlianskii 2019.09.20 00:37 #431 Nikolai Semko: 这些函数写得很糟糕,令人发指。这是一个地狱般的东西。没有正常的抗锯齿,没有正常的颜色混合和透明度处理。我们应该把它们揉成一团,扔进垃圾桶,然后写新的。 我以前在这里 写过这个问题。 在任何情况下,你肯定应该用这个函数来取代标准的PixelTransform函数。 https://www.mql5.com/ru/forum/1111/page2553#comment_13054823 我开始写我的双倍版本(其中所有的int输入参数都是双倍的),但没有完成,把它放在了架子上。尽管表面上很简单,但不是一项非常简单的任务。好吧,准确地写出来不是问题,问题是要写出很高的质量,要让算法快速。我的主要问题是完美主义。 我明白了,他们还没有完成) 我不太可能被诱惑去重写整个画布。我将不得不并排画2个单像素的,而不是暂时画1个双像素的 ) Nikolai Semko 2019.09.20 04:39 #432 Andrey Khatimlianskii: 我明白了,他们没有完成它)。 我不可能被诱惑去重写整个画布。我只是要画2个并排的单像素的,而不是1个双像素的)。 实际上,你不需要重写整个画布。最主要的是要做一个圆的格式 Circle(double x, double y, double r1, double r2=0, uint clr) 并使线条正常。 Polyline(const double &x[],const double &y[], const uint clr,const double size,const uint style,ENUM_LINE_END end_style) 这应该能满足你95%的需求 Nikolai Semko 2019.10.06 15:36 #433 关于交易、自动交易系统和测试交易策略的论坛 如何将所有对象转换为1个对象 Nikolai Semko, 2019.10.05 22:39 事实上,Canvas就是解决方案。 而Canvas比乍看之下要容易得多。 下面是一个指标的原始例子(MQL5 & MQL4),其中有一个对象OBJ_BITMAP_LABEL,其中有许多窗口。 #property indicator_chart_window #include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164 - MQL5 //https://www.mql5.com/en/code/23840 - MQL4 struct win { int x; int y; int width; int height; uint clr; }; win wnd[30]; int OnInit() { for (int i=0; i<ArraySize(wnd); i++) { wnd[i].width=rand()%200+70; wnd[i].height=rand()%150+50; wnd[i].x=rand()%(W.Width-wnd[i].width); wnd[i].y=rand()%(W.Height-wnd[i].height); wnd[i].clr=ARGB(255,rand()%150+100,rand()%150+100,rand()%150+100); } ShowAllWind(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { return(rates_total); } //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { static bool click = false; static int x_mouse=0, y_mouse=0; static int focus=-1, xfocus=0, yfocus=0; int x=(int)lparam; int y=(int)dparam; if (sparam!="1" && click) focus=-1; if (sparam=="1" && !click) { focus=-1; for (int i=ArraySize(wnd)-1; i>=0; i--) { if (wnd[i].x<x && wnd[i].y<y && wnd[i].x+wnd[i].width>x && wnd[i].y+20>y) { focus=i; xfocus=x; yfocus=y; break; } } if (focus>=0) ChartSetInteger(0,CHART_MOUSE_SCROLL,false); else ChartSetInteger(0,CHART_MOUSE_SCROLL,true); } click=(sparam=="1")?true:false; if (id==CHARTEVENT_MOUSE_MOVE && focus>=0) { wnd[focus].x+=x-xfocus; wnd[focus].y+=y-yfocus; xfocus=x; yfocus=y; ShowAllWind(); } if (id==CHARTEVENT_CHART_CHANGE) ShowAllWind(); } //+------------------------------------------------------------------+ void ShowAllWind() { Canvas.Erase(); for (int i=0; i<ArraySize(wnd); i++) { Canvas.FillRectangle(wnd[i].x,wnd[i].y,wnd[i].x+wnd[i].width,wnd[i].y+wnd[i].height,ARGB(255,GETRGBR(wnd[i].clr)*0.5,GETRGBG(wnd[i].clr)*0.5,GETRGBB(wnd[i].clr)*0.5)); Canvas.FillRectangle(wnd[i].x+3,wnd[i].y+23,wnd[i].x+wnd[i].width-3,wnd[i].y+wnd[i].height-3,wnd[i].clr); Canvas.FillRectangle(wnd[i].x+3,wnd[i].y+3,wnd[i].x+wnd[i].width-3,wnd[i].y+20,ARGB(255,GETRGBR(wnd[i].clr)*0.7,GETRGBG(wnd[i].clr)*0.7,GETRGBB(wnd[i].clr)*0.7)); } Canvas.Update(); } //+------------------------------------------------------------------+ Sergey Chalyshev 2019.10.06 15:58 #434 Nikolai Semko: 很好! 我真的需要这个功能,并且能够在这些迷你窗口中绘制我自己的指标。 为什么一个窗口藏在另一个窗口下面,而另一个窗口却躺在上面,你能解决吗? 另一个问题,如果在不同的图表上运行同一个指标,它是否会工作?事件不会像标准库中那样重叠? 而如果两个窗口都有相同的坐标,哪个窗口会被鼠标拖动? 是否可以用鼠标调整窗口的大小? Nikolai Semko 2019.10.06 16:59 #435 Sergey Chalyshev: 很好! 我真的需要这个功能,并且能够在这些迷你窗口中绘制我自己的指标。 为什么一个窗口藏在另一个窗口下面,而另一个窗口却躺在上面,你能解决吗? 另一个问题,如果在不同的图表上运行同一个指标,它是否会工作?事件不会像标准库中那样重叠? 而如果两个窗口都有相同的坐标,哪个窗口会被鼠标拖动? 是否可以用鼠标调整窗口的大小? 这个例子简单地实现了窗口资历。实际上,win结构数组中的索引越小,虚拟窗口层就越低。 你可以用你想要的任何方式来实现它。例如,如果我们 "抓住 "一个窗口,它就会成为屏幕上和数组中最上面的一个。 你也可以实施透明化。我在这里 向你展示了如何做到这一点。(在那里有必要对每个piskel进行处理)。 另一张图表也可以在另一张上运行。 如果坐标相同,就拖动上面的那个。 使用kanvas,你可以在你的窗口和其他MT窗口内做任何事情。 此外,你可以将一个窗口从MT5中分离出来,让它自由浮动,甚至在显示器之间。 你可以在这里 看到它。 Sergey Chalyshev 2019.10.06 18:18 #436 Nikolai Semko: 这个例子简单地实现了窗口资历。本质上,win结构数组中的索引越小,虚拟窗口层就越低。 你可以用任何你喜欢的方式来实现它。例如,如果一个窗口被 "抓住 "了,那么它就成为屏幕上和数组中最上层的一个。 你也可以实施透明化。我在这里 向你展示了如何做到这一点。(在那里你必须处理每个piskel)。 也可以在另一个图表上运行。 如果坐标相同,就拖动上面的那个。 使用kanvas,你可以在你的窗口和其他MT窗口内做任何事情。 此外,该窗口可以与МТ5分离,并移动到显示器之间的自由浮动区。 你可以在这里 看到它。 略有不妥,可能是没有正确地提出问题。 在一个程序中组织几个窗口(脚本、指标)并不困难。 我想做一个指标,在图表上以自己的小窗口显示数据。这个窗口可以舒适地放在图表中,你可以用鼠标拖动它,用鼠标调整窗口的大小(这是可取的,但你还是可以这样做)。我们必须在图表中运行几个指标,每个指标都有自己的参数。我还没有想出如何使不同指标的事件不重叠,并且指标对鼠标事件有足够的反应。我还没有决定哪个更好,更简单,画布和物体。在标准的Dialog库中没有任何东西可以使用。 Dmitry Fedoseev 2019.10.06 18:33 #437 Sergey Chalyshev: ...还是想不出如何使不同指标的事件不重叠... 最简单的方法是在属性窗口中设置一个字符串变量,将其添加到图形对象的名称中。 Sergey Chalyshev 2019.10.06 18:41 #438 Dmitry Fedoseev: 最简单的方法是在属性窗口中设置一个字符串变量,将其添加到图形对象的名称中。心灵在真理和成员之间纠结? 自然,这就是我所做的。问题是用鼠标拖放。如果物体具有相同的坐标,则其中一个正好在另一个下面。当你点击它们时,哪一个会有反应? 你说的是什么俱乐部,我没有报名参加任何俱乐部,也不打算参加)) p.s. 你能给我看一个例子吗? Dmitry Fedoseev 2019.10.06 18:52 #439 Sergey Chalyshev: 自然,我也是如此。问题是用鼠标拖动和下拉。如果两个物体的坐标相同,则其中一个正好在另一个下面。当你点击它们时,哪一个会有反应? 你说的是什么俱乐部,我没有报名参加任何俱乐部,也不打算参加)) p.s. 你能给我看一个例子吗? 错误的俱乐部,对不起...我受够了这个俱乐部))。 某个对象会做出反应。也许在激活一个物体时,改变它的Z轴顺序,使它比其他所有人都高。我们应该试试。 Artyom Trishkin 2019.10.06 19:02 #440 Sergey Chalyshev: 自然,我也是如此。问题是用鼠标拖动和下拉。如果两个物体的坐标相同,则其中一个正好在另一个下面。当你点击它们时,哪一个会有反应? 你说的是什么俱乐部,我没有报名参加任何俱乐部,也不打算参加)) p.s. 你能给我看一个例子吗? 一般来说,在这种情况下,最后被移动的物体应该做出反应--它在上面... 1...373839404142434445464748495051...93 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这些函数写得很糟糕,令人发指。这是一个地狱般的东西。没有正常的抗锯齿,没有正常的颜色混合和透明度处理。我们应该把它们揉成一团,扔进垃圾桶,然后写新的。
我以前在这里 写过这个问题。
在任何情况下,你肯定应该用这个函数来取代标准的PixelTransform函数。
https://www.mql5.com/ru/forum/1111/page2553#comment_13054823
我开始写我的双倍版本(其中所有的int输入参数都是双倍的),但没有完成,把它放在了架子上。尽管表面上很简单,但不是一项非常简单的任务。好吧,准确地写出来不是问题,问题是要写出很高的质量,要让算法快速。我的主要问题是完美主义。我明白了,他们还没有完成)
我不太可能被诱惑去重写整个画布。我将不得不并排画2个单像素的,而不是暂时画1个双像素的 )
我明白了,他们没有完成它)。
我不可能被诱惑去重写整个画布。我只是要画2个并排的单像素的,而不是1个双像素的)。
实际上,你不需要重写整个画布。最主要的是要做一个圆的格式
并使线条正常。
这应该能满足你95%的需求
关于交易、自动交易系统和测试交易策略的论坛
如何将所有对象转换为1个对象
Nikolai Semko, 2019.10.05 22:39
事实上,Canvas就是解决方案。
而Canvas比乍看之下要容易得多。
下面是一个指标的原始例子(MQL5 & MQL4),其中有一个对象OBJ_BITMAP_LABEL,其中有许多窗口。
很好!
我真的需要这个功能,并且能够在这些迷你窗口中绘制我自己的指标。
为什么一个窗口藏在另一个窗口下面,而另一个窗口却躺在上面,你能解决吗?
另一个问题,如果在不同的图表上运行同一个指标,它是否会工作?事件不会像标准库中那样重叠?
而如果两个窗口都有相同的坐标,哪个窗口会被鼠标拖动?
是否可以用鼠标调整窗口的大小?
很好!
我真的需要这个功能,并且能够在这些迷你窗口中绘制我自己的指标。
为什么一个窗口藏在另一个窗口下面,而另一个窗口却躺在上面,你能解决吗?
另一个问题,如果在不同的图表上运行同一个指标,它是否会工作?事件不会像标准库中那样重叠?
而如果两个窗口都有相同的坐标,哪个窗口会被鼠标拖动?
是否可以用鼠标调整窗口的大小?
这个例子简单地实现了窗口资历。实际上,win结构数组中的索引越小,虚拟窗口层就越低。
你可以用你想要的任何方式来实现它。例如,如果我们 "抓住 "一个窗口,它就会成为屏幕上和数组中最上面的一个。
你也可以实施透明化。我在这里 向你展示了如何做到这一点。(在那里有必要对每个piskel进行处理)。
另一张图表也可以在另一张上运行。
如果坐标相同,就拖动上面的那个。
使用kanvas,你可以在你的窗口和其他MT窗口内做任何事情。
此外,你可以将一个窗口从MT5中分离出来,让它自由浮动,甚至在显示器之间。 你可以在这里 看到它。
这个例子简单地实现了窗口资历。本质上,win结构数组中的索引越小,虚拟窗口层就越低。
你可以用任何你喜欢的方式来实现它。例如,如果一个窗口被 "抓住 "了,那么它就成为屏幕上和数组中最上层的一个。
你也可以实施透明化。我在这里 向你展示了如何做到这一点。(在那里你必须处理每个piskel)。
也可以在另一个图表上运行。
如果坐标相同,就拖动上面的那个。
使用kanvas,你可以在你的窗口和其他MT窗口内做任何事情。
此外,该窗口可以与МТ5分离,并移动到显示器之间的自由浮动区。 你可以在这里 看到它。
略有不妥,可能是没有正确地提出问题。
在一个程序中组织几个窗口(脚本、指标)并不困难。
我想做一个指标,在图表上以自己的小窗口显示数据。这个窗口可以舒适地放在图表中,你可以用鼠标拖动它,用鼠标调整窗口的大小(这是可取的,但你还是可以这样做)。我们必须在图表中运行几个指标,每个指标都有自己的参数。我还没有想出如何使不同指标的事件不重叠,并且指标对鼠标事件有足够的反应。我还没有决定哪个更好,更简单,画布和物体。在标准的Dialog库中没有任何东西可以使用。
...还是想不出如何使不同指标的事件不重叠...
最简单的方法是在属性窗口中设置一个字符串变量,将其添加到图形对象的名称中。
最简单的方法是在属性窗口中设置一个字符串变量,将其添加到图形对象的名称中。心灵在真理和成员之间纠结?
自然,这就是我所做的。问题是用鼠标拖放。如果物体具有相同的坐标,则其中一个正好在另一个下面。当你点击它们时,哪一个会有反应?
你说的是什么俱乐部,我没有报名参加任何俱乐部,也不打算参加))
p.s. 你能给我看一个例子吗?
自然,我也是如此。问题是用鼠标拖动和下拉。如果两个物体的坐标相同,则其中一个正好在另一个下面。当你点击它们时,哪一个会有反应?
你说的是什么俱乐部,我没有报名参加任何俱乐部,也不打算参加))
p.s. 你能给我看一个例子吗?
错误的俱乐部,对不起...我受够了这个俱乐部))。
某个对象会做出反应。也许在激活一个物体时,改变它的Z轴顺序,使它比其他所有人都高。我们应该试试。
自然,我也是如此。问题是用鼠标拖动和下拉。如果两个物体的坐标相同,则其中一个正好在另一个下面。当你点击它们时,哪一个会有反应?
你说的是什么俱乐部,我没有报名参加任何俱乐部,也不打算参加))
p.s. 你能给我看一个例子吗?
一般来说,在这种情况下,最后被移动的物体应该做出反应--它在上面...