トップ  >  リファレンス  >  MQL4プログラム  >  リソース
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ

天才数学者のエドワード・オークリー・ソープの物語とジョン・ケリーの公式は必見です。
リソース



MQL4プログラムで使用されるグラフィックとサウンド


MQL4プログラムでグラフィックとサウンドファイルを使えるように以下関数が用意されています。

関数 詳細
PlaySound() サウンドファイルを再生します
ObjectCreate() グラフィカルオブジェクトのOBJ_BITMAPとOBJ_BITMAP_LABELを使用して、
bmpファイルを使ったユーザーインターフェースを作成出来ます。






PlaySound()


PlaySound()関数の呼び出し例


サンプルソース:
void OnInit(){

    PlaySound("Ok.wav");

}



上記サンプルソースでは、"Ok.wav"ファイルのサウンドを再生します。
このファイルはターミナルの標準パッケージに含まれています。
このファイルは"ターミナルディレクトリ\Sounds"フォルダにあります。

ターミナルディレクトリはMT4クライアントターミナルを起動したフォルダです。
ターミナルディレクトリの場所は次の方法で、MQL4プログラムで見つける事が出来ます。



サンプルソース:
void OnInit(){

    string terminal_path;
    terminal_path = TerminalInfoString(TERMINAL_PATH); // ターミナルディレクトリパスを取得
    Print(terminal_path);
}



ターミナルのメニューからデータディレクトリの場所を見つける事も出来ます。
ターミナルのメニューから「ファイル」⇒「データフォルダを開く」を選択して見つける事が出来ます。




ターミナルディレクトリと同様に、データディレクトリの場所もプログラムで見つける事が出来ます。

サンプルソース:
void OnInit(){

    string terminal_path;
    terminal_path = TerminalInfoString(TERMINAL_DATA_PATH); // データディレクトリパスを取得
    Print(terminal_path);
}





"ターミナルディレクトリ\Sounds"だけでは無く、
"ターミナルディレクトリ\MQL4"のサブフォルダからもサウンドファイルを使用する事が出来ます。

"ターミナルディレクトリ\MQL4\Files"にあるdemo.wavファイルを再生する場合は、
PlaySound()関数でパスを指定する必要があります。


サンプルソース:
void OnInit(){

    PlaySound("\\Files\\demo.wav");
}



文字列で"\"の表現をするのに"\\"と書かれている事に注意して下さい。
パスを指定する時、単一の"\"はエスケープシーケンス(コンパイラの制御記号)の為、単独で使用出来ません。
"\\"と書く事で"\"記号を意味します。


再生を停止させるにはPlaySound()関数の実引数にNULLを渡します。


サンプルソース:
void OnInit(){

    PlaySound(NULL); // 再生停止
}






ObjectCreate()


以下サンプルソースは、ObjectCreate()を使用してグラフィカルラベル(OBJ_BITMAP_LABEL)を作成した例です。


サンプルソース(EA用):
#define OBJ_TEST_NAME "ObjectTest"

string bmp_on      = "\\Include\\Controls\\res\\CloseDisable.bmp";  // 画像ファイルのパス・ファイル名
string bmp_off     = "\\Include\\Controls\\res\\CloseOn.bmp";       // 画像ファイルのパス・ファイル名

//+------------------------------------------------------------------+
//| 初期化                                   
//+------------------------------------------------------------------+
void OnInit() {

    bool created;
    bool button_set;

    ObjectsDeleteAll(); // オブジェクト全削除

    created = ObjectCreate(0,OBJ_TEST_NAME,OBJ_BITMAP_LABEL,0,0,0);             // OBJ_BITMAP_LABELオブジェクト作成

    if( created == true ) {
        ObjectSetInteger(0,OBJ_TEST_NAME,OBJPROP_CORNER,CORNER_RIGHT_UPPER); // アンカー設定:チャート右上
        ObjectSetInteger(0,OBJ_TEST_NAME,OBJPROP_XDISTANCE,100);                // アンカーからのX軸距離:100pixel
        ObjectSetInteger(0,OBJ_TEST_NAME,OBJPROP_YDISTANCE,50);                 // アンカーからのY軸距離:50pixel

        ResetLastError();                                                          // エラーコードクリア

        // bmp_onで指定した画像ファイルをOBJ_TEST_NAMEオブジェクトの"押下状態"に設定
        button_set = ObjectSetString(0,OBJ_TEST_NAME,OBJPROP_BMPFILE,0,bmp_on); 

        if( button_set == false ) {                                                 // 画像ファイル設定失敗
            PrintFormat("%s の画像ファイルを設定出来ませんでした。 エラーコード: %d",bmp_on ,GetLastError());
        }

        ResetLastError();                                                         // エラーコードクリア

        // bmp_offで指定した画像ファイルをOBJ_TEST_NAMEオブジェクトの"非押下状態"に設定
        button_set = ObjectSetString(0,OBJ_TEST_NAME,OBJPROP_BMPFILE,1,bmp_off); 
        if( button_set == false ) {                                                 // 画像ファイル設定失敗
            PrintFormat("%s の画像ファイルを設定出来ませんでした。 エラーコード: %d",bmp_on ,GetLastError());
        }
    }
}


チャート上にCloseDisable.bmpの画像ファイルを使用したオブジェクトが描画されます。



チャート上のオブジェクトをクリックすると、CloseOn.bmpの画像ファイルが描画されます。




OBJ_BITMAP_LABELオブジェクトは、ボタンとして使用されます。
そのボタンの押下状態に応じて、それぞれの画像を表示します。

OBJ_BITMAPオブジェクトは画像背景として使用されます。

グラフィカルインターフェースのボタンサイズは自動的に画像の大きさに調整されます。

OBJPROP_BMPFILEプロパティの値は、
OBJ_BITMAPとOBJ_BITMAP_LABELオブジェクトの外観のプロパティで、
動的に変更する事が可能です。
これはMQL4プログラムの為の様々なインタラクティブなユーザーインターフェースを作成する事が出来ます。





MQL4プログラムコンパイル時に実行可能ファイルへ含まれるリソース


MQL4プログラムは異なるダウンロード先のリソースが必要になる場合があります。
MQL4で実行ファイルを移動する場合、リソース移動の必要性を無くする為に、
#resourceを使用してコンパイラに指示する必要があります。


書式:
#resource リソースファイル名(パスを含む)



#resourceコマンドは、
指定したパスのリソースを実行可能(.ex4)ファイルに含めるように、コンパイラへ指示します。

これにより、必要な画像・音声ファイルは.ex4ファイルに直接配置される為、
他ターミナル上でプログラムを実行する際に、使用される画像・音声ファイルを別途転送する必要がなくなります。

任意の.ex4ファイルにリソースを含む事ができ、任意の.ex4プログラムは別の.ex4プログラムのリソースを使用する事が出来ます。

.bmp形式と.wav形式ファイルは、.ex4ファイルに含める前に自動的に圧縮されます。
これにより、リソースを使用して画像と音声を使用する際に、必要なファイルサイズを小さくする事が出来ます。
尚、リソースファイルサイズの上限は16MBまでです。




コンパイラによって指定されたリソース検索



書式:
#resource "<リソースファイルへのパス>"



"リソースファイルへのパス"の文字列定数の上限は63文字です。
フォルダ名・ファイル名は半角英語である必要があります。

コンパイラは下記の順序で検索を行います。

■検索順
・パスの先頭に"\\"が有る場合、"ターミナルデータディレクトリ\MQL4\"の相対パスで検索します
・パスの先頭に"\\"が無い場合、現在のソースファイル(.mq4)からの相対パスで検索します


サンプルソース(EA用):
// このソースファイル(.mq4)のパス:"ターミナルディレクトリ\MQL4\Experts"

// リソースの正しい指定方法
#resource "\\Include\\Controls\\res\\CloseOn.bmp"   // \MQL4\Include\\Controls\\res\\CloseOn.bmp
#resource "CloseOn.bmp"                             // \MQL4\Experts\CloseOn.bmp
#resource "resorce\\CloseOn.bmp"                    // \MQL4\Experts\resorce\CloseOn.bmp


// リソースの間違えた指定方法
#resource ":CloseOn.bmp"                           // 先頭にコロン(:)がある
#resource "..\\CloseOn.bmp"                        // 先頭にピリオド(.)がある






リソース名


#resourceを使用して宣言されたリソースは、プログラムの任意の部分で使用する事が出来ます。
リソース名を使用する際に、"\\"を付けずにリソースパスを書きます。

コード内で独自のリソースを使用するには、特殊な記号(::)をリソース名の先頭に追加する必要があります。


サンプルソース(EA用):
// このソースファイル(.mq4)のパス:"ターミナルディレクトリ\MQL4\Experts"

#resource "CloseOn.bmp"                              // \MQL4\Experts\CloseOn.bmp
#resource "\\resorce\\CloseDisable.bmp"              // \MQL4\resorce\CloseDisable.bmp

#define OBJ_TEST_NAME "ObjectTest"

//+------------------------------------------------------------------+
//| 初期化                                  
//+------------------------------------------------------------------+
void OnInit() {

    bool created;
    bool button_set;

    ObjectsDeleteAll(); // オブジェクト全削除

    // OBJ_BITMAP_LABELオブジェクト作成
    created = ObjectCreate(0,OBJ_TEST_NAME,OBJ_BITMAP_LABEL,0,0,0);

    if( created == true ) {
        ObjectSetInteger(0,OBJ_TEST_NAME,OBJPROP_CORNER,CORNER_RIGHT_UPPER); // アンカー設定:チャート右上
        ObjectSetInteger(0,OBJ_TEST_NAME,OBJPROP_XDISTANCE,100);               // アンカーからのX軸距離:100pixel
        ObjectSetInteger(0,OBJ_TEST_NAME,OBJPROP_YDISTANCE,50);                // アンカーからのY軸距離:50pixel

        button_set = ObjectSetString(0,OBJ_TEST_NAME,OBJPROP_BMPFILE,0, "::CloseOn.bmp"); 
        button_set = ObjectSetString(0,OBJ_TEST_NAME,OBJPROP_BMPFILE,1, "::resorce\\CloseDisable.bmp"); 

    }
}






他MQL4プログラムのリソース使用


リソース使用には別の利点があります。
任意のMQL4プログラムで、別のex4ファイルのリソースを使用する事が出来ます。
従って、1つのex4ファイルの含まれるリソースは他の多くのMQL4プログラムで使用する事が出来ます。

別ファイルからリソース名を使用する為には、
"ex4ファイル名::リソース名"
で指定する必要があります。

例えば、スクリプトtest_script.mq4ファイルにtest_bitmap.bmpのリソースが含まれていたとします。

このスクリプトのリソースが見える様にする為、リソース名を追加する必要があります。
それを使用する為にリソース名の先頭に"::"を追加する必要があります。

別プログラム(例えばEA)から、同じリソースを使用する為には、
リソース名を指定する際に、リソースが含まれているスクリプトの実行可能ファイル(test_script.ex4)の相対パスを追加する必要があります。



サンプルソース(スクリプト用):
// このソースファイル(test_script.mq4)のパス:"ターミナルディレクトリ\MQL4\Scripts"

#resource "\\resorce\\CloseDisable.bmp"              // \MQL4\resorce\CloseDisable.bmp

#define OBJ_TEST_NAME "ObjectTest"

//+------------------------------------------------------------------+
//| スクリプト起動                                  
//+------------------------------------------------------------------+
void OnStart() {

    ObjectsDeleteAll(); // オブジェクト全削除

    // OBJ_BITMAP_LABELオブジェクト作成
    created = ObjectCreate(0,OBJ_TEST_NAME,OBJ_BITMAP_LABEL,0,0,0);
    ObjectSetString(0,OBJ_TEST_NAME,OBJPROP_BMPFILE,1, "::resorce\\CloseDisable.bmp"); 
}

サンプルソース(EA用):
// このソースファイル(.mq4)のパス:"ターミナルディレクトリ\MQL4\Experts"

#define OBJ_TEST_NAME "ObjectTest"

//+------------------------------------------------------------------+
//| 初期化                                  
//+------------------------------------------------------------------+
void OnInit() {

    ObjectsDeleteAll(); // オブジェクト全削除

    // OBJ_BITMAP_LABELオブジェクト作成
    created = ObjectCreate(0,OBJ_TEST_NAME,OBJ_BITMAP_LABEL,0,0,0);

    // スクリプトファイルの実行可能ファイル(test_script.ex4)に含まれているリソースをEAで使用
    ObjectSetString(0,OBJ_TEST_NAME,OBJPROP_BMPFILE,1, "\\MQL4\Scripts\test_script.ex4::resorce\\CloseDisable.bmp"); 
}



別の.ex4ファイルからリソースを呼び出す時、
実行可能ファイルへのパスが指定されていない場合、
実行ファイルはリソースを呼び出すプログラムのフォルダを検索します。

サンプルソース(EA用):
// このソースファイル(.mq4)のパス:"ターミナルディレクトリ\MQL4\Experts"

    // スクリプトファイルの実行可能ファイル(test_script.ex4)に含まれているリソースをEAで使用
    ObjectSetString(0,OBJ_TEST_NAME,OBJPROP_BMPFILE,1, "test_script.ex4::resorce\\CloseDisable.bmp"); 
    // "ターミナルディレクトリ\MQL4\Experts"フォルダで"test_script.ex4"を検索します。






カスタムインジケータをリソースの様に動作させる


カスタムインジケータを実行可能プログラム(.ex4)に含める事が可能です。
カスタムインジケータをリソースとして含めるとアプリケーション配布に役に立ちます。



サンプルソース(EA用):
// このソースファイル(.mq4)のパス:"ターミナルディレクトリ\MQL4\Experts"

#resource "\\Indicators\\SampleIndicator.ex4"              // \MQL4\Indicators\\SampleIndicator.ex4

//+------------------------------------------------------------------+
//| 初期化                                   
//+------------------------------------------------------------------+
void OnInit() {

    double value;
    カスタムインジケータ(SampleIndicator.ex4)の算出値を取得
    value = iCustom(_Symbol , _Period , "::Indicators\\SampleIndicator.ex4",0,0);
    PrintFormat("Indicator: iCustom value=%f",value);
}



上記サンプルソースのOnInit()関数のカスタムインジケータ作成のケースで、
それ自体をコピーする場合は特別な配慮が必要です。

リソースは以下の方法で指定する必要がありますので注意してください。

<path_EX4_file_name>::<resource_name>


例えば、カスタムインジケータ(SampleIndicator.ex4)がEA(SampleEA.ex4)に含まれている場合、
指定された自身へのパスでiCustom()関数を呼び出す時、次のようになります。

"\\Experts\\SampleEA.ex4::Indicators\\SampleIndicator.ex4"


明示的にパスが設定されている場合、
カスタムインジケータ(SampleIndicator.ex4)は、
独立して動作する能力を失い、EA(SampleEA.ex4)の接続が必要になります。



スポンサーリンク



Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system