TextSetFont

この関数は、描画メソッドを使用してテキストを表示するためのフォントを設定します。デフォルトとしてArial120(12 pt)が使用されます。

bool  TextSetFont(
  const string name,            // フォント名またはディスクでのフォントへのパス
  int           size,            // フォントサイズ
  uint          flags,          // フラグの組み合わせ
  int          orientation=0   // テキストの傾斜角度
  );

パラメータ

name

[in]  システム内フォント名、またはディスク上のフォントやフォントファイルのパスを含むリソースの名称。

size

[in]  正負の値で設定出来るフォントサイズ。正の値の場合は、表示されるテキストのサイズは、オペレーティングシステムのフォントサイズの設定に依存しません。負の値の場合、少数第一の桁で設定され、テキストのサイズは、オペレーティングシステムの設定(「標準規模」や「大規模」)に依存します。モードの違いについての詳細は、下記の注意事項を参照してください。

flags

[in]  フォントスタイルを記述するフラグの組み合わせ

orientation

[in]  0.1度の測定単位での、X 軸に対するテキストの水平方向の傾き。例えば orientation=450 は45度に等しい傾きを表しています。

戻り値

現在のフォントが正常にインストールされている場合は true それ以外の場合は false を返します。可能なエラーコードは下記です。

  • ERR_INVALID_PARAMETER(4003) - name が NULL または "" (空の文字列)です。
  • ERR_INTERNAL_ERROR(4001) - オペレーティングシステムエラー(例えば、存在しないフォントを作成する試み)

注意事項

「::」 がフォント名に使用された場合、フォントは EX5 リソースからダウンロードされます。name フォント名が拡張子と指定された場合ファイルからダウンロードされ、パスが「\」または「/」から始まる場合、ファイルが MQL5 ディレクトリと相対して検索されます。それ以外の場合は TextSetFont() 関数を呼び出した EX5 ファイルのパスを基準に検索されます。

フォントサイズは、正または負の値を使用して設定されます。この事実は、テキストサイズのオペレーティングシステムの設定(サイズスケール)への依存性を定義します。

  • サイズが正の数で指定された場合、このサイズは、使用可能なフォントから選ばれたシンボルのグリフの高さに一致するデバイスの物理的な測定単位(ピクセル)に変換されます。これは、TextOut() 関数で表示されたテキストとOBJ_LABEL ("Label") で表示されたテキストがチャートで一緒に使用される場合には推奨されていません。
  • サイズが負の数で指定された場合、この数は 論理ポイントの10倍となります(例えば -350 は 35 論理ポイント). 取得された値は、デバイス(ピクセル)の物理的な測定単位に変換され、利用可能なフォントから選んだシンボルの高さの絶対値に相当します。画面のテキストのサイズを OBJ_LABEL オブジェクトの物と同じようにするには、オブジェクトプロパティで指定されたフォントサイズを -10 で掛けます。

フラグは、フォント幅を指定するフラグのいずれかの形式のフラグの組み合わせとして使用することが出来ます。フラグ名は下記に見られます。

フォントスタイルを指定するフラグ

フラグ

説明

FONT_ITALIC

イタリック

FONT_UNDERLINE

アンダーライン

FONT_STRIKEOUT

ストライクアウト

 

フォントの幅を指定するフラグ

フラグ

FW_DONTCARE

FW_THIN

FW_EXTRALIGHT

FW_ULTRALIGHT

FW_LIGHT

FW_NORMAL

FW_REGULAR

FW_MEDIUM

FW_SEMIBOLD

FW_DEMIBOLD

FW_BOLD

FW_EXTRABOLD

FW_ULTRABOLD

FW_HEAVY

FW_BLACK

 

例:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link     "https://www.mql5.com"
#property version   "1.00"
 
#define   COORD_X   200
#define   COORD_Y   100
#define   OBJ_NAME   "TestTextGetSizeBitmapLabel"
#define   RES_NAME   "TestTextGetSizeResource"
#define   COLOR_NULL 0x00FFFFFF
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- 現在のチャートID
  long   chart_id= ChartID();
 
  string font_names[] ={"Arial", "Tahoma", "Calibri"};
  uint   flags_array[]={0, FONT_ITALIC, FONT_UNDERLINE, FONT_STRIKEOUT};
  uint   fw_array[]={FW_DONTCARE, FW_THIN, FW_EXTRALIGHT, FW_ULTRALIGHT, FW_LIGHT,
                    FW_NORMAL, FW_REGULAR, FW_MEDIUM, FW_SEMIBOLD, FW_DEMIBOLD,
                    FW_BOLD, FW_EXTRABOLD, FW_ULTRABOLD, FW_HEAVY, FW_BLACK};
 
//--- 価格チャートの属性描画をすべて無効化する
  ChartSetInteger(chart_id, CHART_SHOW, false);
 
//--- グラフィックリソースのパラメータを宣言する
  uint rc_width =(int)ChartGetInteger(chart_id, CHART_WIDTH_IN_PIXELS);
  uint rc_height=(int)ChartGetInteger(chart_id, CHART_HEIGHT_IN_PIXELS);
  uint rc_data[];
  uint rc_size=rc_width*rc_height;
 
//--- 文字出力用のグラフィカルリソースを作成する
  if(!CreateResource(chart_id, rc_data, rc_width, rc_height))
    return;
 
//--- フォント名をループする
  for(int i=0; i<(int)font_names.Size(); i++)
    {
    //--- フォントフラグをループする
    for(int j=0; j<(int)flags_array.Size(); j++)
       {
        //--- 配列から取得したフォントとスタイルフラグで文字を描画する
        DrawText(font_names[i], flags_array[j], rc_data, rc_width, rc_height);
        Sleep(800);
        ArrayInitialize(rc_data, COLOR_NULL);
       }
    Sleep(800);
    ArrayInitialize(rc_data, COLOR_NULL);
    }
 
//--- 異なるフォントサイズ・スタイルですべての文字を出力した後、
//--- 異なるフォント幅フラグで文字を表示する
  for(int i=0; i<(int)fw_array.Size(); i++)
    {
    //--- 幅フラグ付き文字表示用のフォントサイズとフォント名を設定する
    string font_name="Tahoma";
    int   size=-140;
    TextSetFont(font_name, size, fw_array[i]);
     
    //--- 描画文字列を作成し、リソースのピクセル配列に出力してリソースを更新する
    string text=StringFormat("Text%d: Font name: \"%s%s\", size: %d (%d)", i+1, font_name, FlagWidthDescription(fw_array[i]), size, size/-10);
    TextOut(text, COORD_X, COORD_Y, ANCHOR_LEFT_UPPER, rc_data, rc_width, rc_height, ColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
    Update(RES_NAME, rc_data, rc_width, rc_height, true);
    //--- 1秒待つ
    Sleep(1000);
    ArrayInitialize(rc_data, COLOR_NULL);
    }
 
//--- 5秒待ってから、リソースをリリースsひ、グラフィックオブジェクトを削除する
  Sleep(5000);
  ResourceFree(RES_NAME);
  ObjectDelete(chart_id, OBJ_NAME);
 
//--- 価格チャートの属性描画を許可する
  ChartSetInteger(chart_id, CHART_SHOW, true);
  ChartRedraw(chart_id);
  /*
   スクリプト実行の結果、チャート上に文字メッセージが表示される
   文字は異なるフォント、スタイル、幅フラグを持つ
  */
 }
//+------------------------------------------------------------------+
//| 指定フォントとフラグで                                                   |
//| 異なるサイズの5つの文字列を表示する                                       |
//+------------------------------------------------------------------+
void DrawText(const string font_name, uint flags, uint &pixels_array[], uint res_width, uint res_height)
 {
//--- 異なるフォントサイズで5つの文字列を出力する
  for(int i=0; i<5; i++)
    {
    //--- 描画メソッドを用いて、文字出力用のフォントサイズを計算しフォントを設定する
    int size=-140+10*i;
    TextSetFont(font_name, size, flags);
     
    //--- 描画文字列を作成し、リソースのピクセル配列に出力してリソースを更新する
    string text=StringFormat("Text%d: Font name: \"%s%s\", size: %d (%d)", i+1, font_name, FlagDescription(flags), size, size/-10);
    TextOut(text, COORD_X, COORD_Y+22*i, ANCHOR_LEFT_UPPER, pixels_array, res_width, res_height, ColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
    Update(RES_NAME, pixels_array, res_width, res_height, true);
    //--- 待機する
    Sleep(800);
    }
 }
//+------------------------------------------------------------------+
//| フォントスタイルフラグの説明を返す                                          |
//+------------------------------------------------------------------+
string FlagDescription(const uint flag)
 {
  switch(flag)
    {
    case FONT_ITALIC     : return(" Italic");
    case FONT_UNDERLINE  : return(" Underline");
    case FONT_STRIKEOUT  : return(" Strikeout");
    }
  return("");
 }
//+------------------------------------------------------------------+
//| フォント幅フラグの説明を返す                                              |
//+------------------------------------------------------------------+
string FlagWidthDescription(const uint flag)
 {
  switch(flag)
    {
    case FW_DONTCARE  : return(" Dontcare");
    case FW_THIN      : return(" Thin");
    case FW_EXTRALIGHT: return(" Extralight");
    case FW_ULTRALIGHT: return(" Ultralight");
    case FW_LIGHT     : return(" Light");
    case FW_NORMAL    : return(" Normal");
    case FW_REGULAR   : return(" Regular");
    case FW_MEDIUM    : return(" Medium");
    case FW_SEMIBOLD  : return(" Semibold");
    case FW_DEMIBOLD  : return(" Demibold");
    case FW_BOLD      : return(" Bold");
    case FW_EXTRABOLD : return(" Extrabold");
    case FW_ULTRABOLD : return(" Ultrabold");
    case FW_HEAVY     : return(" Heavy");
    case FW_BLACK     : return(" Black");
    }
  return("");
 }
//+------------------------------------------------------------------+
//| チャート全体用のグラフィカルリソースを作成する                                 |
//+------------------------------------------------------------------+
bool CreateResource(const long chart_id, uint &pixel_data[], const uint width, const uint height)
 {
//--- ピクセル配列のサイズを設定する
  ResetLastError();
  uint size=width*height;
  if(ArrayResize(pixel_data, size)!=size)
    {
    PrintFormat("%s: ArrayResize() failed. Error code %d",__FUNCTION__, GetLastError());
    return(false);
    }
//--- ピクセル配列を透明色で塗りつぶし、それに基づいてグラフィック リソースを作成する
  ArrayInitialize(pixel_data, COLOR_NULL);
  if(!ResourceCreate(RES_NAME, pixel_data, width, height, 0, 0, 0, COLOR_FORMAT_ARGB_NORMALIZE))
    {
    PrintFormat("%s: ResourceCreate() failed. Error code ",__FUNCTION__, GetLastError());
    return(false);
    }
 
//--- チャート左上隅の座標にグラフィックラベルオブジェクトを作成する
  if(!ObjectCreate(0, OBJ_NAME, OBJ_BITMAP_LABEL, 0, 0, 0))
    {
    PrintFormat("%s: ObjectCreate() failed. Error code %d",__FUNCTION__, GetLastError());
    return(false);
    }
//--- 作成されたビットマップ オブジェクトの幅と高さを、グラフィックリソースの幅と高さに等しく設定する
//--- オブジェクトのアンカーポイントをその中心に設定する
  if(!ObjectSetInteger(chart_id, OBJ_NAME, OBJPROP_XSIZE, width))
    {
    PrintFormat("%s: ObjectSetInteger() failed. Error code %d",__FUNCTION__, GetLastError());
    return(false);
    }
  if(!ObjectSetInteger(chart_id, OBJ_NAME, OBJPROP_YSIZE, height))
    {
    PrintFormat("%s: ObjectSetInteger() failed. Error code %d",__FUNCTION__, GetLastError());
    return(false);
    }
//--- ビットマップオブジェクト用に以前に作成したグラフィックリソースを画像ファイルとして指定する
//--- この場合、使用されるグラフィックリソースの名前を示すために、その名前の前に「::」を追加する必要がある
  if(!ObjectSetString(chart_id, OBJ_NAME, OBJPROP_BMPFILE, "::"+RES_NAME))
    {
    PrintFormat("%s: ObjectSetString() failed. Error code %d",__FUNCTION__, GetLastError());
    return(false);
    }
   
//--- すべてが成功
  return(true);
 }
//+------------------------------------------------------------------+
//| グラフィックリソースデータを更新する                                         |
//+------------------------------------------------------------------+
void Update(const string res_name, const uint &pixel_data[], const uint width, const uint height, const bool redraw)
 {
//--- ゼロ次元が渡された場合は終了する
  if(width==0 || height==0)
    return;
//--- リソース データを更新し、チャートを再描画する
  if(ResourceCreate(res_name, pixel_data, width, height, 0, 0, 0, COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
    ChartRedraw();
 }

参照

リソースResourceCreate()ResourceSave()TextOut()