程序库: Easy Canvas - 页 14 1...78910111213141516171819 新评论 Mighty7 2021.01.06 03:19 #131 Mighty7:我必须说谢谢。现在完美了。干得漂亮 能回答我最后一个问题吗?左右移动和上下移动哪个更快?再次感谢。 Nikolai Semko 2021.01.06 03:56 #132 Mighty7:能否请您回答最后一个问题?左右移动和上下移动哪个更快?再次感谢。 上/下换挡比左/右换挡稍快。在标准全高清屏幕窗口的普通电脑上,整个移位过程大约需要 0.3 毫秒(1/3000 秒)。 上下移动比左右移动稍快。在普通电脑上,标准全高清屏幕窗口的整个移动过程大约需要 0.3 毫秒(1/3000 秒)。 Mighty7 2021.01.06 11:01 #133 Nikolai Semko:下移和上移比左右移动稍快。在标准全高清屏幕窗口的普通电脑上,整个移位过程大约需要 0.3 毫秒(1/3000 秒)。上下移动比左右移动稍快。在普通电脑上,标准全高清屏幕窗口的整个移动过程大约需要 0.3 毫秒(1/3000 秒)。 谢谢。 Oleksii Chepurnyi 2021.07.16 08:44 #134 void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { if (sparam=="0") W.MouseStatus=NO_PRESSED; else if (sparam=="1") W.MouseStatus=LEFT_BUTTON_PRESSED; else if (sparam=="2") W.MouseStatus=RIGHT_BUTTON_PRESSED; else if (sparam=="3") W.MouseStatus=LEFT_AND_RIGHT_BUTTONS_PRESSED; else W.MouseStatus=KEY_PRESSED; W.IdEvent=id; W.lparam=lparam; if(id==CHARTEVENT_MOUSE_MOVE) { W.MouseX=(int)lparam; W.MouseY=(int)dparam; W.MouseBar=(double)W.Left_bar+1-(double)W.MouseX/(double)W.dx_pix; W.MouseSubWin=XYToTimePrice(W.MouseX,W.MouseY,W.MouseTime,W.MousePrice,id); if(W.MouseSubWin>0) for(int i=0;i<W.MouseSubWin;i++) W.MouseY=W.MouseY-W.height[i]-2; } if(id==CHARTEVENT_CHART_CHANGE) ChartChanged(); if(OnZ) SetOnChart(sizeArr); if(OnChart) MyChartEvent(id,lparam,dparam,sparam); } 我在这里几次除以 0,但重启终端后就不会再出现了 ) Nikolai Semko 2021.07.16 15:14 #135 Oleksii Chepurnyi:我在这里几次除以 0,但重启终端后就不会再出现了 )很奇怪,我从来没有遇到过这种情况。,那就先这样替换吧:void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { if (W.dx_pix==0) return; if (sparam=="0") W.MouseStatus=NO_PRESSED; else if (sparam=="1") W.MouseStatus=LEFT_BUTTON_PRESSED; else if (sparam=="2") W.MouseStatus=RIGHT_BUTTON_PRESSED; else if (sparam=="3") W.MouseStatus=LEFT_AND_RIGHT_BUTTONS_PRESSED; else W.MouseStatus=KEY_PRESSED; W.IdEvent=id; W.lparam=lparam; if(id==CHARTEVENT_MOUSE_MOVE) { W.MouseX=(int)lparam; W.MouseY=(int)dparam; W.MouseBar=(double)W.Left_bar+1-(double)W.MouseX/W.dx_pix; W.MouseSubWin=XYToTimePrice(W.MouseX,W.MouseY,W.MouseTime,W.MousePrice,id); if(W.MouseSubWin>0) for(int i=0;i<W.MouseSubWin;i++) W.MouseY=W.MouseY-W.height[i]-2; } if(id==CHARTEVENT_CHART_CHANGE) ChartChanged(); if(OnZ) SetOnChart(sizeArr); if(OnChart) MyChartEvent(id,lparam,dparam,sparam); } //+------------------------------------------------------------------+不,这样更好:void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { if (sparam=="0") W.MouseStatus=NO_PRESSED; else if (sparam=="1") W.MouseStatus=LEFT_BUTTON_PRESSED; else if (sparam=="2") W.MouseStatus=RIGHT_BUTTON_PRESSED; else if (sparam=="3") W.MouseStatus=LEFT_AND_RIGHT_BUTTONS_PRESSED; else W.MouseStatus=KEY_PRESSED; W.IdEvent=id; W.lparam=lparam; if(id==CHARTEVENT_CHART_CHANGE) ChartChanged(); if(id==CHARTEVENT_MOUSE_MOVE) { W.MouseX=(int)lparam; W.MouseY=(int)dparam; W.MouseBar=(double)W.Left_bar+1-(double)W.MouseX/W.dx_pix; W.MouseSubWin=XYToTimePrice(W.MouseX,W.MouseY,W.MouseTime,W.MousePrice,id); if(W.MouseSubWin>0) for(int i=0;i<W.MouseSubWin;i++) W.MouseY=W.MouseY-W.height[i]-2; } if(OnZ) SetOnChart(sizeArr); if(OnChart) MyChartEvent(id,lparam,dparam,sparam); } 不幸的是,我无法更新 QB 中的版本。又出故障了。 附加的文件: iCanvas.mqh 52 kb Vitaliy Kuznetsov 2021.08.03 12:13 #136 如果能有一个适用于 4k 和 8k 显示器的通用解决方案,那将会非常有趣。 例如,我们画一个矩形,上面有两个按钮和两个输入框。按钮分别以像素为单位。 如果以像素为单位,那么在 4k 分辨率下,除了输入框外,所有内容都将缩小 2 倍。 但如果自动将整个画布平移 x2,那么在任何屏幕分辨率下,一切都会像在普通显示器上一样。 另一个问题可能是,有些用户会在 Windows 设置中放大字体(这会放大标准输入框)。 因此,有一个更通用的解决方案,即根据字体大小,用一个乘数来改变 kanvas 页面的像素化。 主要条件是在普通全高清显示器上以通常的像素尺寸绘制。解决方案如下 1. 严格按照 x2(4K 时)、x4(8K 时)改变画布比例 2. 使用与字体大小相关的动态乘数缩放工作表。 用途。用于仪表盘、交易面板和其他以像素为单位的绘制对象。 Nikolai Semko 2021.08.03 14:27 #137 Vitaliy Kuznetsov:如果能有一个 4k 和 8k 显示器的通用解决方案,那将会非常有趣。例如,我们画一个矩形,上面有两个按钮和两个输入框。按钮分别以像素为单位。如果以像素为单位,那么在 4k 分辨率下,除了输入框外,其他所有内容都将缩小 2 倍。但如果自动将整个画布平移 x2,那么在任何屏幕分辨率下,一切都会像在普通显示器上一样。还有一个问题是,有些用户会进入 Windows 设置并增大字体(这会增大标准输入字段)。因此,更通用的解决方案是根据字体大小,用一个乘数来改变画布工作表的像素化。主要条件是在普通的全高清显示器上以通常的像素尺寸绘制。目前正在寻找解决方案:1. 严格按照 x2(4K 时)、x4(8K 时)改变图纸比例2. 使用与字体大小相关的动态乘数缩放工作表用途。用于仪表盘、交易面板和其他以像素为单位的绘制对象。 解决方案的关键是TERMINAL_SCREEN_DPI。这里并不复杂。我已经实现所有功能很久了。 没有时间演示了。如果你在理解过程中遇到困难,可以谷歌一下 JS 是如何实现的。 Vitaliy Kuznetsov 2021.08.03 14:44 #138 Nikolai Semko: 解决方案的关键是TERMINAL_SCREEN_DPI。 这里并不复杂。我很早就实现了所有功能 。 没有时间演示示例了。如果你在理解过程中遇到困难,可以谷歌一下 JS 是如何实现的。 是的,我后来在搜索中找到了。谢谢。这里有一个例子 -https://www.mql5.com/zh/docs/constants/environment_state/terminalstatus Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала www.mql5.com Состояние клиентского терминала - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Facundo Laje 2022.08.24 04:24 #139 Nikolai Semko #: 最新版本 1.12 你好,非常有趣,有没有可能将画布转换为对象?我的意思是,例如,将画布矩形转换为标准对象矩形来管理它。 Nikolai Semko 2022.08.24 04:45 #140 Facundo Laje # :你好,非常有趣,有可能将画布转换为对象吗?我的意思是,例如,将画布的矩形转换成标准对象的矩形来管理它。如果是字面上的矩形对象,那就不行。 画布也是一个对象。 你只能通过编程将画布对象 "转换 "为矩形对象,使其内容可以移动和缩放。 从视觉上看,它可以完全像一个矩形对象,并在四角用小方块来控制。但在这个社区中,只有少数程序员能够实现这一点,包括我在内。如果我们谈论的是矩形内部内容的转换,那么我们可以从以下几个方面入手。如果我们谈论的是一个简单的填充或空矩形,任何程序员都能做到。 1...78910111213141516171819 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我必须说谢谢。现在完美了。干得漂亮
能回答我最后一个问题吗?左右移动和上下移动哪个更快?再次感谢。
能否请您回答最后一个问题?左右移动和上下移动哪个更快?再次感谢。
上/下换挡比左/右换挡稍快。在标准全高清屏幕窗口的普通电脑上,整个移位过程大约需要 0.3 毫秒(1/3000 秒)。
上下移动比左右移动稍快。在普通电脑上,标准全高清屏幕窗口的整个移动过程大约需要 0.3 毫秒(1/3000 秒)。
下移和上移比左右移动稍快。在标准全高清屏幕窗口的普通电脑上,整个移位过程大约需要 0.3 毫秒(1/3000 秒)。
上下移动比左右移动稍快。在普通电脑上,标准全高清屏幕窗口的整个移动过程大约需要 0.3 毫秒(1/3000 秒)。
谢谢。
我在这里几次除以 0,但重启终端后就不会再出现了 )
我在这里几次除以 0,但重启终端后就不会再出现了 )
很奇怪,我从来没有遇到过这种情况。
,那就先这样替换吧:
不,这样更好:
不幸的是,我无法更新 QB 中的版本。又出故障了。如果能有一个适用于 4k 和 8k 显示器的通用解决方案,那将会非常有趣。
例如,我们画一个矩形,上面有两个按钮和两个输入框。按钮分别以像素为单位。
如果以像素为单位,那么在 4k 分辨率下,除了输入框外,所有内容都将缩小 2 倍。
但如果自动将整个画布平移 x2,那么在任何屏幕分辨率下,一切都会像在普通显示器上一样。
另一个问题可能是,有些用户会在 Windows 设置中放大字体(这会放大标准输入框)。
因此,有一个更通用的解决方案,即根据字体大小,用一个乘数来改变 kanvas 页面的像素化。
主要条件是在普通全高清显示器上以通常的像素尺寸绘制。解决方案如下
1. 严格按照 x2(4K 时)、x4(8K 时)改变画布比例
2. 使用与字体大小相关的动态乘数缩放工作表。
用途。用于仪表盘、交易面板和其他以像素为单位的绘制对象。
如果能有一个 4k 和 8k 显示器的通用解决方案,那将会非常有趣。
例如,我们画一个矩形,上面有两个按钮和两个输入框。按钮分别以像素为单位。
如果以像素为单位,那么在 4k 分辨率下,除了输入框外,其他所有内容都将缩小 2 倍。
但如果自动将整个画布平移 x2,那么在任何屏幕分辨率下,一切都会像在普通显示器上一样。
还有一个问题是,有些用户会进入 Windows 设置并增大字体(这会增大标准输入字段)。
因此,更通用的解决方案是根据字体大小,用一个乘数来改变画布工作表的像素化。
主要条件是在普通的全高清显示器上以通常的像素尺寸绘制。目前正在寻找解决方案:
1. 严格按照 x2(4K 时)、x4(8K 时)改变图纸比例
2. 使用与字体大小相关的动态乘数缩放工作表
用途。用于仪表盘、交易面板和其他以像素为单位的绘制对象。
解决方案的关键是TERMINAL_SCREEN_DPI。
是的,我后来在搜索中找到了。谢谢。这里有一个例子 -https://www.mql5.com/zh/docs/constants/environment_state/terminalstatus
最新版本 1.12
你好,非常有趣,有没有可能将画布转换为对象?我的意思是,例如,将画布矩形转换为标准对象矩形来管理它。
你好,非常有趣,有可能将画布转换为对象吗?我的意思是,例如,将画布的矩形转换成标准对象的矩形来管理它。
如果是字面上的矩形对象,那就不行。
画布也是一个对象。
你只能通过编程将画布对象 "转换 "为矩形对象,使其内容可以移动和缩放。
从视觉上看,它可以完全像一个矩形对象,并在四角用小方块来控制。但在这个社区中,只有少数程序员能够实现这一点,包括我在内。
如果我们谈论的是矩形内部内容的转换,那么我们可以从以下几个方面入手。如果我们谈论的是一个简单的填充或空矩形,任何程序员都能做到。