ResourceFree

この関数は動的に作成されたリソースを削除します(割り当てられたメモリを解放します)。

bool  ResourceFree(
  const string  resource_name      // リソース名
  );

パラメータ

resource_name

[in] リソース名は "::" で始まるべきです。

戻り値

成功の場合は true、それ以外の場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

ResourceFree() は、MQL5アプリケーション開発者がリソースを操作する場合のメモリ消費量の管理を可能にします。メモリから削除されているリソースに結合されたグラフィカルオブジェクトは、削除後でも正常に表示されます。しかし、新しく作成されたグラフィカルオブジェクト(OBJ_BITMAPOBJ_BITMAP_LABEL) は削除されたリソースを使用することが出来ません。

この関数は、プログラムによって作成された動的リソースのみを削除します。

例:

//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- グラフィックリソースのパラメータを宣言する
  string rc_name="Resource";
  uint   rc_width=100;
  uint   rc_height=100;
  uint   rc_data[];
  uint   rc_size=rc_width*rc_height;
 
  ResetLastError();
//--- ピクセル配列のサイズを設定する
  if(ArrayResize(rc_data,rc_size)!=rc_size)
    {
    Print("ArrayResize() failed. Error code: ",GetLastError());
 
    }
//--- ピクセル配列を透明色で塗りつぶし、それに基づいてグラフィック リソースを作成する
  ArrayInitialize(rc_data,0x00FFFFFF);
  if(!ResourceCreate(rc_name,rc_data,rc_width,rc_height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
    {
    Print("ResourceCreate() failed. Error code: ",GetLastError());
 
    }
  Print("Size of created recource array: ",rc_data.Size());
 
//--- 作成されたグラフィックリソースを確認する
//--- 現在の足の時間と価格のデータを取得する
  MqlTick tick={};
  if(!SymbolInfoTick(Symbol(),tick))
    {
    Print("SymbolInfoTick() failed. Error code: ",GetLastError());
 
    }
//--- 最後のティック価格と時刻の座標を使用してBitmapオブジェクトを作成する
  string obj_name="Bitmap";
  if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
    {
    Print("ObjectCreate() failed. Error code: ",GetLastError());
 
    }
//--- 作成されたビットマップ オブジェクトの幅と高さを、グラフィックリソースの幅と高さに等しく設定する
//--- オブジェクトのアンカーポイントをその中心に設定する
  ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
  ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
  ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- ビットマップオブジェクト用に以前に作成したグラフィックリソースを画像ファイルとして指定する
//--- この場合、使用されるグラフィックリソースの名前を示すために、その名前の前に「::」を追加する必要がある
  ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
 
//--- 透明度200でDodgerBlue色を設定する
  uint clr=ColorToARGB(clrDodgerBlue,200);
//--- グラフィックリソースのピクセル配列全体を設定された色で塗りつぶす
  ArrayInitialize(rc_data,clr);
//--- グラフィックリソースデータを更新する
  Update(rc_name,rc_data,rc_width,rc_height,true);
 
//--- 3秒待って画像の色を変更する
  Print("Wait 3 seconds before changing color");
  Sleep(3000);
//--- 透明度200でOrangeRed色を設定する
  Print("Change color");
  clr=ColorToARGB(clrOrangeRed,200);
//--- グラフィックリソースのピクセル配列全体を設定された色で塗りつぶす
  ArrayInitialize(rc_data,clr);
//--- グラフィックリソースデータを更新する
  Update(rc_name,rc_data,rc_width,rc_height,true);
 
//--- 3秒待ってグラフィックリソースを解放する
  Print("Wait 3 seconds before ResourceFree()");
  Sleep(3000);
  bool res=ResourceFree("::"+rc_name);
  Print("ResourceFree: ",res);
 
//--- リソースを解放した後に色を変更してみる
  Print("Trying to change color to GreenYellow after ResourceFree()");
//--- 透明度200でGreenYellow色を設定する
  clr=ColorToARGB(clrGreenYellow,200);
//--- グラフィックリソースのピクセル配列全体を設定された色で塗りつぶす
  ArrayInitialize(rc_data,clr);
//--- グラフィックリソース データを更新する(画像は残るが、色は変更できない)
  Update(rc_name,rc_data,rc_width,rc_height,true);
  Print("The color has not changed because the resource has been released");
 
//--- 3秒待ってbitmapオブジェクトを削除する
  Print("Wait 3 seconds before deleting the Bitmap object");
  Sleep(3000);
  Print("Delete Bitmap object");
  ObjectDelete(0,obj_name);
 }
//+------------------------------------------------------------------+
//| グラフィックリソースデータを更新する                                         |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
 {
//--- ゼロ次元が渡された場合は終了する
  if(width==0 || height==0)
 
//--- リソース データを更新し、チャートを再描画する
  if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
    ChartRedraw();
 }

参照

リソースObjectCreate()PlaySound()ObjectSetString()OBJPROP_BMPFILE