Galerie der in MQL geschriebenen UIs - Seite 35

 
_Y2H 是什么,是否有 _X2H ?
 
hini #: _Y2H Что это такое, и есть ли это _X2H?

Analysieren wir den Ausdruck _Y2H:

  • Y ist eine Koordinate
  • 2 bedeutet "zu". Es zeigt etwas an.
  • H ist die Abkürzung für Höhe.

Y zu Höhe.

Im Koordinatensystem führt eine Bewegung vom Y-Punkt des Objekts entlang seines Körpers in einem Abstand, der der Höhe des Objekts (y_size) entspricht, zu seinem tiefsten Punkt. Die Y-Koordinate des zu fangenden Objekts muss entlang der Höhe des zu fangenden Objekts absteigen und an seinem tiefsten Punkt enden. Das heißt, sie muss die Höhendistanz des Ankerobjekts zurücklegen, weshalb der Anker _Y2H genannt wird.


2. _X2H gibt es nicht , weil die X-Koordinate nur in der horizontalen, nicht in der vertikalen Ebene fangen kann und H für die Höhe steht. Es gibt einen _X2W-Fang, d.h. die X-Koordinate wird an dem Punkt X + X_SIZE (Breite) des angegebenen Objekts gefangen.


Auf das Thema Rasterung wird später noch näher eingegangen.

 

Heute werden wir mit den Aufzählungen abschließen, da wir gestern damit begonnen haben.

 

Zum Thema Bindungen möchte ich hinzufügen, dass es strenge Regeln gibt und es keinen Sinn hat, jetzt mit ihnen zu experimentieren. Warten Sie auf eine ausführlichere Erklärung.

Es gibt Bindungen, die getrennt für Gruppen von Elementen arbeiten, und solche, die mit einzelnen Elementen innerhalb von Gruppen arbeiten. Es gibt auch Bindungen, die für die Positionierung von Objekten innerhalb von Elementen (wie Text oder Icons) geeignet sind.

Darauf kommen wir später noch zu sprechen.

 
Реter Konow #:

Heute werden wir mit den Aufzählungen abschließen, da wir gestern damit begonnen haben.

Nach reiflicher Überlegung habe ich jedoch beschlossen, den Abschluss des Themas Aufzählungen zu verschieben. Um den weiteren Stoff dieses Themas zu verstehen, sind Grundkenntnisse der Sprachregeln erforderlich, über die die Leser noch nicht verfügen.

Lassen Sie uns zunächst damit fortfahren, uns mit Steuerelementen und Bindungen vertraut zu machen.

 

Bisher haben wir es in den meisten Fällen mit einer einfachen BUTTON-Schaltfläche zu tun. Jeder weiß, was eine Schaltfläche ist, sie ist selbsterklärend. Aber es lohnt sich, auf einige Details einzugehen. Das Gleiche gilt für andere Elemente, mit denen wir bereits gearbeitet haben. Wir machen es so: Zuerst gehen wir die wichtigsten Merkmale und Funktionen durch, sprechen alles ganz allgemein an, und dann gehen wir auf jedes Element einzeln ein, um es genauer zu betrachten.

Eine Schaltfläche ist also ein interaktives Element, das seinen Zustand ändert, wenn es gedrückt wird. In einer grafischen Oberfläche wird sie für verschiedene Zwecke verwendet. Meistens, um etwas ein- oder auszuschalten, manchmal aber auch, um ein Fenster aufzurufen. Die Anwendungsmöglichkeiten einer einfachen Schaltfläche sind sehr vielfältig. Sie ist ein ziemlich universelles Element.

Welche anderen Elemente haben wir in Betracht gezogen? Zum Beispiel die CHECKBOX. Warum braucht man ein Kontrollkästchen? Ein Kontrollkästchen ist notwendig, um Optionen in den Programmeinstellungen zu aktivieren, zu deaktivieren oder zu blockieren. Wenn Sie zwischen mehreren Optionen wählen müssen, eignet sich das Element R_BUTTON(Radiobutton). Allerdings unter der Voraussetzung, dass es nur wenige Optionen gibt.

Und wenn die Optionen deutlich, aber nicht übermäßig viele sind? Dann wird die Dropdown-Liste D_LIST oder die Kombinationsliste C_LIST verwendet. Der Unterschied zwischen diesen beiden Elementen ist das Vorhandensein oder Nichtvorhandensein eines Texteingabefeldes, in das der Benutzer die gewünschte Auswahl eingeben kann. D_LIST hat ein solches Feld, C_LISTnicht.

Und was macht man, wenn es zu viele Optionen im Programm gibt? Dropdown-Listen werden wegen ihrer geringen Größe unkomfortabel. Die Lösung sind lange, scrollbare Blätter in großen Fenstern. Sie können Beispiele in den Fenstern Schrift, Sounds und Rahmen des Designers sehen.

Aber diese Listen brauchen eine Bildlaufleiste, weil sie sehr lang sind. Und deshalb gibt es ein spezielles Element für sie."Sichtfeld" V_BOX. Ein einfaches Element mit zwei Bildlaufleisten und einem eigenen Canvas. Übrigens kann es sowohl vertikal als auch horizontal gescrollt werden. Und die Größe der Leinwand wird automatisch durch die Berechnung des platzierten Inhalts bestimmt.

Listenelemente werden als L_ITEM bezeichnet, was die Abkürzung für"List Item" ist. Sie werden in einer separaten Gruppe gesammelt und auf dem Canvas des angegebenen Sichtfelds gezeichnet. Jedes Element hat den Namen eines Menüpunkts oder einer Option und wird mit einem SWITCH_ALL-Schlüsselwort umgeschaltet. Und um die Liste der L_ITEM-Elemente in das V_BOX-Übersichtsfeld einzutragen , wird das Schlüsselwort"IN" verwendet. Die Positionierung ist einfach - LEFT_TOP, 0,0,.


Als Nächstes wollen wir uns die aufgelisteten Elemente genauer und in der gleichen Reihenfolge ansehen. Wir werden über Positionierung, Zustände, Eigenschaften und Attribute sprechen.

...Und wir werden die Möglichkeiten der Anwendung im Rahmen von Händlerprogrammen betrachten.

 

Gewöhnliche Schaltfläche: BUTTON

4 Arten von Schaltflächen für Konstrukteure:

Sie hat ein relativ veraltetes Aussehen und eine einfache Funktionalität wie jede klassische Schaltfläche. Es gibt ein Icon.


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

  • Interaktive Schaltfläche I_BUTTON - interaktive Schaltfläche:

Eine schöne interaktive Schaltfläche, die sanft auf die Bewegung des Mauszeigers reagiert. Sie wird wie eine normale Schaltfläche verwendet, ist aber weniger sichtbar und hat im neutralen Zustand keine umrandeten Bereiche. Meistens ohne Text und mit einem Symbol. Meistens in quadratischer Form.


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

  • Symbolleisten-Schaltfläche (wie bei MT4) TB_BUTTON - Symbolleisten-Schaltfläche:

Hauptsächlich für die Symbolleiste in der Kopfzeile des Hauptfensters verwendet. Oft ohne Text, aber mit einem Symbol und in der Regel quadratisch geformt. Bleibt am Cursor haften, wenn man mit dem Mauszeiger darüber fährt. Ruft Fenster oder Funktionen auf. Hat einen Pfeil.


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

  • D_BUTTON - Dialog-Schaltfläche:

Steht am unteren Rand von Dialogfeldern, um mit dem Benutzer zu interagieren. Sie trägt solche Texte wie "Ok", "Ja", "Nein", "Abbrechen", "Fortfahren", "Akzeptieren", "Weiter", "Zurück", "Überspringen", "Bestätigen", "Öffnen", "Schließen", .... und andere Wörter dieses Genres.


Sie können für alle Schaltflächen Symbole und Text sowie die Farbe für die verschiedenen Zustände festlegen.

Gleichzeitig können die Schaltflächen den Text und das Symbol je nach Zustand ändern. Im neutralen Zustand ist ein Text oder ein Icon, im aktivierten Zustand ein anderes.


Ein Beispiel:

Alle Tasten sind gedrückt und befinden sich im neutralen Zustand:


Und jetzt haben wir sie gedrückt und sie haben Text und Icon geändert: (außer der Dialog-Schaltfläche, da sie das Fenster schließt, nachdem sie gedrückt wurde und nicht notwendig ist)


Der Text der interaktiven Schaltfläche überlagert das Symbol, aber das ist so gewollt, weil es möglich ist, das Symbol und den Text innerhalb der Schaltfläche zu positionieren.

 

So können Schaltflächen ihren Text ändern, wenn sie angeklickt werden. Außerdem sind Text und Schaltflächenname unterschiedliche Dinge. Der Text für den neutralen Zustand kann mit dem Wort N_TEXT festgelegt werden, und anstelle des Schaltflächennamens wird ein anderer Benutzertext angezeigt.

Das Gleiche gilt für das Symbol. Sie können ein Symbol für den neutralen Zustand und für den aktiven Zustand angeben.


Code:

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, "Buttons group",

__, BUTTON,   "Button 1", W, 120,_,H, 50,   D_BUTTON, "D button 1",   W, 120,_,H, 50,

__, I_BUTTON, "I Button", W, 120,_,H, 50,   TB_BUTTON, "TB button 1", W, 120,_,H, 50, 

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Button 1",    N_TEXT,  "Neutral state",

"Button 1",    A_TEXT,  "Active state",

"Button 1",    N_LABEL, "::Images\\16x16\\About.bmp",

"Button 1",    A_LABEL, "::Images\\16x16\\3d bar chart.bmp",

"Button 1",    FIC,
//----------------------------

//----------------------------
"I Button",    N_TEXT,  "Neutral", 

"I Button",    A_TEXT,  "Active",

"I Button",    N_LABEL, "::Images\\16x16\\Accounting.bmp",

"I Button",    A_LABEL, "::Images\\16x16\\Address book.bmp", 

"I Button",    FIC,
//----------------------------

//----------------------------
"D button 1",    N_TEXT,  "Also Neutral",

"D button 1",    A_TEXT,  "Also Active",

"D button 1",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",

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

//----------------------------
"TB button 1",    N_TEXT,  "TB Neutral",

"TB button 1",    A_TEXT,  "TB Active",

"TB button 1",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",

"TB button 1",    A_LABEL,  "::Images\\16x16\\Address book.bmp", 

"TB Button 1",    FIC,

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

Eine der Hauptfunktionen von Schaltflächen ist vielleicht der Aufruf von Fenstern. Drücken Sie die Schaltfläche in einem Fenster und ein anderes Fenster öffnet sich.

Wie wird das gemacht?

Auf zwei Arten:

  • Wir schreiben das Schlüsselwort OPENS_WINDOW in die Eigenschaften der Schaltfläche und dann den Namen des aufzurufenden Fensters.
  • Oder man benennt die Schaltfläche genauso wie das aufzurufende Fenster und blendet den Text der Schaltfläche aus. Oder Sie überschreiben den Text der Schaltfläche mit den Worten N_TEXT und A_TEXT.

Wichtig: Wenn die Namen von Schaltflächen oder Menüpunkten mit den Namen von Fenstern übereinstimmen, werden diese Fenster geöffnet, wenn Sie auf diese Punkte klicken.

//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW, 
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "Just a window",
//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//------------------------------------------------------ 
/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  
//------------------------------------------------------

END_WINDOW,
//----------------------------------------------------------------------------------




//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, "Buttons group",

__, BUTTON,  "Just a window", W, 150, //the button WILL call the window due to sharing the same name.   

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Just a window",    N_TEXT,  "Press to open",//redefine text on the button

"Just a window",    N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------


Und die zweite Variante:

//+------------------------------------------------------------------+
//|                                              My first window.mqh |
//+------------------------------------------------------------------+
//DECLARE A NEW WINDOW
//----------------------------------------------------------------------------------
NEW_WINDOW, 
 
//------------------------------------------------------
/*SET WINDOW TYPE*/         W_TYPE, SETTINGS,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/     W_NAME, "Just a window",
//------------------------------------------------------
/*SET WINDOW'S ADDITIONAL PROPERTIES*/   
//------------------------------------------------------ 
/*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*/  
//------------------------------------------------------

END_WINDOW,
//----------------------------------------------------------------------------------




//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, "Buttons group",

__, BUTTON,  "Press to open", W, 150,   

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Press to open", OPENS_WINDOW, "Just a window",//opens the window by the keyword 

"Press to open", N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------
//FINISH THE WINDOW BY KEYWORDS END_WINDOW,
//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------



Ergebnis:


 

Und als letztes heute:

Ausblenden des Schaltflächentextes mit c.words

_,text, IS_HIDDEN,

Beispiel:


Code:

//------------------------------------------------------
GROUP, "Buttons group",

__, BUTTON,  "Press to open", W, 150, _,text, IS_HIDDEN,  

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 
//----------------------------
"Press to open", OPENS_WINDOW, "Just a window",

"Press to open", N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------