//--- 描画に使用されるキャンバスの幅と高さ
#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");
//---
}
|