Bibliotheken: Die Bibliothek EasyAndFastGUI zum Erstellen von grafischen Interfaces - Seite 18

 
Marco vd Heijden:

Am Anfang wurde es in MQL4 und MQL5 entwickelt, aber die letzten Beispiele sind für MQL5.

Dies bedeutet nicht, dass es nicht gemacht werden kann, in MQL4 zu arbeiten.

Der Code braucht normalerweise ein paar kleine Anpassungen.

Ich habe mich bemüht, ihn zu ändern, bin aber gescheitert. Die komplexen MT5 .mqh-Dateien haben mich frustriert, so viele Variablen und Objekte!

 
17334708:

Ich war in dem Bemühen, es zu ändern, aber gescheitert. die komplexen MT5 .mqh Dateien frustriert mich, so viele Variablen und Objekte!

Der beste Weg ist, die Schleifenvariablen umzubenennen, z.B. wenn Sie eine Warnung über die Variable i erhalten, können Sie i in dieser Schleife in i1 umbenennen und in der nächsten Schleife in i2 und i3 und so weiter.

Es ist auch nicht nötig, die gesamte Bibliothek zu konvertieren, man kann einfach das Element nehmen, das man braucht, und nur das konvertieren, weil die Artikel viele Elemente und Objekte behandeln.

 
Aber eine ganze Reihe von Elementen sind miteinander verbunden. Die Änderung der Schleife oder der Variablen wird zu einer fantastischen, überladenen Arbeit. danke für Ihre freundliche Hilfe.
 
Nur wenn Sie alles haben wollen, nicht wenn Sie nur ein einziges Element haben wollen.
 
Kann diese Bibliothek in MQL4 verwendet werden?
 
Was ich gemacht habe:
Ein Panel mit mehreren Comboboxen und Zahleneingabefeldern. Es gibt ein Hauptkombinationsfeld, von dem die anderen Felder abhängen.

Wie es funktionieren soll:
Wenn sich der Wert des Hauptkombinationsfeldes ändert, ändern sich die anderen Eingabefelder und Kombinationsfelder: etwas wird ausgeblendet, etwas erscheint, etwas ändert seine Position (X,Y)

Welche Möglichkeiten ich ausprobiert habe:
1) - beim erneuten Auswählen des Wertes im Haupt-Kombinationsfeld - werden alle unnötigen Elemente gelöscht (Delete()), und dann neu erstellt (Create...()). Das Ergebnis - wenn Sie auf ein Element der neu gezeichneten Combobox klicken, tritt beim Zugriff auf das Array der Formularelemente ein Array out of range auf. Ich habe versucht, den Fehler zu "versteifen" und fügte eine Prüfung für die Array-Größe an der Fehlerstelle hinzu (so dass die Schleife nicht gezwungen ist, über das Array hinauszugehen), jetzt, wenn es hier ankommt, hängt das Formular einfach "auf".

2) - versuchte Methode 1), aber zur gleichen Zeit hinzugefügt, um WndContainer-Funktion, die in diesem Thread geschrieben wird, am Anfang der "DeleteElementsFromArray" - die Situation hat sich nicht geändert.

3) - Ich habe versucht, alle Elemente mit den gleichen X,Y-Werten zu zeichnen (alle Elemente in einem Punkt), dann sofort verstecken sie (Hide()), dann, wenn nötig, ändern ihre X,Y (XGap(...), YGap(...)) und zeichnen sie (Update(true); Show()). - Hier ist ein weiteres Problem - einige der Elemente werden nach dem Ausblenden nicht ausgeblendet, und der andere Teil - verliert seinen LabelText (er ist einfach visuell nicht vorhanden).


Was raten Sie mir?
 
Mikhail Mitin:

zu WndContainer die Funktion hinzugefügt, die in diesem Thread am Anfang von "DeleteElementsFromArray" geschrieben wird - die Situation hat sich nicht geändert


Ich habe das für einfache Elemente geschrieben. Combobox ist nicht einfach ) Die aktuelle Version sollte komplexe Elemente löschen, aber ich habe es noch nicht getestet, und ich muss da noch einiges ändern).

Und zum Verstecken habe ich die Eigenschaft m_is_hiden zu Elementen und in CWndEvents::Show(const uint window_index) hinzugefügt; Elemente mit true werden übersprungen.

 

Hallo Leute,

Die Entwicklung von Business-Code, die Verwendung von grafischen Elementen Panels ist eine Sache, und diese Bibliothek ist sehr hilfreich. Wenn es jedoch um geringe Leistung oder Bugs geht, die reproduziert werden müssen,

gibt es fast keinen Weg um den Strategy Tester herum.

Abgesehen davon ist der Versuch, Dinge in einem Live-Chart zu beheben, extrem mühsam (z. B. warten, bis bestimmte Bedingungen erfüllt sind, damit ich auf grafische Elemente klicken kann...)

Es wäre mehr als hilfreich, wenn wir die Dinge im ST richtig testen könnten!


1. Hat das MetaTrader-Entwicklungsteam irgendwo im Forum darüber gesprochen, warum das ungültige OnChartEvent im ST nicht ausgelöst wird?

2) Gibt es eine Möglichkeit, einen Workaround zu etablieren?


Vielen Dank,
Marcel

 

Das Makro in der Datei Defines.mqh

#define  TO_STRING(A) #A

ist nicht kompatibel mit Alglib {ap.mqh)

class CSerializer
  {
   //--- Aufzählung
   enum SMODE { DEFAULT,ALLOC,TO_STRING,FROM_STRING };

Ich musste es umbenennen.

 

Nach der Installation des Plattform-Updates auf 2132 traten Kompilierungsfehler auf:

  • 'WndEvents.mqh' - 'CWndContainer::~CWndContainer' - kann nicht auf geschützte Mitgliedsfunktion zugreifen WndEvents.mqh 11 27
  • CWndEvents::~CWndEvents' - kann nicht auf geschützte Mitgliedsfunktion zugreifen WndCreate.mqh 10 27


Wie man das behebt:

  • in der Datei "WndContainer.mqh" beim Konstruktor und Destruktor von "CWndContainer" "protected" durch "public" ersetzen
  • in der Datei "WndEvents.mqh" im Konstruktor und Destruktor der "CWndCreate"-Datei "protected" durch "public" ersetzen
  • in der Datei "WndCreate.mqh" im Konstruktor und Destruktor von "CWndCreate" "protected" durch "public" ersetzen.