Galerie der in MQL geschriebenen UIs - Seite 59

 
#include<(2)  KIB PROJECTS\(6) DEMO PROJECTS\Demo project 1.mqh>

Demoprojekt 1 ist in (1) KIB-source v1 enthalten, aber warum sehe ich das zugehörige Fenster nicht im Diagramm?

 
hini #:
Der Katalog ist immer noch auf Russisch ...... Ich hoffe, dass es möglich ist, den Katalog und die Dateinamen in Englisch zu haben, wie KIB PROJECTS ....... Dies ist eine kleine Bitte von mir!
Natürlich werde ich die Kataloge ins Englische übersetzen, bevor ich sie in kodobase hochlade. Ich hatte nur noch nicht die Zeit dazu. Dies ist eine Zwischenversion für öffentliche Tests.
 
hini #:

Demoprojekt 1 ist in (1) KIB-source v1 enthalten, aber warum sehe ich das zugehörige Fenster nicht im Diagramm?

Das ist seltsam. Ich werde es jetzt überprüfen.
 
hini #:

Demoprojekt 1 ist in (1) KIB-source v1 enthalten, aber warum sehe ich das zugehörige Fenster nicht im Diagramm?

Ich habe die Baugruppe überprüft. Demoprojekt 1.mqh befindet sich hier:

(2) KIB PROJECTS\(6) DEMO PROJECTS\Demo project 1.mqh


 
Ich werde etwas später eine vollständige Aufschlüsselung der Veröffentlichung vornehmen.
 

Gestern, nachdem ich die neue Version heruntergeladen hatte, schrieb ich nach viel Arbeit und in einem emotionalen Hochgefühl einen sehr positiven Beitrag, in dem ich die neuen Funktionen wortwörtlich lobte. Ein solcher Enthusiasmus ist im Rahmen einer streng technischen Diskussion nicht sehr angebracht. Heute möchte ich die implementierten Lösungen in einer ruhigen und unvoreingenommenen Weise betrachten. Konstruktive Kritik und eine objektive Bewertung sind mir willkommen. Es ist mir wichtig, mir Klarheit über die Sichtweise von Drittnutzern zu verschaffen. Das Feedback hilft, Anpassungen und Verbesserungen vorzunehmen. Und natürlich, um Fehler zu entdecken und zu beheben.

 
Kommen wir nun zur Aufschlüsselung der Veröffentlichung.
 
Ich beginne auf einer neuen Seite, damit wichtige Informationen länger im Blick bleiben.
 


Die Aufgabe bestand darin, eine programmatische Interaktion von Anwendercode mit der grafischen Oberfläche des Programms zu realisieren.

Entsprechend der Idee:

  • Nach dem Schreiben und Debuggen des KIB-Codes erhält der Benutzer das gewünschte Ergebnis (in Form von fertigen Fenstern) und speichert das Projekt.
  • Als Ergebnis der Generierung gibt es zwei Dateien: technische UIDATA.mqh und "API.mqh". Die erste ist für das Laden und den Betrieb der Schnittstelle erforderlich, die zweite für die Festlegung von Ereignissen der Elemente.
  • Der Benutzer überträgt beide Dateien aus dem Ordner Files in sein Projekt (derzeit: KIB PROJECTS\(5) USER PROJECTS\Project 1).
  • Er kompiliert seinen Expert Advisor oder Indikator mit den Verbindungslinien zwischen der Engine und den beiden Dateien:
//+------------------------------------------------------------------+
#include<(1)  KIB 1.0\(4) CONNECTIONS\KIB-DRIVE CONNECTIONS.mqh>
//--------------------------------------------------------------------
#include<(2)  KIB PROJECTS\(5) USER PROJECTS\Project 1\UIDATA.mqh>
//--------------------------------------------------------------------
#include<(2)  KIB PROJECTS\(5) USER PROJECTS\Project 1\API.mqh> 
//+------------------------------------------------------------------+
  • Wirft den EA auf den Chart und sieht die Schnittstelle.
Die EA Shell v1.mq5 wird als Beispiel im Demoprojekt verwendet , das ein Anwenderprogramm "darstellt". Sie hat identische Verbindungen, die für das Benutzeranalog notwendig sind .

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

Vor dieser Version konnte der Benutzer jedoch nur Ereignisse interaktiver Elemente in einer API-Datei mit Unterschlüssel empfangen.

Es ist wichtig zu betonen, dass der Benutzer nicht über viele, unbedingt notwendige Softwarefunktionen verfügte.

Ich werde sie auflisten:

  • Programmatisches Öffnen/Schließen von GUI-Fenstern.
  • Abrufen/Einstellen von Werten in den Parametern verschiedener Arten von Elementen.
  • Programmatisch den Zustand von Elementen umschalten: z.B.Ein-/Ausschalten, Sperren/Entsperren von Elementen bei Benutzeraktionen oder bei externen Ereignissen, die durch den laufenden Expert Advisor/Indikator festgelegt werden.
  • Programmatisch andere Werte der Elementeigenschaften abrufen/einstellen: Basis, Text, Rahmenfarbe. Ändern Sie das Symbol.


Diese Aktualisierung löst fast alle gestellten Aufgaben.



Lassen Sie mich diese auflisten:.
  • Der Benutzer kann GUI-Fenster durch Programmaufruf öffnen/schließen.
  • Der Benutzer kann Werte in den Parametern von Elementen, die diese haben, erhalten/einstellen. Einschließlich nicht interaktiver Elemente wie Tabellenzellen (CELL) und Textbeschriftungen mit einem Parameter (VALUE).
  • Das Programm schaltet zwischen zwei und vier Zuständen der verschiedenen Elementtypen um. Für Schaltflächen und Kontrollkästchen stehen vier Zustände der Softwareumschaltung zur Verfügung (ein/aus/gesperrt ein/gesperrt aus), für andere Elemente - zwei (gesperrt/entsperrt).
  • Für die Programmrückgabe bzw. das Setzen von Werten stehen kleine Sätze von individuellen Elementeigenschaften zur Verfügung. Jeder Satz wird durch ein Präfix dargestellt, das mit einer Intellisense-Liste eröffnet wird. Es verallgemeinert eine kleine, verwandte Gruppe von Elementen mit ähnlichen Eigenschaften. Dieser Ansatz beseitigt die Verwirrung bei der Vielzahl von Eigenschaften verschiedener Elementtypen.
  • Das programmatische Setzen eines Wertes für einen Parameter sendet das Ereignis an die Position des Elements in der API-Datei, wo der Benutzer zusätzlichen Code schreiben kann, um es zu behandeln.
  • Tabellenzellen werden automatisch benannt, indem der Name ihrer Zeile und Spalte gefaltet wird. Sie erhalten einen Namen und einen funktionalen Wrapper in der Datei UIDATA.mqh. Sie sind jedoch nicht in der API-Datei enthalten, da sie keine interaktiven Elemente sind. Sie sind in der Liste der Fensterelemente zu finden und reagieren ansonsten wie alle Elemente auf Software-Steuerung.


Durch die Möglichkeiten der Programmsteuerung werden Dinge realisiert, die vorher nicht möglich waren:

1. Werteversand. Den Wert eines Elements abrufen und an andere Elemente im selben oder einem anderen Fenster weiterleiten.

2. Software-Öffnung von Warn- und Dialogfenstern. Zum Beispiel in einer Situation, in der es notwendig ist, dem Benutzer eine dringende Nachricht oder eine Empfehlung anzuzeigen.

3. Gewinnung eines Gesamtbildes der Einstellungen und des Ausführungsstatus durch Abfrage von Elementparametern. Kann als Ergänzung zur Analyse anderer Programmparameter verwendet werden.

4. Dynamisches Zurücksetzen von Programmeinstellungen ohne Unterbrechung des Arbeitsprozesses.

5. Dank der Möglichkeit, die Farben von Sockeln, Text und Rahmen (noch keine Rahmen) zu ändern, wird die Schnittstelle interaktiver und informativer. Wenn zum Beispiel ein Wert zurückgespult wird und in die Gefahrenzone gerät, kann das Eingabefeld mit den Schaltflächen den Benutzer durch die rote Farbe der Basis oder des Textes auf die Gefahr hinweisen. Dies ist jetzt einfach zu implementieren. Das Gleiche gilt für den Schieberegler. Im Bereich der gefährlichen Werte kann man die Farbe des Balkens programmatisch ändern. So wird es interaktiv, informativ und praktisch.


Im Moment habe ich noch nicht alle Möglichkeiten ausgeschöpft, und ich bin sicher, dass noch viel mehr kommen wird.


Kommen wir nun zum praktischen Teil der Einführung der neuen Version.


 

Wie sich herausstellte, ist der praktische Teil der Demo recht umfangreich, und seine Behandlung wird einige Zeit in Anspruch nehmen. Ich werde die neuen Funktionen im Detail und in einer zugänglichen Art und Weise mit Kommentaren, Bildern und Gifs erklären und zeigen. Es kann sein, dass ich die Präsentation auf zwei Tage aufteilen muss - heute und morgen. Das ist in Ordnung, Ihr Verständnis wird sich verbessern. Sie sollten sich auch eine Pause gönnen.


Der Plan, die Funktionalität der neuen Version der Engine zu analysieren:

1. Ich erinnere Sie daran, dass neue Ordner und Dateien in ME installiert werden sollten , nachdem die vorherigen vollständig gelöscht wurden. Es ist nicht nötig, sie zu ersetzen.

2. Um zu arbeiten, müssen wir die Dateien (1) EA Shell v1.mq5 und API.mqh öffnen . Es besteht keine Notwendigkeit, andere Dateien zu öffnen. Wir werden die gleiche Schnittstelle und die vertrauten Fenster aus dem Demoprojekt 1.mqh verwenden . Die erste Datei sollte sich im Experts-Ordner befinden (ich glaube, sie ist bereits dort), und die zweite Datei finden Sie hier:



Die Dateien UIDATA.mqh und API.mqh in diesem Ordner enthalten bereits alles, was Sie brauchen. Es besteht keine Notwendigkeit, neue Dateien im Konstruktor zu erzeugen.


Die Hauptarbeit findet in der Datei (1) EA Shell v1.mq5 statt, in den Funktionen _OnInit() und _OnTimer, aber manchmal werden wir auch einen Blick in die Datei API.mqh werfen. Wenn Sie neugierig sind, können Sie die Datei UIDATA.mqh öffnen und sehen, wie die Fenster- und Element-Wrapper-Funktionen aussehen. Sie sind ganz unten abgedruckt. Ansonsten wird diese Datei für die Arbeit nicht benötigt und kann geschlossen werden.


Die Themen, die wir behandeln werden, sind:

1. Navigieren in der Liste von intellisense und Auswahl der richtigen Fensterfunktion.

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

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

4. Navigieren durch die Listen der einzelnen Elementeigenschaften.

5. Parsing des Elementnamens und der Fenster-Wrapper-Funktion.

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

7. Setzen von Werten für Parameter verschiedener Elementtypen. Schauen wir uns an, wie die Werte in den Schnittstellenfenstern 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 softwaremäßig) ä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 werde Ihnen mehr darüber erzählen, wie Sie den Ausdruck der neuen API-Datei navigieren und lesen können.


Das ist alles für den Moment, aber Ergänzungen sind möglich, während wir weiterarbeiten.