在一个OBJ_TEXT对象中,是否可以在多行上输出文本? - 页 3 12345678 新评论 Nikolai Semko 2019.03.07 21:48 #21 Alexey Viktorov: 尼古拉,是否可以将文字对齐到右上角。我已经挣扎了半天了...我已经把它对准了右角,但文字只对准了左边。你能给我一个提示吗? 我知道至少有两种方法。阿列克谢,我一到电脑前就给你看,如果你在那之前做不到的话。你想让它在画布上还是在物体上? Andrei Trukhanovich 2019.03.07 23:15 #22 Nikolai Semko: 我知道至少有两种方法。在TextOut中设置锚点参数(可能也包括对象本身)。 计算文本大小并将其考虑在内 ) Nikolai Semko 2019.03.07 23:17 #23 Andrei Trukhanovich:在TextOut中设置锚点参数(可能也包括对象本身)。 计算文字大小并将其考虑在内 )对 Nikolai Semko 2019.03.08 06:23 #24 Alexey Viktorov: 尼古拉,是否有可能将文字对齐到右上角。我已经挣扎了半天了...右边的角是对齐的,但文字只在左边对齐。你能给我一个提示吗? #property indicator_chart_window #include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164 int OnInit() { RightTopText("Текст в правом верхнем углу","Tahoma",25); 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) { if(id==CHARTEVENT_CHART_CHANGE) RightTopText("Текст в правом верхнем углу","Tahoma",25); } //+------------------------------------------------------------------+ void RightTopText(string str,string name,int size) { Canvas.Erase(); Canvas.FontSet(name,size); Canvas.TextPosition(W.Width-Canvas.TextWidth(str)-5,0); Canvas.Comm(str); Canvas.Update(); } //+------------------------------------------------------------------+ Alexey Viktorov 2019.03.08 07:59 #25 Nikolai Semko: 我知道至少有两种方法。阿列克谢,我一到电脑前就给你看,如果你在那之前做不到的话。你想把它画在画布上还是物体上? 当然,是在画布上。既然这个问题是针对你的。 Alexey Viktorov 2019.03.08 08:00 #26 Andrei Trukhanovich:在TextOut中设置锚点参数(可能也包括对象本身)。 计算文字大小并将其考虑在内 ) 我试过了。昨天,我为它纠结了半天。一旦我改变了什么,文本就会完全消失。而我却找不到它。 Alexey Viktorov 2019.03.08 08:09 #27 Nikolai Semko: 我不是这个意思。右手边的角落很好。但如果两行或多行的长度不同,则按该行的第一个字符对齐。我想让字符串以字符串的最后一个字符为单位对齐。 这是第一行。 这是第二行。 而这是第三行。 在第一页的例子中,代码的第二和第三部分使用了像素移动或百分比移动。但这些线条只能通过从左边缘缩进来对齐。但这并不总是很方便,特别是当绳子的长度 可以变化时。例如,"sum = 10 "或 "sum = 1000"。 Igor Zakharov 2019.03.08 08:29 #28 很奇怪的是,这个话题已经转到帆布上了。自古以来,我一直在这样做。 string obj_pref="A_EA_"; void Text(int i,string text="",color CLR=clrBlue) { string name=obj_pref+IntegerToString(i); if(ObjectCreate(0,name,OBJ_LABEL,0,0,0)) { ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER); ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,5); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,int(i*FS*1.4)); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,FS); ObjectSetString (0,name,OBJPROP_FONT,"Arial"); } ObjectSetString (0,name,OBJPROP_TEXT,text); ObjectSetInteger(0,name,OBJPROP_COLOR,CLR); } FS--字体高度。 PS右上角的例子:) Alexey Viktorov 2019.03.08 08:33 #29 Igor Zakharov:很奇怪的是,这个话题已经转到帆布上了。自古以来,我一直在这样做。 FS--字体高度。 PS右上角的例子:)这也是我多年来能够做到的。 Alexey Viktorov 2019.03.08 10:10 #30 就这样吧,我已经知道了。 我们将OBJ_BITMAP_LABEL对象 按右边缘对齐,我们可以在水平和垂直方向上缩进它,我们将OBJPROP_ANCHOR分配给ANCHOR_RIGHT_UPPER。然后在创建资源时设置图片的宽度。这个值应该作为第二个参数放在TextOut中,然后文本将在画布的右边对齐。 12345678 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
尼古拉,是否可以将文字对齐到右上角。我已经挣扎了半天了...我已经把它对准了右角,但文字只对准了左边。你能给我一个提示吗?
我知道至少有两种方法。
在TextOut中设置锚点参数(可能也包括对象本身)。
计算文本大小并将其考虑在内 )
在TextOut中设置锚点参数(可能也包括对象本身)。
计算文字大小并将其考虑在内 )
尼古拉,是否有可能将文字对齐到右上角。我已经挣扎了半天了...右边的角是对齐的,但文字只在左边对齐。你能给我一个提示吗?
我知道至少有两种方法。
在TextOut中设置锚点参数(可能也包括对象本身)。
计算文字大小并将其考虑在内 )
我不是这个意思。右手边的角落很好。但如果两行或多行的长度不同,则按该行的第一个字符对齐。我想让字符串以字符串的最后一个字符为单位对齐。
这是第一行。
这是第二行。
而这是第三行。
在第一页的例子中,代码的第二和第三部分使用了像素移动或百分比移动。但这些线条只能通过从左边缘缩进来对齐。但这并不总是很方便,特别是当绳子的长度 可以变化时。例如,"sum = 10 "或 "sum = 1000"。很奇怪的是,这个话题已经转到帆布上了。自古以来,我一直在这样做。
FS--字体高度。
PS右上角的例子:)
很奇怪的是,这个话题已经转到帆布上了。自古以来,我一直在这样做。
FS--字体高度。
PS右上角的例子:)
这也是我多年来能够做到的。
就这样吧,我已经知道了。
我们将OBJ_BITMAP_LABEL对象 按右边缘对齐,我们可以在水平和垂直方向上缩进它,我们将OBJPROP_ANCHOR分配给ANCHOR_RIGHT_UPPER。然后在创建资源时设置图片的宽度。这个值应该作为第二个参数放在TextOut中,然后文本将在画布的右边对齐。