Galerie der in MQL geschriebenen UIs - Seite 61

 
Fahren wir mit dem nächsten Thema fort:

4. Navigation durch die Listen der einzelnen Elementeigenschaften.

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

Ich möchte Sie an die Liste der zu berücksichtigenden Themen erinnern:

1. die Orientierung in der Liste von intellisense und die Auswahl der Funktion des richtigen Fensters.

2. Programmgesteuertes Öffnen und Schließen von Fenstern.

3. sich in der Liste von intellisense zu orientieren und die richtige Funktion im richtigen Fenster auszuwählen.

4. Navigieren durch die Listen der einzelnen Elementeigenschaften.

5. Parsen des Namens einer Element- und Fenster-Wrapper-Funktion.

6.Rückgabe des Parameterwertes eines ausgewählten Elements an eine Variable seines Typs. Betrachtung von drei Typen mehrerer verschiedener Elemente.

7. Setzen von Werten in den Parametern verschiedener Typen von Elementen. Schauen wir uns an, wie die Werte in den Oberflächenfenstern dieser Elemente erscheinen werden.

8. Rückgabe der Parameterwerte eines Elements, Änderung und Weiterleitung dieses Werts an ein anderes Element. Betrachten Sie verschiedene Arten von Elementen und Werten, und testen Sie die Weiterleitung zwischen verschiedenen Arten von Elementen in verschiedenen Fenstern.

9. Rückgabe des letzten Wertes (_V_LAST). Wann und für welche Fälle wird der letzte Wert benötigt (nicht zu verwechseln mit dem aktuellen Wert).

10. Testen Sie die Einstellung der Zustände ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK für verschiedene Arten von Elementen.

11. Versuchen Sie, die Änderungen der Werte von Elementen verschiedener Typen zu verknüpfen und zu synchronisieren: z.B. Eingabefeld mit Schaltflächen und Schieberegler. Nehmen wir an, dass, wenn sich der Wert eines Elements (manuell oder Software) ändert, sich der Wert im zweiten Element entsprechend ändert.

12. Versuchen wir, die Bereichsgrenzen des Schiebereglers und des Eingabefeldes mit Schaltflächen über Wrapper-Funktionen programmatisch zurückzusetzen. Ich hatte noch keine Zeit, das zu testen, aber etwas deutet darauf hin, dass es funktionieren wird. Wie auch immer, schauen wir mal.

13. Versuchen wir, Elementzustände über Wrapper-Funktionen zurückzugeben. Das ist in der Funktionalität enthalten, aber ich hatte noch keine Zeit, es zu testen. Wir werden also sehen... Das Ergebnis ist unbekannt.

14. Lassen Sie uns die Farben für Text und Elementbasen abrufen und setzen. Wir können versuchen, diese Farben mit einigen einfachen Ereignissen oder Wertgrenzen zu verknüpfen.

15. Ich erzähle Ihnen mehr darüber, wie Sie den Ausdruck der neuen API-Datei navigieren und lesen können.

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

Gelbe Farbe kennzeichnet Themen, die bereits behandelt wurden.

 
Lassen Sie uns das Thema Punkt für Punkt aufschlüsseln:

  • Das Konzept der Aufteilung von Eigenschaften in Listen, basierend auf der "Verwandtschaft" der Elemente, wurde erfolgreich umgesetzt.
  • Als Ergebnis der Umsetzung wurden 7 eindeutige Eigenschaftslisten für alle Arten von Elementen erstellt.
  • Jeder Liste wird ein spezieller Bezeichner zugewiesen. Dieser besteht aus dem Präfix p (Abkürzung für property) und einer laufenden Nummer.
  • Infolgedessen kann jede Liste in Intellisense durch sieben Präfixe gefunden werden: p1, p2, p3, p4, p5, p6 und p7.
  • Der Einfachheit halber und um Verwechslungen zu vermeiden, werden die Präfixe der Eigenschaftslisten in die Namen der Wrapper-Funktionen eingefügt:

  • Wenn das Präfix eingegeben wird, erscheint eine Liste der einzelnen Eigenschaften. Ich habe das Wort "individuell" absichtlich betont, da dieser Punkt von zentraler Bedeutung ist.
  • Um Eigenschaftswerte zurückzugeben und zu setzen, akzeptieren die Wrapper-Funktionen Eigenschaftsnamen NUR mit dem Präfix in ihrem eigenen Namen geschrieben:


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


  • NUR diese Eigenschaften aus der Liste sind für das Ankreuzfeld verfügbar. Die Liste selbst gehört jedoch nicht nur zum Ankreuzfeld, sondern auch zu einigen anderen Elementen.

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


  • Das Element C_LIST hat noch keine besonderen Eigenschaften in seiner Liste. Nur Aktionen, die von der Verschalung durchgeführt werden können (außer der Rückgabe von V_LAST - dem letzten Wert).

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


  • Im Gegensatz zu C_LIST verfügt der Schieberegler über eine umfangreiche Liste verfügbarer Eigenschaften und Aktionen.

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


  • Zum S_EDIT-Element gehört eine breite Palette an verfügbaren Eigenschaften und Aktionen:


Hervorhebung hinzugefügt:

Jede Wrapper-Funktion akzeptiert nur Eigenschaften, die das Präfix in ihrem Namen enthalten.


So sieht die Arbeit mit Listen in der Praxis aus(setzen Sie die Klammern ans Ende, da Intellisense innerhalb der Klammern von Wrapper-Funktionen nicht funktioniert):

Das gif ist leicht beschleunigt.


Als Ergebnis der im Gif gezeigten Aufrufe geben die Wrapper-Funktionen die Werte der angegebenen Eigenschaften zurück.

Vor dem Aufruf müssen Sie eine Variable deklarieren, um den Wert der Eigenschaft oder das Ergebnis der Funktionsausführung zu speichern. Weitere Informationen hierzu finden Sie in den folgenden Themen.

 

5.
Analysieren des Namens des Elements und der Fensterumschließungsfunktion:


1. Name der Element-Wrapper-Funktion:

Schauen wir uns das Beispiel der Funktion für das Element EDIT Texteingabefeld an: w7_s_p4_EDIT_Comment_1();

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

  • w7 - Fensternummer 7

//-------------------------------------------------------------
  • s - Rückgabewerttyp dieser Wrapper-Funktion string.

//-------------------------------------------------------------
  • p4 - Präfix der Eigenschaftsliste dieses Elementtyps.

/ / - ------------------------------------------------------------
  • EDIT - Typ des Elements.

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

  • Comment_1 - Name des spezifischen Elements.

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


2. Der Name der Window-Wrapper-Funktion:

Betrachten wir eine andere Funktion als Beispiel: w_15_Processing_the_data();

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

  • w_15 - Fensternummer 15
Beachten Sie, dass die Zahl nicht direkt nach w kommt, sondern durch den Bindestrich _. Dies ist wichtig.

) // - ------------------------------------------------------------
  • Processing_the_data - Der Name dieses Fensters (bei Warnfenstern darf der Name nicht mit Caption - dem Text in der Kopfzeile des Fensters - übereinstimmen).

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

Es ist anzumerken, dass die Fensterfunktion noch nicht über ein Präfix zum Öffnen der Eigenschaftsliste verfügt. Diese Funktion wird auf jeden Fall erscheinen. Es wird eine spezielle Liste von Fenstereigenschaften erstellt, die zurückzugeben/zu setzen sind, und es wird ein Präfix zugewiesen. Auch die Fensterfunktion enthält noch keinen Buchstaben für den Rückgabetyp.

Im Moment kann die Funktion nur ein Fenster öffnen oder schließen.


Diese Fehler werden in der nächsten Version behoben.


 
Es wird empfohlen, diese Informationen zum Tutorial einmal privat und separat zusammenzufassen, da sie sonst in Zukunft die Kommentare überfluten
 
hini #:
Es wird empfohlen, diese Ausbildungsinformationen einmal privat und separat zusammenzufassen, da sie sonst in Zukunft die Kommentare überfluten werden
Natürlich werden diese Informationen zusammengefasst und geordnet, wie es sich gehört.
 
Im gegenwärtigen Zeitraum wird die Reihenfolge der Anweisungen, Erläuterungen und Kommentare gerade erst festgelegt. Der Inhalt der künftigen Dokumentation wird im Laufe der Entwicklung und der Kommunikation mit den Nutzern harmonisch zusammengeführt. Folglich werden die Hintergrundinformationen in Teilen präsentiert. Die Entgegennahme von Rückmeldungen ist notwendig und stellt eine wichtige Etappe dar, die die Qualität der technischen Lösungen erhöht. Die Software durchläuft eine formative Phase und wird dank der aktiven Beteiligung der Öffentlichkeit ihre volle Funktionalität erreichen können. Das Ergebnis wird ein vollständiges Programm mit ausführlicher Dokumentation sein.
 

6.den Wert desParameters oder der Eigenschaft an eine Variable des gewünschten Typszurückgeben:


Der Typ des Elementparameters(int, double oder string) bestimmt den Typ der Elementfunktion.

Es ist bekannt, dass Elementfunktionen den Wert des Parameters mit einem der drei Typen zurückgeben: int, double oder string.

Die Funktionen geben jedoch auch Eigenschaftswerte zurück...

Es entsteht eine Situation, in der der Typ des Parameterwerts nicht mit dem Typ der Eigenschaften übereinstimmt, die immer int sind .Es stellt sich heraus, dass Funktionen Eigenschaftswerte des falschen Typs zurückgeben, z. B. double oder string anstelle von int. Diese erzwungene Unannehmlichkeit ist der Preis für die Universalität von Funktionen.

Die Aufgabe des Benutzers ist es den empfangenen Wert selbst in den gewünschten Typ umzuwandeln..


Ich möchte betonen: Der Haupttyp aller Elementeigenschaften ist int.


Schauen wir uns die Frage-Antwort-Beispiele genauer an:

  • - F: Wie wird die Funktion den Wert einer Eigenschaft vom Typ int zurückgeben, wenn der Funktionstyp string ist?
  • - Antwort: Die Funktion wird den Wert von int mit dem Typ string zurückgeben.
  • - Frage: Wie wird die Funktion den Wert vonint zurückgeben, wenn der Funktionstyp double ist?
  • - Antwort: Die Funktion wird den Wert von int mit dem Typ double zurückgeben.
  • - Frage: Wie wird die Funktion den Wert double zurückgeben, wenn der Funktionstyp int ist?
  • - Antwort: Eigenschaften von Elementen vom Typ double gibt es nicht. Die Eigenschaften der Parameter des Elements können vom Typ double sein. In diesem Fall wird die Funktion selbst vom Typ double sein.


Der Typ des Parameterwerts bestimmt den Typ der Funktion des Elements.

Es gibt keine Eigenschaften eines Elements vom Typ double. Nur int. Es gibt jedoch Parametereigenschaften, die die Typen double, string oder int akzeptieren. Zum Beispiel können V_CURRENT, V_LAST, V_MAX, V_MIN, V_STEP entweder int oder double sein. In beiden Fällen wird die Elementfunktion ebenfalls zu int oder double. Aber die Funktion kann nicht zu int werden, wenn die Eigenschaften des Parameters oder der Parameter selbst nicht int sind .

Und wenn die Schiebereglerfunktion den Typ int zurückgibt, bedeutet dies, dass der Benutzer selbst bei der Erstellung des Elements den Parametern oder Eigenschaften Ganzzahlen zugewiesen hat - zum Beispiel, indem er den Schiebereglerbereich oder Eingabefelder mit Schaltflächen in Ganzzahlwerten platziert hat. .



Fazit: Die Aufgabe des Benutzers ist es, die erhaltenen Werte in den gewünschten Typ zu konvertieren.

Betrachten wir nun einige praktische Beispiele:

1.

   //------------------------------------------------
   //Текстовое поле ввода EDIT. Тип функции - string.
   //Получение и установка цвета текста и основания:
   //------------------------------------------------
   
   //1. Устанавливаем любой текст в пустое поле ввода:
   w7_s_p4_EDIT_Comment_1("Some random text");
   //------------------------------------------------

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

2.

   //------------------------------------------------
   //2. Получаем цвет основания поля ввода:
   uint Comment_1_base_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_base); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_base_color  ",Comment_1_base_color);
   //------------------------------------------------

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

3.

   //------------------------------------------------
   //3. Назначаем основанию новый цвет:
   w7_s_p4_EDIT_Comment_1((uint)clrWheat,p4_COLOR_base); 
   //------------------------------------------------

Siehe das Ergebnis:


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

4.

   //------------------------------------------------
   //4. Получаем цвет текста поля ввода: 
   uint Comment_1_text_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_text); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_text_color  ",Comment_1_text_color); 
   //------------------------------------------------


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

5.

   //------------------------------------------------
   //5. Устанавливаем другой цвет тексту:
   w7_s_p4_EDIT_Comment_1((uint)clrRed,p4_COLOR_text); 
   //------------------------------------------------

Sehen Sie das Ergebnis:




Als nächstes testen wir das Abrufen und Setzen anderer Element- und Parametereigenschaften. Versuchen wir auch, mit dem Typ double zu arbeiten.

Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
 

Ich bin dem Code gefolgt und habe ihn getestet. Dabei habe ich eine unerwartete Sache gefunden, die nicht automatisch ausgeblendet wird, wenn die Länge der zufälligen Zeichenfolge zu lang ist

w7_s_p4_EDIT_Comment_1("Some random text AAAAAAAA");


 
Dies sind kleinere Probleme, bitte lassen Sie sie für später und sehen, was passiert, wenn Sie Zeit haben, überprüfen Sie sie, wenn nicht, beheben Sie sie nicht für jetzt!
 

Ich habe ein fatales Problem für mich gefunden, das darin besteht, dass der Text, den ich eintippe, auf der grafischen Benutzeroberfläche in horizontaler Ausrichtung ...... um 90 Grad gedreht angezeigt wird, wie es normal ist:

你好