//--- 説明
#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);
//---
}
|