OBJ_RECTANGLE_LABEL

四角形ラベルオブジェクト

ObjRectangleLabel

注意事項

アンカーポイントの座標はピクセルで設定されています。四角形ラベルのアンカーポイントとして使用される隅は ENUM_BASE_CORNER 列挙から選択出来ます。四角形ラベルの境界線の種類は ENUM_BORDER_TYPE 列挙から選択出来ます。

このオブジェクトは、カスタムグラフィカルインタフェースの作成と設計に使用されます。

次のスクリプトは、チャート上で四角形ラベルオブジェクトを作成して移動します。グラフィックオブジェクトのプロパティを作成そして変更するために特別な関数が開発されています。これらの関数はお使いのアプリケーションでそのまま使用することが出来ます。

 

//--- 説明
#property description "Script creates \"Rectangle Label\" graphical object."
//--- スクリプトの起動時に入力パラメータのウィンドウを表示する
#property script_show_inputs
//--- スクリプト入力パラメータ
input string           InpName="RectLabel";         // ラベル名
input color           InpBackColor=clrSkyBlue;     // 背景色
input ENUM_BORDER_TYPE InpBorder=BORDER_FLAT;       // 境界線の種類
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // アンカーに使用されるチャートのコーナー
input color           InpColor=clrDarkBlue;       // フラット境界線の色 (Flat)
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID;       // フラット境界スタイル (Flat)
input int             InpLineWidth=3;             // フラット境界幅 (Flat)
input bool             InpBack=false;               // 背景オブジェクト
input bool             InpSelection=true;           // 強調表示して移動
input bool             InpHidden=true;             // オブジェクトリストに隠す
input long             InpZOrder=0;                 // マウスクリックの優先順位
//+------------------------------------------------------------------+
//| 四角形ラベルを作成する                                                 |
//+------------------------------------------------------------------+
bool RectLabelCreate(const long             chart_ID=0,               // チャート識別子
                    const string           name="RectLabel",         // ラベル名
                    const int              sub_window=0,             // サブウィンドウ番号
                    const int              x=0,                     // X 座標
                    const int              y=0,                     // Y 座標
                    const int              width=50,                 // 幅
                    const int              height=18,               // 高さ
                    const color            back_clr=C'236,233,216', // 背景色
                    const ENUM_BORDER_TYPE border=BORDER_SUNKEN,     // 境界線の種類
                    const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // アンカーに使用されるチャートのコーナー
                    const color            clr=clrRed,               // フラット境界線の色 (Flat)
                    const ENUM_LINE_STYLE  style=STYLE_SOLID,       // フラット境界スタイル
                    const int              line_width=1,             //フラット境界幅
                    const bool             back=false,               // 背景で表示する
                    const bool             selection=false,         // 強調表示して移動
                    const bool             hidden=true,             // オブジェクトリストに隠す
                    const long             z_order=0)               // マウスクリックの優先順位
 {
//--- エラー値をリセットする
  ResetLastError();
//--- 四角形ラベルを作成する
  if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
    {
    Print(__FUNCTION__,
          ": failed to create a rectangle label! Error code = ",GetLastError());
    return(false);
    }
//--- ラベル座標を設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
  ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- ラベルサイズを設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
  ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- 背景色を設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- 境界線を設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);
//--- ポイント座標が相対的に定義されているチャートのコーナーを設定
  ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- フラット境界線色を設定する(Flat モード)
  ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- フラット境界線スタイルを設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- フラット境界線幅を設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
//--- 前景(false)または背景(true)に表示
  ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- マウスでラベルを移動させるモードを有効(true)か無効(false)にする
  ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
  ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- オブジェクトリストのグラフィックオブジェクトを非表示(true)か表示(false)にする
  ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- チャートのマウスクリックのイベントを受信するための優先順位を設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- 実行成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 四角形ラベルを移動するl                                                |
//+------------------------------------------------------------------+
bool RectLabelMove(const long   chart_ID=0,       // チャート識別子
                  const string name="RectLabel", // ラベル名
                  const int    x=0,             // X 座標
                  const int    y=0)             // Y 座標
 {
//--- エラー値をリセットする
  ResetLastError();
//--- 四角形ラベルを移動する
  if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
    {
    Print(__FUNCTION__,
          ": failed to move X coordinate of the label! Error code = ",GetLastError());
    return(false);
    }
  if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
    {
    Print(__FUNCTION__,
          ": failed to move Y coordinate of the label! Error code = ",GetLastError());
    return(false);
    }
//--- 実行成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 四角形ラベルのサイズを変更する                                           |
//+------------------------------------------------------------------+
bool RectLabelChangeSize(const long   chart_ID=0,       // チャート識別子
                        const string name="RectLabel", // ラベル名
                        const int    width=50,         // ラベル幅
                        const int    height=18)       // ラベルの高さ
 {
//--- エラー値をリセットする
  ResetLastError();
//--- ラベルサイズを変更する
  if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
    {
    Print(__FUNCTION__,
          ": failed to change the label's width! Error code = ",GetLastError());
    return(false);
    }
  if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
    {
    Print(__FUNCTION__,
          ": failed to change the label's height! Error code = ",GetLastError());
    return(false);
    }
//--- 実行成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 四角形ラベルの境界線の種類を変更する                                     |
//+------------------------------------------------------------------+
bool RectLabelChangeBorderType(const long             chart_ID=0,           // チャート識別子
                              const string           name="RectLabel",     // ラベル名
                              const ENUM_BORDER_TYPE border=BORDER_SUNKEN) // 境界線の種類
 {
//--- エラー値をリセットする
  ResetLastError();
//--- 境界線の種類を変更する
  if(!ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border))
    {
    Print(__FUNCTION__,
          ": failed to change the border type! Error code = ",GetLastError());
    return(false);
    }
//--- 実行成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 四角形ラベルを削除する                                                |
//+------------------------------------------------------------------+
bool RectLabelDelete(const long   chart_ID=0,       // チャート識別子
                    const string name="RectLabel") // ラベル名
 {
//--- エラー値をリセットする
  ResetLastError();
//--- ラベルを削除する
  if(!ObjectDelete(chart_ID,name))
    {
    Print(__FUNCTION__,
          ": failed to delete a rectangle label! Error code = ",GetLastError());
    return(false);
    }
//--- 実行成功
  return(true);
 }
//+------------------------------------------------------------------+
//| スクリプトプログラムを開始する関数                                          |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- チャートウィンドウサイズ
  long x_distance;
  long y_distance;
//--- ウィンドウサイズを設定する
  if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
    {
    Print("Failed to get the chart width! Error code = ",GetLastError());
    return;
    }
  if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
    {
    Print("Failed to get the chart height! Error code = ",GetLastError());
    return;
    }
//--- 四角形ラベル座標を定義する
  int x=(int)x_distance/4;
  int y=(int)y_distance/4;
//--- ラベルサイズを設定する
  int width=(int)x_distance/4;
  int height=(int)y_distance/4;
//--- 四角形ラベルを作成する
  if(!RectLabelCreate(0,InpName,0,x,y,width,height,InpBackColor,InpBorder,InpCorner,
    InpColor,InpStyle,InpLineWidth,InpBack,InpSelection,InpHidden,InpZOrder))
    {
    return;
    }
//--- チャートを再描画して1 秒待つ
  ChartRedraw();
  Sleep(1000);
//--- 四角形ラベルのサイズを変更する
  int steps=(int)MathMin(x_distance/4,y_distance/4);
  for(int i=0;i<steps;i++)
    {
    //--- サイズ変更
     width+=1;
     height+=1;
    if(!RectLabelChangeSize(0,InpName,width,height))
        return;
    //--- スクリプトの動作が強制的に無効にされているかどうかをチェックする
    if(IsStopped())
        return;
    //--- チャートを再描画して 0.01 秒待つ
    ChartRedraw();
    Sleep(10);
    }
//--- 1 秒の遅れ
  Sleep(1000);
//--- 境界線の種類を変更する
  if(!RectLabelChangeBorderType(0,InpName,BORDER_RAISED))
    return;
//--- チャートを再描画して 1 秒待つ
  ChartRedraw();
  Sleep(1000);
//--- 境界線の種類を変更する
  if(!RectLabelChangeBorderType(0,InpName,BORDER_SUNKEN))
    return;
//--- チャートを再描画して 1 秒待つ
  ChartRedraw();
  Sleep(1000);
//--- ラベルを削除する
  RectLabelDelete(0,InpName);
  ChartRedraw();
//---1 秒待つ
  Sleep(1000);
//---
 }