MS系フォントの英字は全角、スペースは半角が正解
MT4では、ラベルやテキストをチャートにペタペタ貼り付けることができます。
その際、フォントを指定するのですが、1つ罠にハマったので、備忘録がてら共有します。
結論から言うと、「MS P明朝」や「MS 明朝」などのMS系フォントの真ん中にあるスペースは半角で、それ以外は全角にしないと認識しません。
ですから、「MS P明朝」はNGです。
証拠画像はこちらです。
以下の順で表示しています。
- 1. MS P明朝(英字:半角、スペース:全角)
- 2. MS P明朝(英字:半角、スペース:半角)
- 3. MS P明朝(英字:全角、スペース:全角)
- 4. MS P明朝(英字:全角、スペース:半角)←これが正解
- 5. Unknown Font(英字:半角、スペース:全角)←存在しないフォント
- 6. Unknown Font(英字:半角、スペース:半角)←存在しないフォント
- 7. MS Pゴシック(英字:全角、スペース:半角)←これも正解
- 8. (フォント指定なし)
- 9. Arial
やってしまいがちな誤記は、2と3だと思います。
まさか全角と半角を混ぜる必要がある4とは思わないですよね^-^;
5以降はおまけです。
存在しないフォントを指定したらどうなるかをテストしたのが5と6です。違いは一部全角文字を混ぜたか否か(5のスペースが全角)。
全角文字を含む不正なフォント名を指定すると、どうやら「MS Pゴシック」に変換されるようです。
その証拠が7です。5と7は同じフォントになっていることが分かります。
6のようにオール半角で不正なフォント名を指定すると、文字が消えちゃいました。
8はフォントを指定しなかった場合です。その場合、デフォルトの「Arial」が採用されます。
全角文字に対応していないフォントなので文字化けしちゃっていますね。
本当にArialなのか疑ってみた結果が9です。文字化けの仕方が同じなので、Arialで間違いなさそうです。
地味ですが間違いやすいので、MT4のEAやインジケーターを作成する方はご注意ください。
白状すると、私が作った過去のプログラムも一部間違っておりましたorz
幸い「MS Pゴシック」をデフォルトパラメータにしていたので、出力結果としては問題ありませんでしたが…。
サンプルソース
上記の証拠画像のソースを無くさないように貼り付けておきます。
//+------------------------------------------------------------------+ //| FontTest.mq4 | //| Copyright (c) 2019, りゅーき | //| https://autofx100.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright (c) 2019, りゅーき" #property link "https://autofx100.com/" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { FontTest("FontTest1", 40, 1, "MS P明朝"); FontTest("FontTest2", 70, 2, "MS P明朝"); FontTest("FontTest3", 100, 3, "MS P明朝"); FontTest("FontTest4", 130, 4, "MS P明朝"); FontTest("FontTest5", 160, 5, "Unknown Font"); FontTest("FontTest5", 190, 6, "Unknown Font"); FontTest("FontTest6", 220, 7, "MS Pゴシック"); FontTest("FontTest7", 250, 8, ""); FontTest("FontTest8", 280, 9, "Arial"); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+ //| FontTestオブジェクト作成 | //+------------------------------------------------------------------+ void FontTest(string aObjNm, int aY_Distance, int aNo, string aFontName) { bool created = ObjectCreate(0, aObjNm, OBJ_LABEL, 0, 0, 0); if(created){ ObjectSetInteger(0, aObjNm, OBJPROP_XDISTANCE, 20); ObjectSetInteger(0, aObjNm, OBJPROP_YDISTANCE, aY_Distance); ObjectSetInteger(0, aObjNm, OBJPROP_FONTSIZE, 20); ObjectSetInteger(0, aObjNm, OBJPROP_COLOR, clrWhite); ObjectSetString(0, aObjNm, OBJPROP_TEXT, (string)aNo + ". あいうえお アイウエオ ABCDE"); if(aFontName != ""){ ObjectSetString(0, aObjNm, OBJPROP_FONT, aFontName); } } }