Galeria de UIs escritas em MQL - página 35

 
//--------------------------
//FIRST GROUP
//--------------------------
GROUP, "Group 1",

__, CHECKBOX, "Checkbox 100",  

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------
i, CHECKBOXES, W, 120,  END,
//--------------------------
//--------------------------------------------------------------
//1. WRITE THE NAME OF THE CHECKBOX THAT WILL BLOCK THE OTHERS:
//2. WRITE KEYWORD "BLOCKS".
//3. WRITE THE NAMES OF THE ELEMENTS (OR GROUPS) IT WILL BLOCK.
//4. PUT "END" IN THE END.
//5. OR, WRITE THE NAME OF THEIR GROUP.
//--------------------------------------------------------------
"Checkbox 100", BLOCKS, "Group 2", END,
//--------------------------------------------------------------

//--------------------------
//SECOND GROUP
//--------------------------
GROUP, "Group 2",


__, H_SLIDER, "H_Slider 1", W, 120,       S_EDIT, "Textbox 1",         W, 120, 

__, C_LIST,   "Combobox 1", W, 120,       D_LIST, "Combobox 2",        W, 120, 

__, BUTTON,   "Button 1",   W,120,        D_BUTTON, "Dialog button 1", W, 120, 

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2H, "Checkbox 100", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------
//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): 

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

Vamos analisar a expressão _Y2H:

  • Y é uma coordenada
  • 2 significa "para". Indicando algo.
  • H é a abreviação de height (altura).

Y para Altura.

No sistema de coordenadas, o movimento do ponto Y do objeto ao longo de seu corpo a uma distância igual à altura do objeto (y_size) leva ao seu ponto mais baixo. A coordenada Y do objeto a ser encaixado deve descer ao longo da altura do objeto a ser encaixado e terminar em sua parte inferior. Ou seja, ela deve cobrir a distância da altura do objeto âncora, por isso a âncora é chamada de _Y2H.


2. _X2H não existe porque a coordenada X só pode ser encaixada no plano horizontal, não no plano vertical, e H representa a altura. Existe um encaixe _X2W, o que significa que a coordenada X é encaixada no ponto X + X_SIZE (Largura) do objeto especificado.


O tópico de encaixe será discutido em mais detalhes posteriormente.

 

Hoje terminaremos com as enumerações, já que começamos a falar sobre elas ontem.

 

Sobre o tema das amarrações, acrescentarei que há regras rígidas e não faz sentido tentar experimentá-las agora. Aguarde uma explicação mais completa.

Há vinculações que funcionam separadamente para grupos de elementos e há aquelas que funcionam com elementos individuais dentro de grupos. Há também associações que são adequadas para posicionar objetos dentro de elementos (como texto ou ícones).

Falaremos sobre isso mais tarde.

 
Реter Konow #:

Hoje terminaremos com as enumerações, já que começamos a falar sobre elas ontem.

Entretanto, depois de pensar cuidadosamente, decidi adiar a conclusão do tópico sobre enumerações. A compreensão do material adicional desse tópico requer conhecimento básico das regras da linguagem, que os leitores ainda não têm.

Por enquanto, vamos continuar a nos familiarizar com controles e associações.

 

Até agora, na maioria dos casos, lidamos com um simples botão BUTTON. Todo mundo sabe o que é um botão, ele é autoexplicativo. Mas vale a pena entrar em alguns detalhes. O mesmo se aplica a outros elementos com os quais trabalhamos anteriormente. Vamos fazer da seguinte maneira: primeiro, vamos examinar os principais recursos e funções, abordar tudo em termos gerais e, depois, vamos nos deter em cada elemento separadamente para uma análise mais detalhada.

Portanto, um botão é um elemento interativo que muda de estado quando pressionado. Em uma interface gráfica, é usado para diferentes finalidades. Principalmente para ligar ou desligar algo, mas às vezes para chamar uma janela. Há muitas variantes de aplicação de um simples botão. Ele é um elemento bastante universal.

Que outros elementos foram considerados? Por exemplo, CHECKBOX. Por que você precisa de uma caixa de seleção? Uma caixa de seleção é necessária para ativar, desativar ou bloquear opções nas configurações do programa. Se você precisar escolher entre várias opções, o elemento R_BUTTON(botão de rádio) é adequado. Mas desde que haja apenas algumas opções.

E se as opções forem muito grandes, mas não excessivamente grandes? Então será usada a lista suspensa D_LIST ou a lista combinada C_LIST. A diferença entre esses dois elementos é a presença ou ausência de um campo de entrada de texto no qual o usuário pode inserir a opção desejada. A D_LIST tem esse campo, a C_LISTnão.

E o que fazer quando há muitas opções no programa? As listas suspensas tornam-se incômodas devido ao seu tamanho pequeno. A solução são planilhas longas e roláveis em janelas grandes. Você pode ver exemplos nas janelas de fonte, sons e quadros do designer.

Porém, essas listas precisam de uma barra de rolagem, pois são muito longas. E é por isso que existe um elemento especial para elas."Campo de visão" V_BOX. Um elemento simples com duas barras de rolagem e sua própria tela. A propósito, sua rolagem é vertical e horizontal. E o tamanho da tela é definido automaticamente a partir do cálculo do conteúdo colocado.

Os itens de lista são chamados de L_ITEM, que é a abreviação de"List Item". Eles são reunidos em um grupo separado e desenhados na tela do campo de visão especificado. Cada item é chamado de nome de um item de menu ou opção e são alternados com uma palavra-chave SWITCH_ALL. E para inserir a lista de itens L_ITEM no campo de visão geral V_BOX, é usada a palavra-chave"IN". O posicionamento é simples - LEFT_TOP, 0,0,.


A seguir, vamos examinar os elementos listados com mais detalhes e na mesma ordem. Falaremos sobre posicionamento, estados, propriedades e atributos.

...E consideraremos as opções de aplicação no contexto dos programas do trader.

 

Botão comum: BUTTON

4 variedades de botões de construtor:

Tem uma aparência relativamente desatualizada e funcionalidade simples, como qualquer botão clássico. Há um ícone.


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

  • Botão interativo I_BUTTON - botão interativo:

Um belo botão interativo que responde suavemente ao fato de o cursor passar ou se afastar. É usado como um botão normal, mas menos visível e, em estado neutro, não tem bordas delineadas. Geralmente sem texto e com um ícone. Geralmente, tem formato quadrado.


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

  • Botão da barra de ferramentas (como no MT4) TB_BUTTON - Botão da barra de ferramentas:

Usado principalmente para a barra de ferramentas no cabeçalho da janela principal. Geralmente sem texto, mas com um ícone e, normalmente, com formato quadrado. Fica preso ao cursor quando se passa o mouse sobre ele. Chama janelas ou funções. Tem uma seta.


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

  • D_BUTTON - botão de diálogo:

Fica na parte inferior das caixas de diálogo para interagir com o usuário. Contém textos como "Ok", "Yes", "No", "Cancel", "Abort", "Continue", "Accept", "Next", "Previous", "Skip", "Confirm", "Open", "Close", .... e outras palavras desse gênero.


Você pode definir ícones e textos em todos os botões, bem como cores para diferentes estados.

Ao mesmo tempo, os botões podem mudar o texto e o ícone dependendo do estado. No estado neutro, o texto ou ícone é neutro e no estado ativado é diferente.


Por exemplo:

Todos os botões estão pressionados e em estado neutro:


E agora nós os pressionamos e eles mudaram o texto e o ícone: (exceto o botão de diálogo, pois ele fecha a janela após ser pressionado e não é necessário)


O texto do botão interativo está sobreposto ao ícone, mas foi projetado dessa forma porque é possível posicionar o ícone e o texto dentro do botão.

 

Portanto, os botões podem mudar o texto quando clicados. Além disso, o texto e o nome do botão são coisas diferentes. O texto para o estado neutro pode ser definido com a palavra N_TEXT, e outro texto do usuário aparecerá em vez do nome do botão.

O mesmo ocorre com o ícone. Você pode especificar um ícone para o estado neutro e para o estado ativo.


Código:

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,
//----------------------------------------------------------------------------------
 

Talvez uma das principais funções dos botões seja chamar janelas. Pressione o botão em uma janela e outra janela será aberta.

Como isso é feito?

De duas maneiras:

  • Escrevemos a palavra-chave OPENS_WINDOW nas propriedades do botão e, em seguida, o nome da janela a ser chamada.
  • Ou nomeamos o botão com o mesmo nome da janela que ele deve chamar e ocultamos o texto do botão. Ou substitua o texto do botão pelas palavras N_TEXT e A_TEXT.

É importante observar: a correspondência entre os nomes dos botões ou itens de menu e os nomes das janelas faz com que essas janelas sejam abertas quando você clica nesses itens.

//+------------------------------------------------------------------+
//|                                              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,
//----------------------------------------------------------------------------------


E a segunda 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,
//----------------------------------------------------------------------------------



Result: