TextOut

この関数は、カスタム配列(バッファ)にテキストを表示し、その操作の結果を返します。配列はグラフィックリソースの作成に意図されています。

bool  TextOut(
  const string       text,          // 表示されたテキスト
  int               x,            // X 座標
  int                y,            // Y 座標
  uint             anchor,        // アンカーの種類
  uint             &data[],      // 出力バッファ
  uint             width,        // ピクセル単位でのバッファ幅
  uint             height,        // ピクセル単位でのバッファの高さ
  uint             color,        // テキストの色
  ENUM_COLOR_FORMAT color_format   // 出力する色のフォーマット
  );

パラメータ

text

[in]  バッファに書かれる表示テキスト。一行のテキストのみが表示されます。

x

[in]  表示テキストのアンカーポイントの X 座標

y

[in]  表示テキストのアンカーポイントの Y 座標

anchor

[in]  表示テキストのアンカーポイントの位置の事前定義された 9 つの方法のうちの 1 つでの値。この値は、水平方向と垂直方向のテキスト整列の 2 つのフラグの組み合わせで設定されます。フラグ名は下の「注意事項」にリストされています。

data[]

[in]  テキストが表示されるバッファ。バッファはグラフィックリソースの作成に意図されています。

[in]  ピクセル単位でのバッファ幅

height

[in]  ピクセル単位でのバッファの高さ

color

[in]  テキストの色

color_format

[in]  色のフォーマットは ENUM_COLOR_FORMAT 列挙値から設定されます。

戻り値

成功の場合は true、それ以外の場合は false。

注意事項

anchor で指定されたアンカーポイントは、水平方向と垂直方向のテキスト整列の 2 つのフラグの組み合わせで指定されます。水平方向テキスト整列のフラグ

  • TA_LEFT – アンカーポイントが境界ボックスの左側に位置します。
  • TA_CENTER – アンカーポイントが境界ボックスの中心に位置します。
  • TA_RIGHT – アンカーポイントが境界ボックスの右側に位置します。

垂直方向テキスト整列のフラグ

  • TA_TOP – アンカーポイントが境界ボックスの上側に位置します。
  • TA_VCENTER – アンカーポイントが境界ボックスの中心に位置します。
  • TA_BOTTOM – アンカーポイントが境界ボックスの下側に位置します。

 

フラグや指定されたアンカーポイントの可能な組み合わせは画像に示されています。
 

テキスト文字列結合の 9 つの可能な方法

例:

//--- 描画に使用されるキャンバスの幅と高さ
#define IMG_WIDTH  200
#define IMG_HEIGHT 200
//--- スクリプトの起動時にパラメータのウィンドウを表示する
#property script_show_inputs
//--- 色のフォーマットの設定を有効にする
input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA;
//--- 描画配列(バッファ)
uint ExtImg[IMG_WIDTH*IMG_HEIGHT];
//+------------------------------------------------------------------+
//| スクリプトプログラムを開始する関数                                          |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- 描画する OBJ_BITMAP_LABEL オブジェクトを作成する    
  ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0);
//--- CLOCK オブジェクトに書くためにグラフィックリソースの名称を指定する
  ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG");
 
//--- 補助変数
  double a;           // 矢印のコーナー
  uint   nm=2700;     // 分のコーナー
  uint   nh=2700*12;   // 時間のコーナー
  uint   w,h;         // テキスト文字列のサイズを受け取る変数
  int    x,y;         // テキスト文字列のアンカーポイントの現在の座標を算出するための変数
 
//--- スクリプトが停止するまで、無限ループで時計の針を回転させる
  while(!IsStopped())
    {
    //--- 時計描画のバッファ配列をクリアする
    ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0);
    //--- 時計面の描画数字のフォントを設定する
    TextSetFont("Arial",-200,FW_EXTRABOLD,0);
    //--- 時計面を描画する
    for(int i=1;i<=12;i++)
       {
        //--- 時計面の現在の時間サイズを受け取る
        TextGetSize(string(i),w,h);
        //--- 時計面の現在の時間サイズを受け取る
        a=-((i*300)%3600*M_PI)/1800.0;
        x=IMG_WIDTH/2-int(sin(a)*80+0.5+w/2);
        y=IMG_HEIGHT/2-int(cos(a)*80+0.5+h/2);
        //--- 時計面の時間を ExtImg[] バッファに出力する
        TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
       }
    //--- 分針を描画するためのフォントを指定する     
    TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nm%3600));
    //--- 分針のサイズを受け取る
    TextGetSize("----->",w,h);
    //--- 時計面の現在の分針のサイズを受け取る
     a=-(nm%3600*M_PI)/1800.0;
     x=IMG_WIDTH/2-int(sin(a)*h/2+0.5);
     y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5);
    //--- 時計面の分針を ExtImg[] バッファに出力する
    TextOut("----->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
    //--- 時針を描画するためのフォントを設定する      
    TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nh/12%3600));
    TextGetSize("==>",w,h);
    //--- 時計面での時針の座標を計算する
     a=-(nh/12%3600*M_PI)/1800.0;
     x=IMG_WIDTH/2-int(sin(a)*h/2+0.5);
     y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5);
    //--- 時計面の時針を ExtImg[] バッファに出力する
の種類     TextOut("==>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
    //--- グラpヒックリソースを更新する
    ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format);
    //--- 強制的なチャート更新
    ChartRedraw();
 
    //--- 時分のカウンタを増加する
     nm+=60;
     nh+=60;
    //--- フレーム間に短い休止を維持する
    Sleep(10);
    }
//--- スクリプトの操作が終了した際に CLOCK オブジェクトを削除する
  ObjectDelete(0,"CLOCK");
//---
 }

参照

リソースResourceCreate()ResourceSave()TextGetSize()TextSetFont()