Fragen von einem "Dummy" - Seite 32

 
tol64:
Ich übergebe diese Objekteigenschaften explizit (ANCHOR_RIGHT_UPPER, CORNER_RIGHT_UPPER):

Ich glaube, ich habe es. Haben Sie eine Beispielfunktion gezeigt, nicht ein funktionierendes Stück Code?

Das war's, ich nehme mir das Wochenende frei. Entschuldigung für die Unterbrechung :)

 

Eine bessere Version dieser Funktion, die aber noch etwas optimiert werden kann (im Allgemeinen würde ich all dies als ein Objekt oder mehrere Objekte implementieren).

Sie können die Funktion jedoch in eine Bibliothek aufnehmen und nach Belieben verwenden.

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:

Eine bessere Version dieser Funktion, die aber noch etwas optimiert werden kann (im Allgemeinen würde ich all dies als ein Objekt oder mehrere Objekte implementieren).

Sie können die Funktion jedoch in eine Bibliothek aufnehmen und nach Belieben verwenden.



Es ist schön.)) Und in Form eines Objekts, was ist der Vorteil, wenn Sie diese Funktion als Beispiel nehmen? Bislang habe ich alles in Form von Funktionen implementiert. Vielleicht gehe ich in die falsche Richtung und muss später alles neu machen?
 
tol64:
(Das ist schön.)). Welchen Vorteil hat die Verwendung dieser Funktion als Objekt? Bis jetzt habe ich alles in Form von Funktionen implementiert. Vielleicht gehe ich den falschen Weg und muss später alles neu machen?

Nun, warum alle? Eine Funktion könnte universeller gestaltet und z. B. in eine Bibliothek gepackt werden.

Klassen haben auch Vorteile, aber das ist ein Trick, der mit OOP zusammenhängt (die Hauptaufgabe wird darin bestehen, den Code in verschiedenen Projekten zu verwenden, ohne sich Gedanken über die Implementierung zu machen).

Beispiel

Wie ich aus dem Screenshot ersehe, haben Sie so etwas wie eine Informationstafel (vielleicht auch eine andere Funktionalität), so dass Sie diese Tafel als eine Reihe von unverbundenen Objekten (Grafiken, Text usw.) betrachten können, oder Sie können sie als Objekte betrachten, die durch eine Klasse verbunden sind. Wenn Sie also einen "Eingabe"-Parameter "Ecke" ändern, wirkt sich diese Änderung auf alle Parameter aus, die sich auf das Panel beziehen.

Das Gleiche gilt für die Bindung an das Diagramm: Durch die Angabe eines Diagramms in der Klasse wird dieses Diagramm auch allen von der Klasse kontrollierten Objekten angezeigt.

 
Interesting:

Nun, warum alle? Eine Funktion könnte universeller gestaltet und z. B. in eine Bibliothek gepackt werden.

Klassen haben auch Vorteile, aber das sind Tricks der OOP (die Hauptaufgabe wird darin bestehen, den Code in verschiedenen Projekten zu verwenden, ohne über die Implementierung nachzudenken).

Beispiel

Wie ich aus dem Screenshot ersehe, haben Sie so etwas wie eine Informationstafel (vielleicht auch eine andere Funktionalität), so dass Sie diese Tafel als eine Reihe von unverbundenen Objekten (Grafiken, Text usw.) betrachten können, oder Sie können sie als Objekte betrachten, die durch eine Klasse verbunden sind. Wenn Sie also einen "Eingabe"-Parameter "Ecke" ändern, wirkt sich diese Änderung auf alle Parameter aus, die sich auf das Panel beziehen.

Ich habe das gleiche Problem mit der Bindung an das Diagramm. Sobald wir der Klasse ein Diagramm zuweisen, weisen wir dieses Diagramm und alle Objekte, die diese Klasse steuert, zu.

Sie haben eine sehr bemerkenswerte Fähigkeit. Erklären Sie alles ganz klar in ein paar Zeilen. Ich danke Ihnen. ))

Nachdem ich mich mit allen Funktionen, die ich brauche, vertraut gemacht und ihre Anwendung geübt habe, werde ich mich mit den Strukturen, Klassen und OOP beschäftigen. Es ist schade, dass die Natur mich manchmal zwingt, ins Bett zu gehen. Ich muss mich vom Computer wegbewegen. ))

 

Ich habe dieses Skript geschrieben:

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

Aufgabe: Entfernen Sie alle Objekte vom Typ OBJ_LABEL aus dem Diagramm. Aber einige werden übersprungen und bleiben bestehen. Im Logbuch wird ein Fehler eingetragen:

Bitte sagen Sie mir, wie ich es richtig mache.

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

Ich habe ein solches Drehbuch geschrieben:

Die Aufgabe: Löschen aller Objekte vom Typ OBJ_LABEL aus einem Diagramm. Einige von ihnen werden jedoch übersprungen und bleiben bestehen. Ein Fehler wird in das Protokoll geschrieben:

Bitte beraten Sie mich, wie ich es richtig mache.

Ich habe den Eindruck, dass die Schleife eher absteigend als aufsteigend sein sollte, auch wenn ich nicht ins Detail gegangen bin (aber seit MQL4 wird das Löschen von Aufträgen in einer absteigenden Schleife durchgeführt).

Der Trick besteht darin, dass sich die ursprüngliche Liste nicht ändert, wenn Sie aus großen Indizes löschen, mit Ausnahme des Löschens ausgewählter Elemente (vom Ende der Liste)...

 
Interesting:

Ich habe den Eindruck, dass der Zyklus eher absteigend als aufsteigend sein sollte, auch wenn ich mich nicht mit den Einzelheiten befasst habe (seit MQL4 werden Aufträge in einem absteigenden Zyklus gelöscht).

Der Trick besteht darin, dass sich die ursprüngliche Liste nicht ändert, wenn wir mit dem Löschen aus einem großen Index beginnen, es sei denn, wir löschen ein ausgewähltes Element (vom Ende der Liste)...

Ich habe versucht, den Zyklus vom Ende her zu beginnen:

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

Jetzt gibt es keine Fehler im Protokoll, aber kein einziges Objekt wird gelöscht).

 
tol64:

Ich habe versucht, den Zyklus vom Ende her zu starten:

Jetzt gibt es keine Fehler im Logbuch, aber es werden auch keine Objekte gelöscht).

i>=0
 
tol64:

In Quadruple verwende ich diesen Ansatz: alle Objekte sind Gruppen, der Namensteil ist in der Gruppe gemeinsam.

Löschen von

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

für verschiedene Gruppen

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

und hier die Funktion IgorM

***

(nur für den Fall) Sortieren nach Objektname(nicht sicher, ob es für 5 relevant ist)

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