Questions d'un "mannequin - page 32

 
tol64:
Je passe ces propriétés d'objet explicitement (ANCHOR_RIGHT_UPPER, CORNER_RIGHT_UPPER) :

Je pense que je l'ai. Avez-vous montré un exemple de fonction, et non un morceau de code fonctionnel ?

C'est ça, je prends mon week-end. Désolé pour l'interruption :)

 

Une meilleure version de cette fonction, mais quelque chose peut être modifié (en général, j'implémenterais tout cela comme un objet, ou plusieurs objets).

Cependant, vous pouvez placer la fonction dans une bibliothèque et l'utiliser comme bon vous semble.

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:

Une meilleure version de cette fonction, mais quelque chose peut être modifié (en général, j'implémenterais tout cela comme un objet, ou plusieurs objets).

Cependant, vous pouvez placer la fonction dans une bibliothèque et l'utiliser comme bon vous semble.



C'est sympa.)) Et sous la forme d'un objet, quel est l'avantage, si l'on prend l'exemple de cette fonction ? Jusqu'à présent, j'ai tout implémenté sous forme de fonctions. Peut-être que je fais fausse route et que je devrai tout refaire plus tard ?
 
tol64:
(C'est bien.)). Quel est l'avantage d'utiliser cette fonction comme un objet ? Pour l'instant, j'ai tout implémenté sous forme de fonctions. Peut-être ai-je suivi la mauvaise voie et devrai-je tout refaire plus tard ?

Eh bien, pourquoi tous. On pourrait rendre une fonction plus universelle et l'intégrer, par exemple, dans une bibliothèque.

Les classes ont aussi des avantages, mais il s'agit d'astuces liées à la POO (la tâche principale sera d'utiliser le code dans divers projets sans penser à l'implémentation).

Exemple

Comme je le vois sur la capture d'écran, vous avez quelque chose comme un panneau d'information (peut-être une autre fonctionnalité), donc vous pouvez considérer ce panneau comme un certain nombre d'objets non liés (graphiques, texte, etc.), ou vous pouvez les voir comme des objets connectés par une classe. Ainsi, si vous modifiez un paramètre d'entrée "Coin", cette modification affectera tout ce qui concerne le panneau.

Il en va de même pour la liaison au graphique. En spécifiant un graphique à la classe, nous indiquons ce graphique à tous les objets contrôlés par la classe également.

 
Interesting:

Eh bien, pourquoi tous. On pourrait rendre une fonction plus universelle et l'intégrer, par exemple, dans une bibliothèque.

Les classes ont aussi des avantages, mais ce sont des astuces de la POO (la tâche principale sera d'utiliser le code dans divers projets sans penser à l'implémentation).

Exemple

Comme je le vois sur la capture d'écran, vous avez quelque chose comme un panneau d'information (peut-être une autre fonctionnalité), donc vous pouvez considérer ce panneau comme un certain nombre d'objets non liés (graphiques, texte, etc.), ou vous pouvez les voir comme des objets connectés par une classe. Ainsi, si vous modifiez un paramètre d'entrée "Coin", ce changement affectera tout ce qui concerne le panneau.

J'ai le même problème avec la liaison au graphique. Une fois que nous indiquons un graphique à la classe, nous indiquons ce graphique et tous les objets que cette classe contrôle.

Vous avez une capacité très remarquable. Expliquez tout très clairement en quelques lignes. Merci. ))

Après m'être familiarisé avec toutes les fonctions dont j'ai besoin et m'être entraîné à les utiliser, je commencerai à étudier les structures, les classes et la POO. C'est dommage que la nature m'oblige parfois à aller au lit. Je dois m'éloigner de l'ordinateur. ))

 

J'ai écrit ce scénario :

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();
      }
  }

Tâche : supprimer tous les objets de type OBJ_LABEL du graphique. Mais certaines sont sautées et restent. Une erreur est inscrite dans le journal de bord :

Veuillez me dire comment le faire correctement.

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

J'ai écrit un tel scénario :

La tâche : supprimer tous les objets de type OBJ_LABEL d'un graphique. Mais certaines d'entre elles sont sautées et restent. Une erreur est inscrite dans le journal :

Veuillez m'indiquer comment le faire correctement.

Il me semble que la boucle devrait être descendante plutôt qu'ascendante, bien que je ne sois pas entré dans les détails (mais depuis MQL4, la suppression des ordres se fait dans une boucle descendante).

L'astuce est que si vous commencez à supprimer à partir de grands index, la liste originale ne changera pas, sauf pour la suppression d'un élément sélectionné (de la queue de la liste)...

 
Interesting:

Il me semble que le cycle devrait être descendant plutôt qu'ascendant, bien que je ne sois pas entré dans les détails (depuis MQL4, les ordres sont supprimés dans un cycle descendant).

L'astuce est que si nous commençons à supprimer à partir d'un grand index, la liste originale ne changera pas, sauf pour la suppression d'un élément sélectionné (de la queue de la liste)...

J'ai essayé de recommencer le cycle depuis la fin :

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

Maintenant, il n'y a pas d'erreurs dans le journal, mais pas un seul objet n'est supprimé).

 
tol64:

J'ai essayé de recommencer le cycle depuis la fin :

Maintenant, il n'y a pas d'erreurs dans le journal de bord, mais aucun objet n'est supprimé non plus).

i>=0
 
tol64:

Dans le quadruplet, j'utilise cette approche : tous les objets sont des groupes, la partie nom est commune dans le groupe.

Suppression de

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

pour différents groupes

// удаление по маске всех объектов индюка
   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);
      }
   }

et ici la fonction IgorM

***

(juste au cas où) trier par nom d'objet(pas sûr que ce soit pertinent pour 5)

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