トップ  >  MQL4リファレンス  >  オブジェクト関数  >  TextOut
スポンサーリンク
検索

↑の検索エンジンが表示されない人は、
↓の古い検索エンジンを使用して下さい。
カスタム検索
MQL4リファレンスツリー
TextOut


TextOut


カスタム配列(バッファ)にテキストを表示(出力)します。
配列はグラフィカルリソースを作成するように設計されています。


関数書式:
bool  TextOut(
   const string        text,          // displayed text
   int                 x,             // X座標
   int                 y,             // Y座標
   uint                anchor,        // アンカータイプ
   uint                &data[],       // 出力バッファ
   uint                width,         // buffer width in pixels
   uint                height,        // buffer height in pixels
   uint                color,         // text color
   ENUM_COLOR_FORMAT  color_format   // color format for output
   );



■引数
引数名 初期値 I/O 詳細
text - In 表示(出力)するテキスト。
テキストはバッファに書き込まれます。
単一行のテキストのみ書き込まれます。
x - In テキスト表示するアンカーポイントのX座標
y - In テキスト表示するアンカーポイントのY座標
anchor - In アンカータイプ。
表示されるテキストのアンカーポイントの位置を指定します。
事前に定義された9つのメソッドから選択します。

値は2つのフラグを組み合わせて設定します。
フラグは水平方向と垂直方向のテキスト整列フラグです。
フラグの詳細は備考に記載しています。
data[] - Out 出力バッファ。
このバッファにテキストが表示(出力)されます。
バッファはグラフィカルリソース作成に使用します。
width - 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 境界ボックスの下側をアンカーポイントに設定


フラグの可能な組み合わせと、そのアンカーポイントは下図の通りです。



サンプルソース:
#property strict // strictは絶対に削除しない事
#property indicator_chart_window // カスタムインジケータをチャートウインドウに表示する

#define IMG_WIDTH  200    // 描画サイズ幅
#define IMG_HEIGHT 200    // 描画サイズ高さ

uint  ExtImg[IMG_WIDTH*IMG_HEIGHT]; // 描画配列(バッファ)

//+------------------------------------------------------------------+
//| 初期化イベント                         
//|------------------------------------------------------------------|
void OnInit() {  

   ObjectsDeleteAll();

   ArrayFill(ExtImg,0, IMG_WIDTH * IMG_HEIGHT ,0);         // 描画配列バッファを0クリア
   
   ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0);      // OBJ_BITMAP_LABELオブジェクト作成

   // CLOCKオブジェクトに書き込む為のグラフィカルオブジェクトリソース名を指定
   ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG"); 
 
   EventSetTimer(1);                                      // OnTimerセット[分解能:1sec]

}

//+------------------------------------------------------------------+
//| アンロードイベント                         
//|------------------------------------------------------------------|
void OnDeinit(const int reason){
   ObjectDelete(0,"CLOCK");                       // CLOCKオブジェクト削除
}

//+------------------------------------------------------------------+
//| タイマーイベント                         
//|------------------------------------------------------------------|
void OnTimer() {

    string out_text;
    
    ArrayFill(ExtImg,0, IMG_WIDTH * IMG_HEIGHT ,0);                    // 描画バッファ配列を0クリア

    out_text = TimeToStr(TimeLocal(),TIME_DATE | TIME_SECONDS);   // 現在PCの日時を取得
    
    // 描画メソッドのフォント設定(MSゴシック, 10.0pt, 30度)
    TextSetFont("MS ゴシック",-100,FW_EXTRABOLD, 300);            

    TextOut(out_text,30,100,TA_LEFT|TA_TOP,                          // 出力テキスト設定
             ExtImg,IMG_WIDTH,IMG_HEIGHT,clrWhite,COLOR_FORMAT_XRGB_NOALPHA);
    
    ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,              // グラフィカルリソース(IMG)作成
                     0,0,IMG_WIDTH,COLOR_FORMAT_XRGB_NOALPHA);
    
    ChartRedraw();                                                   // チャートを強制再描画
 
}

//+------------------------------------------------------------------+
//| OnCalculate(tick受信)イベント
//| カスタムインジケータ専用のイベント関数
//+------------------------------------------------------------------+
int OnCalculate(const int     rates_total,      // 入力された時系列のバー数
                const int       prev_calculated,  // 計算済み(前回呼び出し時)のバー数
                const datetime &time[],          // 時間
                const double   &open[],          // 始値
                const double   &high[],          // 高値
                const double   &low[],           // 安値
                const double   &close[],         // 終値
                const long     &tick_volume[],   // Tick出来高
                const long     &volume[],        // Real出来高
                const int      &spread[])        // スプレッド
{


   return( rates_total ); // 戻り値設定:次回OnCalculate関数が呼ばれた時のprev_calculatedの値に渡される
}


結果:




サンプルソース2:
#property strict // strictは絶対に削除しない事
#property indicator_chart_window // カスタムインジケータをチャートウインドウに表示する

#define IMG_WIDTH  200    // 描画サイズ幅
#define IMG_HEIGHT 200    // 描画サイズ高さ

input ENUM_COLOR_FORMAT clr_format = COLOR_FORMAT_XRGB_NOALPHA; // カラーフォーマット
uint  ExtImg[IMG_WIDTH*IMG_HEIGHT]; // 描画配列(バッファ)


//+------------------------------------------------------------------+
//| 初期化イベント                         
//|------------------------------------------------------------------|
void OnInit() {  

   ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0);      // OBJ_BITMAP_LABELオブジェクト作成

   // CLOCKオブジェクトに書き込む為のグラフィカルオブジェクトリソース名を指定
   ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG"); 
 
   EventSetTimer(1);                                      // OnTimerセット[分解能:1sec]

}

//+------------------------------------------------------------------+
//| アンロードイベント                         
//|------------------------------------------------------------------|
void OnDeinit(const int reason){
   ObjectDelete(0,"CLOCK");                       // CLOCKオブジェクト削除

}

//+------------------------------------------------------------------+
//| タイマーイベント                         
//|------------------------------------------------------------------|
void OnTimer() {

      double arr_corner;              // 矢印コーナー
      uint   width,high;              // 受信した文字列サイズ用変数
      int    posi_x,posi_y;           // テキスト文字列アンカーポイントの現在座標算出用変数
      datetime nowtime;               // ローカルPCの時間取得用
      double temp_angle;
      int    icount;

      nowtime = TimeLocal();                                        // ローカルPCの時間取得
      
      ArrayFill(ExtImg,0, IMG_WIDTH * IMG_HEIGHT ,0);               // 時計描画バッファ配列を0クリア
      TextSetFont("Arial",-200,FW_EXTRABOLD,0);                     // 時計の時間表示の描画フォント設定

      // 時計の時間表示描画
      for(icount=1 ; icount <= 12 ; icount++) {
         TextGetSize( (string)(icount),width,high);                   // 時間表示テキストサイズを取得

         arr_corner= -((icount*300)%3600*M_PI)/1800;                // 時間表示位置の角度算出[rad]
         posi_x = IMG_WIDTH /2- (int)(sin(arr_corner)*80+0.5+width/2); // 角度を元にX座標を計算
         posi_y = IMG_HEIGHT/2- (int)(cos(arr_corner)*80+0.5+high /2); // 角度を元にY座標を計算

         TextOut((string)(icount),posi_x,posi_y,TA_LEFT|TA_TOP,       // ExtImg[]バッファに時計表示の時間を出力
                 ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
      }

      // 秒針設定
      temp_angle = (2700 + TimeSeconds(nowtime)*(3600/60) ) % 3600;   // 現在の秒針の角度算出[(0.1度]
      TextSetFont("Arial",-200,FW_THIN,- (int)(temp_angle));             // 現在の秒針を描画する為のフォント設定
      TextGetSize("-------",width,high);                              // 秒針のサイズ取得

      arr_corner= -(temp_angle*M_PI)/1800;                            // 秒針の角度変換[rad]
      posi_x=IMG_WIDTH /2- (int)(sin(arr_corner)*high/2+0.5);            // 角度を元にX座標を計算
      posi_y=IMG_HEIGHT/2- (int)(cos(arr_corner)*high/2+0.5);            // 角度を元にY座標を計算
      
      TextOut("-------",posi_x,posi_y,TA_LEFT|TA_TOP,                 // ExtImg[]バッファに秒針表示の時間を出力
              ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);

      // 分針設定
      temp_angle = (2700 + TimeMinute(nowtime)*(3600/60)) % 3600;     // 現在の分針の角度算出[(0.1度]
      TextSetFont("Arial",-200,FW_EXTRABOLD,- (int)(temp_angle));        // 現在の分針を描画する為のフォント設定
      TextGetSize("----->",width,high);                               // 分針のサイズ取得

      arr_corner=-(temp_angle*M_PI)/1800;                             // 分針の角度変換[rad]
      posi_x=IMG_WIDTH /2- (int)(sin(arr_corner)*high/2+0.5);            // 角度を元にX座標を計算
      posi_y=IMG_HEIGHT/2- (int)(cos(arr_corner)*high/2+0.5);            // 角度を元にY座標を計算

      TextOut("----->",posi_x,posi_y,TA_LEFT|TA_TOP,                  // ExtImg[]バッファに分針表示の時間を出力
              ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      // 時針設定
      temp_angle = (2700 + (TimeHour(nowtime)%12) *(3600/12)) % 3600; // 現在の時針の角度算出[(0.1度]
      TextSetFont("Arial",-200,FW_EXTRABOLD,- (int)(temp_angle));        // 現在の時針を描画する為のフォント設定
      TextGetSize("==>",width,high);                                  // 時針のサイズ取得
                                                                      
      arr_corner=-(temp_angle*M_PI)/1800.0;                           // 時針の角度変換[rad]
      posi_x=IMG_WIDTH /2- (int)(sin(arr_corner)*high/2+0.5);            // 角度を元にX座標を計算
      posi_y=IMG_HEIGHT/2- (int)(cos(arr_corner)*high/2+0.5);            // 角度を元にY座標を計算
                                                                      
      TextOut("==>",posi_x,posi_y,TA_LEFT|TA_TOP,ExtImg,              // ExtImg[]バッファに時針表示の時間を出力
              IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);


      // 出力
      ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,             // グラフィカルリソース(IMG)作成
                     0,0,IMG_WIDTH,clr_format);
      ChartRedraw();                                                  // チャートを強制再描画
 
}

//+------------------------------------------------------------------+
//| OnCalculate(tick受信)イベント
//| カスタムインジケータ専用のイベント関数
//+------------------------------------------------------------------+
int OnCalculate(const int     rates_total,      // 入力された時系列のバー数
                const int       prev_calculated,  // 計算済み(前回呼び出し時)のバー数
                const datetime &time[],          // 時間
                const double   &open[],          // 始値
                const double   &high[],          // 高値
                const double   &low[],           // 安値
                const double   &close[],         // 終値
                const long     &tick_volume[],   // Tick出来高
                const long     &volume[],        // Real出来高
                const int      &spread[])        // スプレッド
{


   return( rates_total ); // 戻り値設定:次回OnCalculate関数が呼ばれた時のprev_calculatedの値に渡される
}


結果:




スポンサーリンク
スポンサーリンク


Copyright ©2015 MT4でEA自作しちゃお~ All Rights Reserved.


Top

inserted by FC2 system