初学者的问题 MQL4 MT4 MetaTrader 4 - 页 217 1...210211212213214215216217218219220221222223224...260 新评论 Maxim Kuznetsov 2020.10.14 09:40 #2161 alex_xss:嗯,也许。你是第一个还没有吃过的人))。但这并不重要,在任何人身上都可能出现 - 所以你必须解决它,不幸的是。我有很多,这取决于MT4的版本(我有一个来自Alpari)。 我有很多不同版本的产品,我在为它们编程:-)但软件还是一样的,它们只是在小品牌和指标/顾问的小芯片上有区别。 PS/色彩技巧可能来自显示器的错误DPI设置,存在 "色温校正工具","显卡游戏扩展"。诸如此类,不一而足。 PPS/顺便说一下,没有一个DC克服(更可能是由于贪婪、金钱)自己的指标/顾问/脚本/工具包。最多就是一个带有企业色彩的俗气的仪表盘。这有点暗示了 Nauris Zukas 2020.10.16 12:24 #2162 你好! 你能告诉我为什么OBJPROP_XSIZE 给出了0? //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnInit() { ObjectsDeleteAll(); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- string mnth=(string)TimeMonth(TimeCurrent())+"."; string dy=(string)TimeDay(TimeCurrent())+" "; string hr=(string)TimeHour(TimeCurrent())+":00 "; string TimeSig1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES); string Label1=" TEST "+Symbol()+" "+TimeSig1+" Test: "+mnth+dy+hr+" 1 2 3 4 5 6 7 8 9 10 11"; //string Label1="123456789"+"1"+"123456789"+"2"+"123456789"+"3"+"123456789"+"4"+"123456789"+" 5 "+"123456789"; obj_create("Sym",Label1,50,clrWhite,15); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void obj_create(string name,string object,int Y_distance,color Color,int size) { if(ObjectFind(name)==-1) { ObjectCreate(0,name,OBJ_LABEL,0,0,0); ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,size); ObjectSetString(0,name,OBJPROP_FONT,"Rockwell"); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,name,OBJPROP_SELECTED,false); ObjectSetInteger(0,name,OBJPROP_HIDDEN,true); ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_LEFT); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,10); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,Y_distance); ObjectSetInteger(0,name,OBJPROP_COLOR,Color); } ObjectSetString(0,name,OBJPROP_TEXT,object); //text size int text_sizeX=int(ObjectGetInteger(0,name,OBJPROP_XSIZE)); Print(" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ obj_create text_sizeX: ",text_sizeX); } //+------------------------------------------------------------------+ Maxim Kuznetsov 2020.10.16 14:40 #2163 Nauris Zukas:你好! 你能告诉我为什么OBJPROP_XSIZE 给出了0? OBJ_LABEL 是一个非常特殊的对象--在放置后和第一次图表更新前,宽度(X_SIZE)没有被定义。 这取决于字体和屏幕的dpi。在渲染完全发挥作用之前,我们不能对真正的宽度说什么。 Vitaly Muzichenko 2020.10.16 15:44 #2164 Maxim Kuznetsov:OBJ_LABEL 是一个非常特殊的对象--在放置后和第一次图表更新前,其宽度(X_SIZE)是未定义的。这取决于字体和屏幕的dpi,一般来说。在渲染完全发挥作用之前,我们不能对真正的宽度说什么。 试着重新绘制它,然后检查 ObjectSetString(0,name,OBJPROP_TEXT,object); ChartRedraw(); //text size int text_sizeX=int(ObjectGetInteger(0,name,OBJPROP_XSIZE)); Nauris Zukas 2020.10.16 16:11 #2165 Vitaly Muzichenko:试着重新绘制,然后再进行检查谢谢你,我将试一试。 这并不奏效。 Nauris Zukas 2020.10.16 16:17 #2166 Maxim Kuznetsov:OBJ_LABEL 是一个非常特殊的对象--在放置后和第一次图表更新前,其宽度(X_SIZE)是未定义的。这取决于字体和屏幕的dpi,一般来说。在渲染功能完全工作之前,我不能对真正的宽度说什么。 谢谢,想法很明确,我会实验一些东西。 Maxim Kuznetsov 2020.10.17 07:21 #2167 Nauris Zukas: 谢谢,我明白了,我将进行实验。 ChartRedraw并不直接重绘,它只是在终端深处的某个地方打上一个勾 "图表应尽快重绘"。 要知道文本标记(应该)得到的宽度,你可以尝试TextSetFont, TextGetSize - 只有在HiDPI下才会出现明显的差异。也可能不是 :-) 我还没有试过。 或者在下一个tick/chart_event时已经得到真正的OBJ_LABEL 的宽度,即正好在重绘之后 Nauris Zukas 2020.10.17 07:43 #2168 Maxim Kuznetsov:ChartRedraw并不直接重绘,它只是在终端深处的某个地方打上一个勾,"图表应该在第一时间被重绘"。要知道哪种宽度(应该)得到文字标记,你可以尝试TextSetFont, TextGetSize - 只有在HiDPI下才会出现明显的差异。也可能不是 :-) 我还没有试过。或者在下一个tick/chart_event时已经得到真正的OBJ_LABEL 的宽度,也就是在重新加载后的确切宽度。 已经开始工作了,谢谢!增加了OnDeinit(),在那里放了一个延迟,然后是OBJPROP_XSIZE。 P.S. 我想不出有什么更好的办法来处理剧本中的延迟。 for(int i=100000000; i>0; i--) {} Maxim Kuznetsov 2020.10.17 08:59 #2169 Nauris Zukas:谢谢,这一切都解决了!我添加了OnDeinit(),在那里放了一个延迟,然后是OBJPROP_XSIZE。 P.S. 我想不出有什么更好的办法来处理剧本中的延迟。 // задержка 500 милисекунд, годная для тестера ulong timestamp=GetTickCount64(); do { Sleep(500/4); // в тестере не сработает, зато спасёт GetTickCount } while(GetTickCount64()-timestamp<500); Nauris Zukas 2020.10.17 09:21 #2170 Maxim Kuznetsov: // задержка 500 милисекунд, годная для тестера ulong timestamp=GetTickCount64(); do { Sleep(500/4); // в тестере не сработает, зато спасёт GetTickCount } while(GetTickCount64()-timestamp<500); 谢谢你,它成功了! do{} while(GetTickCount()-Time11<1000); 1...210211212213214215216217218219220221222223224...260 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
嗯,也许。
你是第一个还没有吃过的人))。
但这并不重要,在任何人身上都可能出现 - 所以你必须解决它,不幸的是。
我有很多,这取决于MT4的版本(我有一个来自Alpari)。
我有很多不同版本的产品,我在为它们编程:-)但软件还是一样的,它们只是在小品牌和指标/顾问的小芯片上有区别。
PS/色彩技巧可能来自显示器的错误DPI设置,存在 "色温校正工具","显卡游戏扩展"。诸如此类,不一而足。
PPS/顺便说一下,没有一个DC克服(更可能是由于贪婪、金钱)自己的指标/顾问/脚本/工具包。最多就是一个带有企业色彩的俗气的仪表盘。这有点暗示了
你好!
你能告诉我为什么OBJPROP_XSIZE 给出了0?
你好!
你能告诉我为什么OBJPROP_XSIZE 给出了0?
OBJ_LABEL 是一个非常特殊的对象--在放置后和第一次图表更新前,宽度(X_SIZE)没有被定义。
这取决于字体和屏幕的dpi。在渲染完全发挥作用之前,我们不能对真正的宽度说什么。
OBJ_LABEL 是一个非常特殊的对象--在放置后和第一次图表更新前,其宽度(X_SIZE)是未定义的。
这取决于字体和屏幕的dpi,一般来说。在渲染完全发挥作用之前,我们不能对真正的宽度说什么。
试着重新绘制它,然后检查
试着重新绘制,然后再进行检查
谢谢你,我将试一试。
这并不奏效。OBJ_LABEL 是一个非常特殊的对象--在放置后和第一次图表更新前,其宽度(X_SIZE)是未定义的。
这取决于字体和屏幕的dpi,一般来说。在渲染功能完全工作之前,我不能对真正的宽度说什么。
谢谢,想法很明确,我会实验一些东西。
谢谢,我明白了,我将进行实验。
ChartRedraw并不直接重绘,它只是在终端深处的某个地方打上一个勾 "图表应尽快重绘"。
要知道文本标记(应该)得到的宽度,你可以尝试TextSetFont, TextGetSize - 只有在HiDPI下才会出现明显的差异。也可能不是 :-) 我还没有试过。
或者在下一个tick/chart_event时已经得到真正的OBJ_LABEL 的宽度,即正好在重绘之后
ChartRedraw并不直接重绘,它只是在终端深处的某个地方打上一个勾,"图表应该在第一时间被重绘"。
要知道哪种宽度(应该)得到文字标记,你可以尝试TextSetFont, TextGetSize - 只有在HiDPI下才会出现明显的差异。也可能不是 :-) 我还没有试过。
或者在下一个tick/chart_event时已经得到真正的OBJ_LABEL 的宽度,也就是在重新加载后的确切宽度。
已经开始工作了,谢谢!增加了OnDeinit(),在那里放了一个延迟,然后是OBJPROP_XSIZE。
P.S. 我想不出有什么更好的办法来处理剧本中的延迟。
for(int i=100000000; i>0; i--) {}
谢谢,这一切都解决了!我添加了OnDeinit(),在那里放了一个延迟,然后是OBJPROP_XSIZE。
P.S. 我想不出有什么更好的办法来处理剧本中的延迟。
// задержка 500 милисекунд, годная для тестера
ulong timestamp=GetTickCount64();
do {
Sleep(500/4); // в тестере не сработает, зато спасёт GetTickCount
} while(GetTickCount64()-timestamp<500);
// задержка 500 милисекунд, годная для тестера
ulong timestamp=GetTickCount64();
do {
Sleep(500/4); // в тестере не сработает, зато спасёт GetTickCount
} while(GetTickCount64()-timestamp<500);
谢谢你,它成功了!