恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

改行できないっぽい(Text Object と Label Object)

MQL4に関するネット上の記事を読んでいたら、ラベルオブジェクト内のテキストは改行できないと書かれていました。

 

では、テキストオブジェクトの中では改行ができるのだろうかという疑問が浮かび、以下のコードで実験してみました。

int x, y;
datetime uhoTime;
int      window = 0;
double   price  = 0;

ChartTimePriceToXY(0, 0, Time[0], Ask, x, y);
x = x + 150;
y = y - 8;
ChartXYToTimePrice(0, x, y, window, uhoTime, price);
ObjectCreate (objName, OBJ_TEXT, 0, uhoTime, price);
ObjectSetText(objName, "UHOHO \n\n UHO", 12, "Arial", clrYellow);
ObjectSet    (objName, OBJPROP_CORNER, 0);
ObjectSet    (objName, OBJPROP_XDISTANCE, 250);
ObjectSet    (objName, OBJPROP_YDISTANCE, 20);

コード内の "UHOHO \n UHO" の中にある \n が改行コードです。

しかし、チャートに表示された文字は改行されていませんでした。

f:id:philojuan:20200707071803p:plain

 

どうやら、テキストオブジェクト内のテキストも改行できないようです(^^;。

 

「改行」は何て言うの?

MQLに関しては海外サイトの方が情報が多いので、英単語で検索することが多いのですが、「改行」という英語が何なのか少し迷いました。

ネットを調べていると、「new line」という表現が使われていました。

なお、動詞に関しては「make」「insert」「add」「write」等が見受けられました。

(例)insert a new line

 

それと、改行コード(\n)については、「a newline character」と表現されていました。

 

OBJ_TEXT の表示に手こずった話

以下のページを見て、本記事末尾のコードを書いたのですが、テキストオブジェクトは表示されませんでした。そんなわけで、ネットを調べ、上述のコードに落ち着きました。

https://docs.mql4.com/constants/objectconstants/enum_object/obj_text

 

 (テキストオブジェクトが表示されなかったコード[失敗例])

// オブジェクトが表示され無かった時のエラーを調べるためのif文
if(!ObjectCreate(0, objName, OBJ_TEXT, 0, 0, 0))
{
   Print(__FUNCTION__, ": failed to create Text Object! Error code = ", GetLastError());
   return(-1);
}

ObjectSetString (0, objName, OBJPROP_TEXT, "UHOHO");      
ObjectSetString (0, objName, OBJPROP_FONT, "Arial");      
ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, 10);
ObjectSetDouble (0, objName, OBJPROP_ANGLE, 0.0);
ObjectSetInteger(0, objName, OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);
ObjectSetInteger(0, objName, OBJPROP_COLOR, clrYellow);
ObjectSetInteger(0, objName, OBJPROP_BACK, false);
ObjectSetInteger(0, objName, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, objName, OBJPROP_SELECTED, false);
ObjectSetInteger(0, objName, OBJPROP_HIDDEN, false);
ObjectSetInteger(0, objName, OBJPROP_ZORDER, 0);

ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, 200);
ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, 100);