Galerie der in MQL geschriebenen UIs - Seite 32

 

Code:

//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*ОТСТУПЫ КРАЕВ ОКНА*/      MARGINS, 20,20,  /*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, A,

__, BUTTON, "Button 1",  BUTTON, "Button 5", 
__, BUTTON, "Button 2",  BUTTON, "Button 6", 
__, BUTTON, "Button 3",  BUTTON, "Button 7", 
__, BUTTON, "Button 4",  BUTTON, "Button 8", 

END_GROUP,
//--------------------------

//--------------------------
//SET GROUP POSITION:
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//--------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//PROPERTIES FOR ALL BUTTONS IN THE GROUP
//--------------------------
i, BUTTONS, text, N_COLOR,  (uint)clrBlack,
            text, A_COLOR,  (uint)clrRed,
            text, P_COLOR,  (uint)clrLime,
            text, AP_COLOR, (uint)clrWhite,  
            
            FONT_SIZE, 12, 
            TEXT_FONT,"Courier New",
            TEXT_STYLE,(int)FONT_ITALIC,
            
            FIC,          //FIXED IF CLICKED       
                                         
   END, 
//--------------------------

//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------
 
Tolles Beispiel-Tutorial, bitte fortsetzen
 
hini #:
Tolles Beispiel für ein Lehrbuch, bitte fahren Sie fort.
Ich bin einverstanden. Ich werde jeden Tag eine Lektion wie diese machen.
 


Allgemeine Informationen über die Auszeichnungssprache und den Konstruktor.


1. Die Eigenschaftswerte der Konstruktorelemente sind vordefiniert. Wenn nicht explizit definiert, werden den Eigenschaften Standardwerte zugewiesen.


(2) Das interaktive Verhalten der Elemente ist vorprogrammiert, aber der Benutzer hat die Möglichkeit, verschiedene Reaktionen zu ändern oder zu deaktivieren.


3. Die Größe des Interface-Fensters wird automatisch berechnet, wenn die Position und Größe der konstituierenden Gruppen berechnet wird. Rechte und untere Ränder (Ränder) werden ebenfalls berücksichtigt, wenn sie vom Benutzer angegeben wurden.


4. Die Länge einiger Elemente hängt direkt von der Länge der Texte ab. Sie wird automatisch berechnet, wenn der Benutzer keinen expliziten Wert angegeben hat. Andernfalls schneidet der Konstruktor den Text ab, der über das Element hinausgeht, und setzt eine gestrichelte Linie, um den Wert des Benutzers zu speichern. Zu diesen Elementen gehören Ankreuzfelder, Optionsfelder, Textbeschriftungen, horizontale und vertikale Tabulatoren.


5. Bei der Konstruktion eines Fensters bemüht sich der Designer um ein tabellarisches Layout und die Beibehaltung der Symmetrie in Gruppen von Elementen. Kontrollkästchen oder Elemente ähnlicher Art werden automatisch an einem gemeinsamen Längenwert ausgerichtet.


6. Das Festhalten des Designers an einem tabellarischen Layout erleichtert den Aufbau der Benutzeroberfläche, und für eine größere Flexibilität ist es so konzipiert, dass Elemente in Gruppen mit Anordnung durch Flaggen und Bindungen unterteilt werden.


7. Es gibt keine Begrenzung für die Anzahl der Elemente in einem einzelnen Fenster.


8. Es gibt keine Begrenzung für die Anzahl der Fenster innerhalb eines einzelnen Projekts.


9. Das Vorhandensein einer Taskleiste und eines Kontextmenüs ist für ALLE Projekte obligatorisch. Das Erscheinen der Taskleiste kann jedoch deaktiviert werden, wenn Sie den Befehl OPEN_ON_INIT (OOI) in seiner Datei auskommentieren. Dann ist es notwendig, die Eigenschaft der Fensterminierung zu deaktivieren (es gibt eine solche Möglichkeit).


10. Auf der rechten Seite der Taskleiste des Benutzers kann der Benutzer Schaltflächen zum Aufrufen seiner Fenster festlegen.


11. Alle Elemente können einen Tooltip mit einem Namen haben, wenn man mit dem Mauszeiger darüber fährt. Um dies zu tun, müssen Sie einen Befehl in den Eigenschaften _,SHOW_NAMETIP schreiben.


12. Das Kontextmenü des Konstrukteurs oder des Benutzers ist bei Doppelklick auf das Diagramm.


13. Hilfsfenster des Konstruktors erleichtern das Auffinden und Auswählen von Attributen von Elementen bei der Festlegung von Rahmen, Farben, Schriftarten, Icons und Sounds.


14. Beim Schreiben von Code auf dem neuesten Build ist es erforderlich, den Markup-Code zu kompilieren und dann den Indikator KIB-source.mq5 zu kompilieren, sonst gibt es einen Fehler in Form eines weißen Bildschirms und hängt (es gibt kein solches Problem auf dem alten Build 2470).


Fortsetzung folgt...

 
Als Nächstes wollen wir die Anordnung der Elemente beim Aufbau einer Gruppe untersuchen.
 

Positionierung einer Gruppe in einem Fenster:



Einstellung des Fenstereinzugs am rechten und unteren Rand:

0.


1.

2.




Einstellen der Abstände zwischen den Elementen:

1.

2.


3.


5.


6.


7.


8.


9.




Galleria di interfacce utente scritte in MQL
Galleria di interfacce utente scritte in MQL
  • 2024.05.30
  • Реter Konow
  • www.mql5.com
Di recente, mentre riordinavo il mio vecchio computer portatile, mi sono imbattuto per caso in una cartella persa nella selva delle directory...
 

Code:

//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, A,
 
__, BUTTON, "Button 1", GAP,40, BUTTON, "Button 7",

GAP,40, //GAP BETWEEN THE LINES

__, BUTTON, "Button 2", GAP,40, BUTTON, "Button 8",

GAP,40,  //GAP BETWEEN THE LINES

__, BUTTON, "Button 3", GAP,40, BUTTON, "Button 9",
__, BUTTON, "Button 4", GAP,40, BUTTON, "Button 10",
__, BUTTON, "Button 5", GAP,40, BUTTON, "Button 11",
__, BUTTON, "Button 6", GAP,40, BUTTON, "Button 12",

END_GROUP,
//--------------------------

//--------------------------
//SET GROUP POSITION:
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------

//--------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 

//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------


//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "My first window",
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/  W_ICON, "::Images\\16x16\\Smile.bmp",  
//------------------------------------------------------

//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//----------------------------------------------------------------------------------
/*WINDOW OPENS AT START*/   OPEN_ON_INIT,  /*(OOI)*/

/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  

/*MARGINS OF THE WINDOW*/   MARGINS, 40,40,/*Х, Y*/
//----------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
//1. DECLARE A GROUP WITH AN ABSTRACT NAME  A.
//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL  __, 
//3. DECLARE A BUTTON AND WRITE IT'S NAME.
//4. END GROUP WITH THE KEYWORDS  END_GROUP,
//------------------------------------------------------
GROUP, A,
 
__, BUTTON, "Button 1",  BUTTON, "Button 7",
__, BUTTON, "Button 2",  BUTTON, "Button 8",
__, BUTTON, "Button 3",  BUTTON, "Button 9",
__, BUTTON, "Button 4",  BUTTON, "Button 10",
__, BUTTON, "Button 5",  BUTTON, "Button 11",
__, BUTTON, "Button 6",  BUTTON, "Button 12",

END_GROUP,
//--------------------------

//--------------------------
//SET GROUP POSITION:
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------
i, X_GAP, 40, //GAP BETWEEN THE ELEMENTS IN THE ROW

i, Y_GAP, 40,  //GAP BETWEEN THE ROWS 
//--------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 




//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------
 

Um beim Thema Layout der Elemente zu bleiben: Bei Schaltflächen ist alles klar, denn sie haben entweder Standardgrößen oder werden vom Benutzer definiert. Aber bei Elementen, deren Länge an die Länge des Textes gebunden ist, ist alles zweideutig. Hier sind einige Beispiele für Kontrollkästchen und Optionsfelder:

1) Die Namen von Kontrollkästchen und Optionsfeldern sind fast gleich.


2. ein Optionsfeld ist viel länger als die anderen. Sie werden gleich lang:


3. In der zweiten Spalte ist das mittlere Kontrollkästchen deutlich länger. Die anderen nehmen seine Größe an:


4. Wenn Sie die Länge der Kontrollkästchen und Optionsfelder explizit festlegen, wird der Ausgangstext automatisch gekürzt.


 
Optionscode 1:
GROUP, A,
 
__, R_BUTTON, "R_button with a long name", CHECKBOX, "Checkbox 1",
__, R_BUTTON, "R_button 2", CHECKBOX, "Checkbox 2",
__, R_BUTTON, "R_button 3", CHECKBOX, "Checkbox 3", 
__, R_BUTTON, "R_button 4", CHECKBOX, "Checkbox 4 with the longest name",
__, R_BUTTON, "R_button 5", CHECKBOX, "Checkbox 5",
__, R_BUTTON, "R_button 6", CHECKBOX, "Checkbox 6",

END_GROUP,
//--------------------------

//--------------------------
//SET GROUP POSITION:
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------
i, X_GAP, 30,

i, Y_GAP, 30,
//--------------------------

Optionscode 2:

//------------------------------------------------------
GROUP, A,
 
__, R_BUTTON, "R_button with a long name", CHECKBOX, "Checkbox 1",
__, R_BUTTON, "R_button 2", CHECKBOX, "Checkbox 2",
__, R_BUTTON, "R_button 3", CHECKBOX, "Checkbox 3", 
__, R_BUTTON, "R_button 4", CHECKBOX, "Checkbox 4 with the longest name",
__, R_BUTTON, "R_button 5", CHECKBOX, "Checkbox 5",
__, R_BUTTON, "R_button 6", CHECKBOX, "Checkbox 6",

END_GROUP,
//--------------------------
//SET GROUP POSITION:
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------
// SET PROPERTIES EXPLICITLY FOR R_BUTTONS
//--------------------------
i, R_BUTTONS,  W, 120, END,
//--------------------------
// SET PROPERTIES EXPLICITLY FOR CHECKBOXES
//--------------------------
i, CHECKBOXES, W, 90,  END,
//--------------------------
i, X_GAP, 30,

i, Y_GAP, 30,
//--------------------------
 
Ist "END " beim Setzen des Endes einer Reihe von Elementattributen festgelegt?