リソースを作成 ResourceCreate 関数

関数

共通関数

ResourceCreate 関数

 この関数は、データセットに基づいてリソースを作成します。

 リソースとはプログラムに埋め込まれる形で保存されるデータ(画像、音楽、テキストファイルなど)のことを指します。

データ型と構成・戻り値

 この関数には 2つの型があります。
 関数の型1はファイルから画像と音声をアップロードするために使用され、型2は画像の動的な作成のみに使用されます。

bool ResourceCreate(①, ②);                         // 1.ファイルに基づくリソースの作成
bool ResourceCreate(①, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨); // 2.ピクセル配列に基づくリソースの作成

 戻り値は、処理が成功した場合は true、それ以外は falseが返されます。
 発生するエラーについては、GetLastError関数で取得することができます。この関数のエラーについては次の内容のものが発生する可能性があります。

コード説明
4015ERR_RESOURCE_NAME_DUPLICATED
動的リソースと静的リソースの同じ名前です。
4016ERR_RESOURCE_NOT_FOUND
リソースが見つかりません。
4017ERR_RESOURCE_UNSUPPORTED_TYPE
このタイプのリソースはサポートされていません。
4018ERR_RESOURCE_NAME_IS_TOO_LONG
リソースの名前が長すぎます。

 関数の型2が、幅、高さ、およびシフト パラメータが異なる同じリソースを作成するために呼び出された場合、新しいリソースは作成されず、既存のリソースが更新されます。

 画像は、色深度が 24ビット または 32ビットの BMP形式である必要があります。サウンドは WAV形式のみです。リソースのサイズは 16Mbを超えてはいけません。

引数 [8]

 ResourceCreate関数は最大 8個の引数で構成されます。


引数名データ型単位初期値説明
resource_nameconst stringリソース名。
pathconst stringリソースデータを含むファイルへの相対パス。パスが「\」から始まる場合 (「\」と表記)、ファイルパスはterminal_data_folder\MQL4\ からの相対パスであると見なされます。
data[]const uint&完全なイメージを作成するための 1次元 または 2次元の配列。
img_widthuint画像の形式でリソースに配置される四角形の画像領域の幅 (ピクセル単位)。data_width値より大きくすることはできません。
img_heightuint画像の形式でリソースに配置される四角形の画像領域の高さ (ピクセル単位)。
data_xoffsetuintイメージの四角形領域の右方向の水平オフセット。
data_yoffsetuintイメージの四角形領域の垂直下方オフセット。
data_widthuint1次元配列の場合にのみ必要です。これは、データセットからの画像の全幅を示します。data_width =0の場合、img_width と等しいと見なされます。2次元配列の場合、パラメーターは無視され、data[]配列の 2 番目の次元と等しいと見なされます。
color_formatenum色の処理方法。
ENUM_COLOR_FORMAT 列挙値から選択。

使用例

ResourceCreate関数による画像リソースの作成

 ResourceCreate関数を使って、取引チャート上に画像リソースの作成して、設定したテキストを出力します。

 次のコードはインジケータ用のコードです。インジケータ用コードの作成方法についてはこちらを参考にしてください。

コード

// ResourceCreate関数による画像リソースの作成
#property strict
#property indicator_chart_window     // メインウィンドウに表示

#define IMG_WIDTH  150               // 描画 幅  pixel
#define IMG_HEIGHT 150               // 描画 高さpixel

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

void OnInit() {
   ObjectsDeleteAll();
   ArrayFill(ExtImg, 0, IMG_WIDTH * IMG_HEIGHT, 0);
   ObjectCreate(0, "TEST", OBJ_BITMAP_LABEL, 0, 0, 0);
   ObjectSetString(0, "TEST", OBJPROP_BMPFILE, "::IMG"); 
}

void OnDeinit(const int reason) { //終了処理
   ObjectsDeleteAll();            // オブジェクトテキストをEA削除時消すための処理
}

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[],
                const long &volume[],
                const int &spread[])
{
   ArrayFill(ExtImg, 0, IMG_WIDTH * IMG_HEIGHT ,0);
   
   TextSetFont("MS Pゴシック", 20, FONT_UNDERLINE|FW_EXTRABOLD, 450);   
   
   string text = "Tick数" + (string)i++;
   TextOut(text, 30, 100, TA_LEFT|TA_TOP, ExtImg, IMG_WIDTH, IMG_HEIGHT, clrWhite, COLOR_FORMAT_XRGB_NOALPHA);
   
   ResourceCreate("::IMG", ExtImg, IMG_WIDTH, IMG_HEIGHT, 0, 0, IMG_WIDTH, COLOR_FORMAT_XRGB_NOALPHA);
   ChartRedraw();
   
   return(rates_total);
}

インジケータ用コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果 

タイトルとURLをコピーしました