ResourceCreate 関数
この関数は、データセットに基づいてリソースを作成します。
リソースとはプログラムに埋め込まれる形で保存されるデータ (画像、音楽、テキストファイルなど) のことを指します。
データ型と構成・戻り値
この関数には 2つの型があります。
関数の型1はファイルから画像と音声をアップロードするために使用され、型2は画像の動的な作成のみに使用されます。
bool ResourceCreate(①, ②); // 1.ファイルに基づくリソースの作成
bool ResourceCreate(①, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨); // 2.ピクセル配列に基づくリソースの作成
戻り値は、処理が成功した場合は true、それ以外は falseが返されます。
発生するエラーについては、GetLastError関数で取得することができます。この関数のエラーについては次の内容のものが発生する可能性があります。
コード | 説明 |
---|---|
4015 | ERR_RESOURCE_NAME_DUPLICATED 動的リソースと静的リソースの同じ名前です。 |
4016 | ERR_RESOURCE_NOT_FOUND リソースが見つかりません。 |
4017 | ERR_RESOURCE_UNSUPPORTED_TYPE このタイプのリソースはサポートされていません。 |
4018 | ERR_RESOURCE_NAME_IS_TOO_LONG リソースの名前が長すぎます。 |
関数の型2が、幅、高さ、およびシフト パラメータが異なる同じリソースを作成するために呼び出された場合、新しいリソースは作成されず、既存のリソースが更新されます。
画像は、色深度が 24ビット または 32ビットの BMP形式である必要があります。サウンドは WAV形式のみです。リソースのサイズは 16Mbを超えてはいけません。
引数 [8]
ResourceCreate関数は最大 8個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | resource_name | const string | - | - | リソース名。 |
② | path | const string | - | - | リソースデータを含むファイルへの相対パス。パスが「\」から始まる場合 (「\」と表記)、ファイルパスはterminal_data_folder\MQL4\ からの相対パスであると見なされます。 |
③ | data[] | const uint& | - | - | 完全なイメージを作成するための 1次元 または 2次元の配列。 |
④ | img_width | uint | - | - | 画像の形式でリソースに配置される四角形の画像領域の幅 (ピクセル単位)。data_width値より大きくすることはできません。 |
⑤ | img_height | uint | - | - | 画像の形式でリソースに配置される四角形の画像領域の高さ (ピクセル単位)。 |
⑥ | data_xoffset | uint | - | - | イメージの四角形領域の右方向の水平オフセット。 |
⑦ | data_yoffset | uint | - | - | イメージの四角形領域の垂直下方オフセット。 |
⑧ | data_width | uint | - | - | 1次元配列の場合にのみ必要です。これは、データセットからの画像の全幅を示します。data_width =0の場合、img_width と等しいと見なされます。2次元配列の場合、パラメーターは無視され、data[]配列の 2 番目の次元と等しいと見なされます。 |
⑨ | color_format | enum | - | - | 色の処理方法。 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);
}
インジケータ用コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)