OBJ_EDIT

編集オブジェクト

ObjEdit

注意事項

アンカーポイントの座標はピクセルで設定されています。編集オブジェクトに使用される隅は ENUM_BASE_CORNER 列挙から選択出来ます。

また、編集オブジェクトではテキストの整列の種類を ENUM_ALIGN_MODE 列挙から選択することが出来ます。

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

//--- 説明
#property description "Script creates \"Edit\" object."
//--- スクリプトの起動時に入力パラメータのウィンドウを表示する
#property script_show_inputs
//--- スクリプト入力パラメータ
input string           InpName="Edit";             // オブジェクト名
input string           InpText="Text";             // オブジェクトテキスト
input string           InpFont="Arial";             // フォント
input int             InpFontSize=14;             // フォントサイズ
input ENUM_ALIGN_MODE InpAlign=ALIGN_CENTER;       // テキスト整列の種類
input bool             InpReadOnly=false;           // 編集許可
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // アンカーに使用されるチャートのコーナー
input color           InpColor=clrBlack;           // テキストの色
input color           InpBackColor=clrWhite;       // 背景色
input color           InpBorderColor=clrBlack;     // 境界線の色
input bool             InpBack=false;               // 背景オブジェクト
input bool             InpSelection=false;         // 強調表示して移動
input bool             InpHidden=true;             // オブジェクトリストに隠す
input long             InpZOrder=0;                 // マウスクリックの優先順位
//+------------------------------------------------------------------+
//| 編集オブジェクトを作成する                                               |
//+------------------------------------------------------------------+
bool EditCreate(const long             chart_ID=0,               // チャート識別子
              const string           name="Edit",             // オブジェクト名
              const int              sub_window=0,             // サブウィンドウ番号
              const int              x=0,                     // X 座標
              const int              y=0,                     // Y 座標
              const int              width=50,                 // 幅
              const int              height=18,               // 高さ
              const string           text="Text",             // テキスト
              const string           font="Arial",             // フォント
              const int              font_size=10,             // フォントサイズ
              const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // 整列の種類
              const bool             read_only=false,         // 編集する能力
              const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // アンカーに使用されるチャートのコーナー
              const color            clr=clrBlack,             // テキストの色
              const color            back_clr=clrWhite,       // 背景色r
              const color            border_clr=clrNONE,       // 境界線の色
              const bool             back=false,               // 背景で表示する
              const bool             selection=false,         // 強調表示して移動
              const bool             hidden=true,             // オブジェクトリストに隠す
              const long             z_order=0)               // マウスクリックの優先順位
 {
//--- エラー値をリセットする
  ResetLastError();
//--- 編集フィールドを作成する
  if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
    {
    Print(__FUNCTION__,
          ": failed to create \"Edit\" object! 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);
//--- テキストを設定する
  ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- テキストフォントを設定する
  ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- フォントサイズを設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- オブジェクトでのテキスト配置のタイプを設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
//--- 読み込み専用モードを有効(true)か無効(false)にする
  ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
//--- オブジェクト座標が相対的に定義されているチャートのコーナーを設定
  ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- テキストの色を設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- 背景色を設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- 境界線の色を設定する
  ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- 前景(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);
 }
//+------------------------------------------------------------------+
//| 編集オブジェクトを移動する                                               |
//+------------------------------------------------------------------+
bool EditMove(const long   chart_ID=0, // チャート識別子
            const string name="Edit", // オブジェクト名
            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 object! Error code = ",GetLastError());
    return(false);
    }
  if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
    {
    Print(__FUNCTION__,
          ": failed to move Y coordinate of the object! Error code = ",GetLastError());
    return(false);
    }
//--- 実行成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 編集オブジェクトのサイズを変更する                                         |
//+------------------------------------------------------------------+
bool EditChangeSize(const long   chart_ID=0, // チャート識別子
                  const string name="Edit", // オブジェクト名
                  const int    width=0,     // 幅
                  const int    height=0)   // 高さ
 {
//--- エラー値をリセットする
  ResetLastError();
//--- オブジェクトサイズを変更する
  if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
    {
    Print(__FUNCTION__,
          ": failed to change the object width! Error code = ",GetLastError());
    return(false);
    }
  if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
    {
    Print(__FUNCTION__,
          ": failed to change the object height! Error code = ",GetLastError());
    return(false);
    }
//--- 実行成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 編集オブジェクトのテキストを変更する                                        |
//+------------------------------------------------------------------+
bool EditTextChange(const long   chart_ID=0, // チャート識別子
                  const string name="Edit", // オブジェクト名
                  const string text="Text") // テキスト
 {
//--- エラー値をリセットする
  ResetLastError();
//--- オブジェクトのテキストを変更する
  if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
    {
    Print(__FUNCTION__,
          ": failed to change the text! Error code = ",GetLastError());
    return(false);
    }
//--- 実行成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 編集オブジェクトのテキストを返す                                            |
//+------------------------------------------------------------------+
bool EditTextGet(string      &text,       // テキスト
                const long   chart_ID=0, // チャート識別子
                const string name="Edit") // オブジェクト名
 {
//--- エラー値をリセットする
  ResetLastError();
//--- オブジェクトのテキストを取得する
  if(!ObjectGetString(chart_ID,name,OBJPROP_TEXT,0,text))
    {
    Print(__FUNCTION__,
          ": failed to get the text! Error code = ",GetLastError());
    return(false);
    }
//--- 実行成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 編集オブジェクトを削除する                                               |
//+------------------------------------------------------------------+
bool EditDelete(const long   chart_ID=0, // チャート識別子
              const string name="Edit") // オブジェクト名
 {
//--- エラー値をリセットする
  ResetLastError();
//--- ラベルを削除する
  if(!ObjectDelete(chart_ID,name))
    {
    Print(__FUNCTION__,
          ": failed to delete \"Edit\" object! 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_step=(int)x_distance/64;
//--- 編集フィールド座標とサイズを設定する
  int x=(int)x_distance/8;
  int y=(int)y_distance/2;
  int x_size=(int)x_distance/8;
  int y_size=InpFontSize*2;
//--- テキストをローカル変数に収納する
  string text=InpText;
//--- 編集フィールドを作成する
  if(!EditCreate(0,InpName,0,x,y,x_size,y_size,InpText,InpFont,InpFontSize,InpAlign,InpReadOnly,
    InpCorner,InpColor,InpBackColor,InpBorderColor,InpBack,InpSelection,InpHidden,InpZOrder))
    {
    return;
    }
//--- チャートを再描画して 1 秒待つ
  ChartRedraw();
  Sleep(1000);
//--- 編集フィールドを伸ばす
  while(x_size-x<x_distance*5/8)
    {
    //--- 編集フィールドの幅を増やす
     x_size+=x_step;
    if(!EditChangeSize(0,InpName,x_size,y_size))
        return;
    //--- スクリプトの動作が強制的に無効にされているかどうかをチェックする
    if(IsStopped())
        return;
    //--- チャートを再描画して 0.05 秒待つ
    ChartRedraw();
    Sleep(50);
    }
//--- 半秒の遅れ
  Sleep(500);
//--- テキストを変更する
  for(int i=0;i<20;i++)
    {
    //--- 「+」を始めと終わりに足す
     text="+"+text+"+";
    if(!EditTextChange(0,InpName,text))
        return;
    //--- スクリプトの動作が強制的に無効にされているかどうかをチェックする
    if(IsStopped())
        return;
    //--- チャートを再描画して 0.1 秒待つ
    ChartRedraw();
    Sleep(100);
    }
//--- 半秒の遅れ
  Sleep(500);
//--- 編集フィールドを削除する
  EditDelete(0,InpName);
  ChartRedraw();
//---1 秒待つ
  Sleep(1000);
//---
 }