Галерея UI написанных на MQL - страница 32

 

Общая информация о языке разметки и конструкторе.


1. Значения свойств элементов конструктора заранее предустановлены. В случае отсутствия явного определения, свойствам назначаются значения по умолчанию.


2. Интерактивное поведение элементов запрограммировано, но пользователь имеет возможность менять или отключать разные реакции. 


3. Размеры окон интерфейса вычисляются автоматически при расчете положения и размеров составных групп. Также учитываются отступы правого и нижнего краев (margins) если заданы пользователем.  


4. Длинна некоторых элементов напрямую зависит от длинны текстов. Она вычисляется автоматически если пользователь не задал явное значение. В противном случае конструктор обрезает текст выходящий за пределы элемента и ставит многоточие, для сохранения значения юзера. К таким элементам относится чекбокс, радиокнопка, текстовая метка, горизонтальная и вертикальная вкладка.


5. При построении окна конструктор стремиться к табличной раскладке и поддержанию симметрии в группах элементов. Чекбоксы или элементы подобного типа автоматически выравниваются под общее значение длинны.


6. Приверженность конструктора табличной раскладке значительно облегчает построение интерфейса, а для большей гибкости придумано разбитие элементов на группы с расположением с помощью флагов и привязок.


7. Ограничения на количество элементов в одном окне нет.


8. Ограничения на количество окон внутри одного проекта нет.


9. Наличие таскбара (панель задач) и контекстного меню, обязательно для ВСЕХ проектов. Однако явление таскбара можно отключить если закомментировать комманду OPEN_ON_INIT (OOI) в его файле. Тогда возникнет необходимость отключить свойство минимизации окон (такая возможность есть).


10. В правой части пользовательского таскбара пользователь может устанавливать кнопки для вызова своих окон.


11. У всех элементов может возникать подсказка с именем при наведении курсора. Для этого нужно написать комманду в свойствах _,SHOW_NAMETIP.


12. Контекстное меню конструктора или пользователя является на дабл-клике на график.


13. Вспомогательные окна конструкора облегчают поиск и выбор атрибутов элементов при задании рамок, цветов, шрифтов, иконок и звуков.


14. При написании кода на последнем билде требуется компилировать код разметки и потом компилировать индикатор KIB-source.mq5, иначе возникает ошибка в виде белого экрана и зависания (на старом билде 2470 такой проблемы нет).


Продолжение следует...

 
Далее изучим раскладку элементов при построении группы.
 

Позиционирование группы в окне:


Установка отступов окна справа и снизу:

0.


1.

2.



Установка гэпов между элементами:

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...
 

Код:

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

В продолжении темы раскладки элементов.  С кнопками все ясно, потому что они имеют либо размеры по умолчанию, либо по определению юзера. Но с элементами длинна которых привязана к длинне текста все неоднозначно. Ниже привожу примеры с чекбоксами и радиокнопками:

1. Имена чекбоксов и радиокнопок почти равны.


2. Одна радиокнопка значительно длиннее остальных. Они становятся такой же длинны:


3. Во второй колонке средний чекбокс значительно длиннее. Другие принимают его размер:


4. Явная установка длинны чекбоксов и радиокнопок приводит к автоматическому сокращению выходящего за пределы текста.


 
Код варианта 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,
//--------------------------

Код варианта 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,
//--------------------------
 
Фиксируется ли "END " при установке конца набора атрибутов элемента?
 
hini #:
Фиксируется ли "END " при установке конца набора атрибутов элемента?
Не уверен что точно понял вопрос, но если речь о об обычной (не массовой) установке свойств одного элемента внутри или вне группы, то нет. Ставить не нужно. Но при множественной инициализации свойств (как на примере выше), ставить END в конце строки перечисления необходимо.

 "ЕND"  ставится в конце нескольких типов перечислений о которых я расскажу позже. Но в кратце:

1. Перечисление общих свойств однородных элементов внутри конкретной группы, один из типов перечеслений в конце которого ставится "END". 

2. Перечисление блокируемых элементов.

3. Перечисление блокируемых окон.

4. Перечисление переключаемых элементов.

5. Перечисление синхронизируемых элементов (имеется ввиду их параметр).


 
6. Еще одно перечисление в конце которого ставится "END" - IS_APPEARANCE_CONTROLLER.

 Перечисляются элементы или группы элементов явлением которых управляет какой либо главный элемент назначаемый пользователем.
 

С большим сожалением не обнаружил никаких упоминаний о рисовании элементов прямо на закрашенном канвасе, закрыв весь график. Другими словами - одно окно "full screen", без рамки и кнопок закрытия и пр.

Это то, что мне и нужно. Не панельки поверх графика.

Если это не реализовано, то для Вас это нетрудно. Добавить возможность открытия окна в размер графика и без рамки.