"ダミー "からの質問 - ページ 32

 
tol64:
これらのオブジェクトのプロパティを 明示的に渡します(ANCHOR_RIGHT_UPPER, CORNER_RIGHT_UPPER)。

できたと思う。動作するコードではなく、サンプル関数を表示したのですか?

以上、週末はお休みです。邪魔してすみませんでした :)

 

この関数のより良いバージョンですが、何かを微調整することができます(一般的に、私はこのすべてをオブジェクト、またはいくつかのオブジェクトとして実装します)。

とはいえ、関数をライブラリに入れて、好きなように使うことはできます。

bool Create_BMP_Label(long   chart_id,  // id графика
                      string bmp_nm,    // имя объекта
                      string bmp_path,  // путь к обекту
                      long   anchor,    // точка привязки
                      long   corner,    // угол привязки
                      int    x_dist,    // координата по шкале X
                      int    y_dist)    // координата по шкале Y
{
//----------------------------------------------------------------------------//
//Work variables
bool Result = true; //Returned importance
//----------------------------------------------------------------------------//

ResetLastError();

Result =  ObjectCreate(chart_id,bmp_nm,OBJ_BITMAP_LABEL,0,0,0); // создание объекта

  if(Result)
  {
  ObjectSetString(chart_id,bmp_nm,OBJPROP_BMPFILE,0,bmp_path);   // BMP файл
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_ANCHOR,anchor);       // установка точки привязки
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_CORNER,corner);       // установка угола привязки
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_XDISTANCE,x_dist);    // установка координаты X
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_YDISTANCE,y_dist);    // установка координаты Y
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_SELECTABLE,false);    // нельзя выделить объект, если FALSE
  ObjectSetString(chart_id,bmp_nm,OBJPROP_TOOLTIP,"\n");         // нет всплывающей подсказки, если "\n"
  }
//The execution errors checking
  if(GetLastError()!=0)
  {
  Result = false;
  }  
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}
 
Interesting:

この関数のより良いバージョンですが、何かを微調整することができます(一般的に、私はこのすべてをオブジェクト、またはいくつかのオブジェクトとして実装します)。

とはいえ、関数をライブラリに入れて、好きなように使うことはできます。



いいですねぇ(^^))また、オブジェクトという形では、この機能を例にとると、どんなメリットがあるのでしょうか?これまでは、すべて関数という形で実装してきました。もしかしたら、道を間違えていて、後で全部やり直さなければならないかもしれない?
 
tol64:
(それはいいことだ))。この機能をオブジェクトとして使用するメリットは何でしょうか?今のところ、すべて関数という形で実装しています。もしかしたら、私のやり方が間違っていて、後で全部やり直さなければならないかもしれない?

まあ、なんで全部なんだろう。機能はもっと普遍的にして、例えばライブラリに詰め込むこともできる。

クラスにも利点はありますが、これはOOPに関連するトリックです(実装を考えずに様々なプロジェクトでコードを使用することが主な作業になります)。

スクリーンショットから察するに、情報パネルの ようなものがあるようなので(他の機能もあるかもしれませんが)、このパネルを、関係のない複数のオブジェクト(グラフィック、テキストなど)と考えることもできますし、1つのクラスでつながっているオブジェクトと見ることもできます。したがって、1つの「入力」パラメータ「コーナー」を変更すると、この変更はパネルに関連するすべてに影響します。

これはチャートへのバインディングと同じで、クラスにチャートを指定することで、そのクラスが制御するすべてのオブジェクトにそのチャートを示すことになります。

 
Interesting:

まあ、なんで全部なんだろう。機能はもっと普遍的にして、例えばライブラリに詰め込むこともできる。

クラスにも利点はありますが、これはOOPに関連したトリックです(実装を考えずに様々なプロジェクトでコードを使用することが主な作業になります)。

スクリーンショットから察するに、情報パネルのようなものがあるようなので(他の機能もあるかもしれませんが)、このパネルを、関係のない複数のオブジェクト(グラフィック、テキストなど)と考えることもできますし、1つのクラスでつながっているオブジェクトと捉えることもできます。そのため、1つの「入力」パラメータ「コーナー」を変更すると、この変更はパネルに関連するすべてに影響します。

チャートへのバインディングについては、私も同じ問題を抱えています。 チャートをクラスに示すと、このチャートとこのクラスが制御するすべてのオブジェクトを示すことになります。

あなたは非常に優れた能力を持っています。2、3行でとてもわかりやすく説明してください。ありがとうございます。))

必要な関数に慣れ、それらを使って練習した後、構造、クラス、OOPの勉強を始めます。自然界では、時々寝ざるを得ないのが残念です。パソコンから這い上がるしかない。))

 

このスクリプトは私が書きました。

bool del;

void OnStart()
  {
   long chart_id  = ChartID();
   int amount_obj = ObjectsTotal(chart_id,0,OBJ_LABEL);
   int i;
   
   Print("Всего объектов типа OBJ_LABEL: ",amount_obj);
   
   for(i=0; i<amount_obj; i++)
      {
       string name_obj = ObjectName(chart_id,i,0,OBJ_LABEL);
       del = ObjectDelete(chart_id,name_obj);
       
       if(del == false || GetLastError() != 0) Print(ErrorDescription(GetLastError()),", ",GetLastError());
       
       ChartRedraw();
      }
  }

タスク:チャートからOBJ_LABEL タイプのオブジェクトをすべて削除します。しかし、いくつかはスキップして残っています。ログブックにエラーが書き込まれる。

正しい方法を教えてください。

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
tol64:

そんな脚本を書いてみました。

タスク:チャートからOBJ_LABEL タイプのオブジェクトをすべて削除します。しかし、中にはスキップして残っているものもあります。ログにエラーが書き込まれます。

正しい方法をアドバイスしてください。

詳しくは調べていませんが、ループは昇順ではなく降順であるべきだと思われます(ただし、MQL4以降、注文の削除は降順ループで行われるようになりました)。

大きなインデックスから削除を始めると、(リストの末尾から)選択したアイテムを削除する以外は、元のリストが変わらないというトリックがあります。

 
Interesting:

詳しくは調べていませんが、周期は昇順ではなく降順であるべきだと思われます(MQL4以降、注文は降順の周期で削除されます)。

このトリックは、大きなインデックスから削除を始めると、(リストの末尾から)選択した項目を削除する以外は、元のリストが変更されないということです...

端からサイクルを回すようにしました。

   for(i=amount_obj-1; i>=amount_obj; i--)

これでログにエラーは出なくなったが、オブジェクトは1つも削除されていない)。

 
tol64:

端からサイクルを開始しようとした。

これでログブックにエラーは出なくなったが、オブジェクトも削除されない)

i>=0
 
tol64:

四則演算では、すべてのオブジェクトをグループ化し、名前の部分をグループ内で共通化する、という方法をとっています。

削除

// удаление по маске всех объектов индюка
   for (int i = ObjectsTotal() - 1; i >= 0; i--)
    {
      string name = ObjectName(i);
      if (StringFind(name, "sig_nal") == 0)
      {
         ObjectDelete(name);
      }
    }

異なるグループに対して

// удаление по маске всех объектов индюка
   for (int i = ObjectsTotal() - 1; i >= 0; i--)
   {
      string name = ObjectName(i);
      if (StringFind(name, "signal") == 0)
      {
         ObjectDelete(name);
      }
      else if (StringFind(name, "Asignal") == 0)
      {
         ObjectDelete(name);
      }
   }

こちらの 機能IgorM

***

( 念のため )ObjectName でソート する (5 に関係あるかは不明)

[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - MQL4 форум
  • www.mql5.com
[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - MQL4 форум