Galerie der in MQL geschriebenen UIs - Seite 24

 
Theoretisch könnte man (int) oder (double) vor jeden numerischen Wert schreiben, aber das überlasse ich dem Benutzer.
 
Wir müssen dem Compiler "auf die Nerven gehen", aber am Ende gewinnen wir). Das ist keine große Sache.


Für das Protokoll. Ich respektiere die Programmierregeln und die Warnungen des Compilers, aber in diesem Fall habe ich keine bessere Lösung gefunden. Mir ist klar, dass einige Leute diesen Ansatz vielleicht nicht mögen, aber er hat sich als der optimalste herausgestellt. Und harmlos.
 
Ich hoffe wirklich, dass ich morgen in der Lage sein werde, ein Update zu posten und diejenigen, die wollen, können endlich anfangen, ihre eigene Schnittstelle zu erstellen. Ich werde mein Bestes versuchen.
 
Реter Konow Compilerwarnungen, aber in diesem Fall konnte ich keine bessere Lösung finden. Mir ist klar, dass einige diesen Ansatz vielleicht nicht mögen, aber er erwies sich als der optimalste. Und harmlos.
Eine kleine Geschichte:

Als die Frage aufkam, wo ich den Markup-Code schreiben sollte, gab es zwei Hauptoptionen - in einem String-Array oder in einer Datei. Nach Abwägung der Vor- und Nachteile kam ich zu dem Schluss, dass ein Array aus einer Reihe von Gründen viel besser ist. Erstens: sofortige Initialisierung und Verarbeitung des Array-Inhalts durch den Konstruktorcode. Zweitens: blitzschneller Zugriff auf einzelne Attribute und Eigenschaften von Steuerelementen aus dem Konstruktor/der Engine zum Lesen/Überschreiben, falls erforderlich (bei einer Datei wäre das ein großes Problem). Und drittens ist es viel einfacher, ein Array über ein eigenes OnChartEvent()-Ereignis an eine Ressource zu senden. Deshalb haben wir uns für ein Array entschieden. Und Warnungen... naja, was soll man machen. Man muss immer etwas opfern, um das Ziel zu erreichen.

 
Korrektur des obigen Textes: Weiterleitung nicht nach Ressource, sondern nach Slices von zusammengesetzten Strings.
 
Nun, und das ist der Grund, der den letzten Nagel in den "Sargdeckel" der Idee schlagen wird, dass Markup in einer Textdatei geschrieben werden könnte:

Eine .txt-Datei kann nicht kompiliert werden, um sicherzustellen, dass sie keine groben Tippfehler enthält. Das bedeutet, dass der Benutzer, wenn er etwas mit Kommas, Anführungszeichen, Leerzeichen usw. verwechselt, dies NICHT durch den Kompilator erfährt.

Erst wenn es ihm nicht gelingt, die Schnittstelle zu erstellen, wird er feststellen, dass er den Code falsch geschrieben hat, und sich auf die Suche nach jedem einzelnen Tippfehler machen. Wenn er auch nur einen übersehen hat, muss er die Prozedur wiederholen.

Das ist ein wahnsinnig teurer Preis für das Fehlen von Compiler-Warnungen.

Deshalb ist in MQL die Variante mit String-Array für Markup-Code alternativlos und kann nicht verwendet werden. Und Compilerwarnungen sollten als gegeben hingenommen werden.
 
P.S. Der Compiler warnt auch, wenn ein Schlüsselwort falsch geschrieben ist. Manchmal hilft Intellisense. In einer .txt-Datei werden Sie es nicht merken, wenn Sie Schlüsselwörter falsch schreiben. Es gibt also keinen praktischen Vorteil einer Datei gegenüber einem Array.

Ich hoffe, ich habe ausführlich erklärt, warum man in diesem speziellen Fall die Compiler-Warnungen nicht loswerden sollte.

Guten Tag zusammen.

 
Реter Konow Compiler-Warnungen in diesem speziellen Fall nicht entfernt werden sollten.

Hallo zusammen.

Okay, verstanden.
 
Ist dieser Teil des Codes das Herzstück des Konstruktors
 
hini #:
Ist dieser Teil des Codes die Grundlage für den Konstruktor

Die Funktionen in dieser Datei verknüpfen Schnittstellensteuerungen auf verschiedene Weise. Zum Beispiel:

1. Der Befehl SWITCH_ALL in der Markup-Sprache bedeutet, dass der aktivierte Zustand zwischen allen Elementen einer Gruppe umgeschaltet wird. Angenommen, es gibt 10 Optionsschaltflächen in einer Gruppe. Dieser Befehl bewirkt, dass die Schaltflächen ohne zusätzlichen Code zwischen sich selbst umschalten, wenn sie angeklickt werden. Das Gleiche gilt für alle Elemente - Registerkarten, einfache Schaltflächen, Kontrollkästchen, ... alles, was angeklickt werden kann. Sogar verschiedene Arten von Elementen können umgeschaltet werden. Der Befehl ist praktisch, wenn es sehr viele Elemente gibt. Wenn Sie einzelne Elemente innerhalb einer Gruppe umschalten müssen, werden deren Namen zwischen den Worten SWITCH, ... END, AUFGEFÜHRT.

2. Der SYNC-Befehl funktioniert auf ähnliche Weise, aber mit Elementparametern. Er synchronisiert Änderungen der Parameterwerte. Zum Beispiel verknüpfen wir den Schieberegler und das Eingabefeld mit Schaltflächen, so dass sich der Schieberegler selbst an die gewünschte Position bewegt, wenn Sie einen Wert in das Eingabefeld eingeben. Oder wenn Sie den Schieberegler bewegen, ändern sich die Werte in dem damit verbundenen Eingabefeld. Sie können die Werte von Parametern verschiedener Elemente synchronisieren, wenn sie über solche verfügen. Die Funktion "Set_SYNC()" hilft dabei.

3. C.word BLOCKS öffnet die Liste der Elemente, die gesperrt werden sollen, wenn das Hauptelement gedrückt wird. Die Funktion "Set_lock_elements()" ist teilweise für diesen Befehl verantwortlich.

4. Die Funktion "Set_link_between_fields_and_tabs()" tut genau das, was ihr Name sagt - sie stellt eine Verbindung zwischen dem Anklicken eines Tabs und dem Öffnen des Bereichs seiner Elemente innerhalb des Fensters her. Das heißt, sie verwaltet das Phänomen der ihr zugewiesenen Elemente.


Kann dies als Grundlage des Konstruktors betrachtet werden? Vielmehr ist es einer der Teile, von denen es viele gibt. Die Basis des Konstruktors ist über viele Dateien verstreut und wird aus objektiven Gründen nicht an einem Ort gesammelt.


P.S. Übrigens wollte ich den Konstruktor zunächst in einer einzigen Datei veröffentlichen und habe sie gesammelt. Es stellte sich heraus, dass es ~37 Tausend Zeilen waren. Aber selbst in dieser Datei konnte ich nicht auf die Basis des Konstruktors verweisen, weil sie aus technischen Gründen nicht an einem Ort gesammelt werden kann.


Ich hoffe, ich habe zum Verständnis beigetragen, jetzt werde ich mich an die Arbeit für die Veröffentlichung machen.))) Wenn Fragen auftauchen, werde ich versuchen, so viel wie möglich zu beantworten).)