Diskussion zum Artikel "Erstellen einer interaktiven grafischen Nutzeroberfläche in MQL5 (Teil 1): Erstellen des Panels"

 

Neuer Artikel Erstellen einer interaktiven grafischen Nutzeroberfläche in MQL5 (Teil 1): Erstellen des Panels :

In diesem Artikel werden die grundlegenden Schritte bei der Erstellung und Implementierung einer grafischen Nutzeroberfläche (GUI) mit MetaQuotes Language 5 (MQL5) erläutert. Nutzerdefinierte Utility-Panels verbessern die Nutzerinteraktion beim Handel, indem sie gängige Aufgaben vereinfachen und wichtige Handelsinformationen visualisieren. Durch die Erstellung nutzerdefinierter Panels können Händler ihre Arbeitsabläufe straffen und bei Handelsgeschäften Zeit sparen.

Wir werden ein GUI-Panel erstellen, das die gebräuchlichsten Dienstprogramme enthält, die jeder Händler benötigen könnte, und daher wollen wir in dieser Serie alles umreißen und abdecken. Die Anzahl der Elemente, die behandelt werden müssen, ist daher sehr umfangreich, aber wir werden sie zum besseren Verständnis zusammenfassen. Wir werden 4 Elemente für unsere GUI-Entwicklung verwenden, und damit werden wir sie erstellen. Das Panel wird die Erstellung von Handelsschaltflächen, scharfen Rechtecken, Live-Updates, die Verwendung von Emojis, verschiedenen Schriftarten, Etiketten, beweglichen Panelteilen und Hover-Effekten ermöglichen. Um das Ganze zu veranschaulichen, haben wir ein Beispiel angeführt.


EXAMPLE GUI

Autor: Allan Munene Mutiiria

 
Tolle Tutorials...Gute Arbeit
 
Isaac Amo #:
Tolle Tutorials...Gute Arbeit

@Isaac Amo Ich schätze das Feedback und die Anerkennung. Ich fühle mich geschmeichelt. Ich danke Ihnen.

 

Wow, sehr nett von Ihnen, diesen Artikel zu teilen. Glücklicher Fund

 
Malcolm Campbell #:

Wow, sehr nett von Ihnen, diesen Artikel zu teilen. Glücklicher Fund

Vielen Dank @Malcolm Campbell für die freundliche Bewertung und das Feedback.

 
Einige Bytes. Auf dem Cover ist eine schöne farbige Schnittstelle, und hier ist ein Fenster von Windows XP)
Der Artikel ist nützlich, danke.
 
Petr Zharuk #:
Einige Bytes. Auf dem Cover ist eine schöne farbige Oberfläche, und hier ist ein Fenster von Windows XP)
Der Artikel ist nützlich, danke.
Hallo. Vielen Dank für Ihr freundliches Feedback. Ich schätze das sehr. Ebenfalls danke und willkommen.
 
MetaQuotes:

Der neue Artikel Interaktive GUIs in MQL5 erstellen (Teil 1): Panels erstellen wurde veröffentlicht:

Von Allan Munene Mutiiria

Ist es möglich, dieses Panel frei beweglich zu machen? frei bewegen?

 
Bisher habe ich ihn diagonal von meinem Telefon aus gelesen....
Ich werde ihn auf meinem Computer gründlicher lesen und auch eine Handelsschnittstelle auf der Grundlage Ihres Artikels erstellen. Bislang habe ich nur funktionierende Kauf- und Verkaufstasten erstellt. Ich habe eine Vorstellung davon, wie es funktioniert. Ich werde mehr lesen und auch eine grafische Schnittstelle auf meinem Computer erstellen! Ich wollte schon lange ein sehr nützliches Dienstprogramm zur Optimierung von Handelsaufträgen verwenden.
 

Als Anfängerin in MQL5 hat mir der Artikel sehr gut gefallen. Ich danke Ihnen für den Artikel. Aber ich dachte, dass die Deinitialisierungsfunktion erheblich reduziert werden kann, wenn ObjectDelete in einer Schleife über alle erstellten und gespeicherten Namen von grafischen Objekten ausgeführt wird. Dazu muss man ein Array mit Strings, einen Zähler für grafische Objekte und Operatoren für die Übergabe von Namen an das Array in den Funktionen zum Erstellen und Initialisieren von Parametern grafischer Objekte hinzufügen. Ich habe es auf diese Weise gemacht:

#define  ADDOBJ ArrayResize(objectsArray, objectCount+1);\
   objectsArray[objectCount] = objName;\
   objectCount++;

string objectsArray[];
int objectCount = 0;
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
// Erstellte grafische Objekte löschen
   for(int i = 0; i < objectCount; i++)
     {
      if(ObjectFind(0, objectsArray[i]) >= 0)
        {
         ObjectDelete(0, objectsArray[i]);
         // Print("Objekt gelöscht: ", objectsArray[i]);
        }
     }
  }

Ich habe auch hinzugefügt:

input int base_x = 300;  // Linker Einzug
input int base_y = 100;  // Oberer Einzug
input bool Include_DropDown = false; // DropDown anzeigen
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   CreatPanel();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|    Function to create Panel                                      |
//+------------------------------------------------------------------+
void CreatPanel()
  {
   createRecLabel("MAIN_REC",10,30,250,400,clrWhite,1,clrBlack);
   createRecLabel("MAIN_SUB_REC",15,35,240,390,C'245,245,245',1,clrNONE);
   createRecLabel("MAIN_LINE_UP",15,35,240,1,C'245,245,245',1,clrNONE,BORDER_RAISED);
...

   if(Include_DropDown)
     {
      createDropDown();
     }
   ChartRedraw(0);
  }
Und in der Erstellungsfunktion habe ich sie wie folgt verfeinert:

 

Und ich habe die Funktionen zur Erstellung von Grafikobjekten ein wenig verändert:

//+------------------------------------------------------------------+
//| Funktion zum Erstellen von Textbeschriftungen|
//+------------------------------------------------------------------+
bool createLabel(string objName, int xD, int yD,
                 string txt, color clrTxt = clrBlack, int fontSize = 12,
                 string font = "Arial Rounded MT Bold")
  {
   ResetLastError();

   if(!ObjectCreate(0, objName, OBJ_LABEL, 0, 0, 0))
     {
      Print(__FUNCTION__, ": failed to create the label! Error code = ", _LastError);
      return (false);
     }

   ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, base_x + xD); // Hinzufügen von base_x +
   ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, base_y + yD); // Hinzufügen von base_y +
   ObjectSetInteger(0, objName, OBJPROP_CORNER, CORNER_LEFT_UPPER); 
   ObjectSetString(0, objName, OBJPROP_TEXT, txt);
   ObjectSetInteger(0, objName, OBJPROP_COLOR, clrTxt);
   ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, fontSize);
   ObjectSetString(0, objName, OBJPROP_FONT, font);
   ObjectSetInteger(0, objName, OBJPROP_BACK, false);
   ObjectSetInteger(0, objName, OBJPROP_STATE, false);
   ObjectSetInteger(0, objName, OBJPROP_SELECTABLE, false);
   ObjectSetInteger(0, objName, OBJPROP_SELECTED, false);

   ADDOBJ 

   return (true);
  }