Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 251

 

Hallo, ich möchte ein Handels-Panel für meine EA in zwei Versionen mql4 und mql5 zu schreiben. Da ich mit grafischen Objekten noch nicht vertraut bin, habe ich ein Beispiel aus der Klasse CLabel der Standardbibliothek verwendet, um ein bewegliches Menü zu erstellen. In mql5 funktioniert das Menü einwandfrei, aber nicht in mql4. Wenn eine Diagrammperiode geändert wird, werden die Menüobjekte dupliziert und ihre Position zueinander verändert. Vielleicht fehlen mql4 einige Methoden in der CLabel-Klasse, die mql5 hat? Könnten Sie vorschlagen, was in diese Klasse aufgenommen werden sollte, um solche Probleme zu vermeiden?

Auch im Beispielcode der Klasse CLabel ist mir nicht klar, was diese Zeilen bewirken:

EVENT_MAP_BEGIN(CControlsDialog) 
  
EVENT_MAP_END(CAppDialog)
 
Aleksandr Teleguz:

Hallo, ich möchte ein Handels-Panel für meine EA in zwei Versionen mql4 und mql5 zu schreiben. Da ich mit grafischen Objekten noch nicht vertraut bin, habe ich ein Beispiel aus der Klasse CLabel der Standardbibliothek verwendet, um ein bewegliches Menü zu erstellen. In mql5 funktioniert das Menü einwandfrei, aber nicht in mql4. Wenn eine Diagrammperiode geändert wird, werden die Menüobjekte dupliziert und ihre Position zueinander verändert. Vielleicht fehlen mql4 einige Methoden in der CLabel-Klasse, die mql5 hat? Könnten Sie vorschlagen, was in diese Klasse aufgenommen werden sollte, um solche Probleme zu vermeiden?

Außerdem ist mir nicht klar, was diese Zeichenfolgen im Code des Beispiels der Klasse CLabel bewirken:


Die angegebenen Zeilen sind Makros, die in die Datei Defines.mqh geschrieben werden. Wörtlich: Die erste Zeile des Makros übergibt die Kontrolle an die Ereignisbehandlungsfunktion der KlasseCControlsDialog, dann werden Funktionen zwischen diesen Makros ausgeführt und das letzte Makro übergibt die Kontrolle an die KlasseCAppDialog

 
Алексей Барбашин:

Die angegebenen Zeilen sind Makros, die in die Datei Defines.mqh geschrieben werden. Wörtlich genommen übergibt die erste Zeile des Makros die Kontrolle an die Ereignisbehandlungsfunktion der KlasseCControlsDialog, dann werden die Funktionen zwischen diesen Makros ausgeführt, und das letzte Makro übergibt die Kontrolle an die KlasseCAppDialog


Danke, so langsam wird mir etwas klar.) Und können Sie mir einen Link zu einer Dokumentation über das Thema Makros geben?

 
Aleksandr Teleguz:

Können Sie mir einen Link zur Dokumentation zum Thema Makros geben?


https://www.mql5.com/ru/docs/basis/preprosessor/constant

Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
  • www.mql5.com
Основы языка / Препроцессор / Макроподстановка (#define) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

int OnDeinit()

{

Alert("beg OnDeinit()");

// err=StringToInteger(err);

//------------------------

zurück(0);

Alert("end OnDeinit()");

}

//OnDeinit();-----------

Der gefangene Err wird als Ganzzahl beschrieben


Ich weiß nicht, wo das Problem liegt.

Ich habe die Nachricht erhalten

 
buyanov:

int OnDeinit()

{

Alert("beg OnDeinit()");

// err=StringToInteger(err);

//------------------------

zurück(0);

Alert("end OnDeinit()");

}

//OnDeinit();-----------

Der gefangene Err wird als Ganzzahl beschrieben


Ich weiß nicht, wo das Problem liegt.

Ich habe eine Nachricht erhalten


Mir ist nicht ganz klar, was das Problem ist und wo der Fehler auftritt. Wenn Sie eine err-Variable vom Typ int haben, warum versuchen Sie in der auskommentierten Zeile, sie von String in int zu konvertieren? Wo genau tritt der Fehler auf?

 
Алексей Барбашин:

Es ist nicht klar, was das Problem ist und wo der Fehler herkommt. Wenn Sie eine Variable err vom Typ int haben, warum versuchen Sie dann, sie in der kommentierten Zeichenfolge vom Typ string in int zu konvertieren? An welcher Stelle tritt ein Fehler auf?

Die Sache ist, ich sehe keinen Fehler, aber ich bekomme eine Warnmeldung implicut Konvertierung Integer zu String. Auf jeden Fall müssen wir es herausfinden.
 
buyanov Die err-Zeichenkette wird als Ganzzahl beschrieben Es ist unklar, was das Problem ist

Die Compilermeldung gibt die Zeile und die Position des Fehlers an. Sie können auf die Beschreibungszeile (untere Zeile im Bild) klicken und der Cursor zeigt den Fehler im Programmtext an. Die DeInit-Funktion wird ausgeführt, bevor der Indikator oder Expert Advisor aus dem Chart entfernt wird. Hier können z.B. erstellte grafische Elemente gelöscht werden. Wenn keine Aktionen ausgeführt werden sollen (die Funktion ist leer) - kann die Funktion gelöscht werden... Wenn Sie etwas wie string x=125 haben, korrigieren Sie zu string x = (string)125

Anstelle von err=StringToInteger(err); err=StringToInteger((string)err); obwohl manche das lustig finden könnten

 
STARIJ:

Die Compilermeldung gibt die Zeile und die Position des Fehlers an. Sie können auf die Beschreibungszeile (untere Zeile im Bild) klicken und der Cursor zeigt den Fehler im Programmtext an. Die DeInit-Funktion wird ausgeführt, bevor der Indikator oder Expert Advisor aus dem Chart entfernt wird. Hier können z.B. erstellte grafische Elemente gelöscht werden. Wenn keine Aktionen ausgeführt werden sollen (die Funktion ist leer) - kann die Funktion gelöscht werden... Wenn Sie etwas wie string x=125 haben, korrigieren Sie zu string x = (string)125

Anstelle von err=StringToInteger(err); err=StringToInteger((string)err); obwohl manche das lustig finden könnten


Frau...

Ich habe getan, was Sie empfehlen

Zeileerr=StringToInteger((string)err) in die FunktionOption einfügen; kein Fehler.

Aber die Warnung implizite Konvertierung von Zeichenkette zu Zahl bleibt bestehen, ich denke, das Terminal muss doch neu installiert werden.

 
buyanov: Ich habe, wie von Ihnen empfohlen, die Zeileerr=StringToInteger((string)err) in die OnDeinit-Funktion eingefügt; kein Fehler.

aber die implizite Konvertierungswarnung von Zeichenkette zu Zahl bleibt bestehen, ich werde das Terminal wohl doch neu installieren müssen.

Bitte posten Sie Ihre Funktion OnDeinit - ich werde sie mir ansehen. Und sagen Sie mir, was Sie sich davon versprechen. MetaEditor erzeugt diesen Fehler. Erstellen Sie eine Kopie des Terminal-Ordners. Hier erklärt Alexey Viktorov, wie man schnell neu installieren kann

Grund der Beschwerde: