Создание панелей и др. для работы с графиком

 

Добавляйте что есть интересное для обсуждения, исправления ошибок и возможно добавления функционала

позже добавлю торговую панель с минимальным функционалом(), и кастомное отображение сделок на графике


Панель для перемещения графика в заданную дату

Файлы:
 

Как раз проблема с панельками из стандартной библиотеки появилась.
У пользователя с монитором с высокой плотностью пикселей шрифты автоматически увеличились примерно в 1.7 раза, а панелька осталась в размерах обычного монитора (я на таком и разрабатывал панель):

Сейчас планирую через инпут вводить множитель и пересчитывать размеры панели, кнопок их отступы и т.д.

Есть ли возможность автоматически определить какой множитель надо применять. Чтобы люди видя такое не гадали, что надо править какой-то инпут, а чтобы сразу все было красиво.

Дополнительные проблемы - видно,  что в заголовке щрифт крупнее. Длину смогу увеличить, а высоту заголовка видимо - нет. Значки видимо останутся в своем размере и наверное чекбоксы, радиобоксы, полосы прокрутки и т.д.

 
Aleksei Kuznetsov #:

Как раз проблема с панельками из стандартной библиотеки появилась.
У пользователя с монитором с высокой плотностью пикселей. Шрифты автоматически увеличились примерно в 1.7 раза, а менюшка осталась в размерах обычного монитора (я на таком и разрабатывал панель):

Сейчас планирую через инпут вводить множитель и пересчитывать размеры панели, кнопок их отступы и т.д.

Есть ли возможность автоматически определить какой множитель надо применять. Чтобы люди видя такое не гадали, что надо править какой-то инпут, а чтобы сразу все было красиво.

Дополнительные проблемы - видно,  что в заголовке щрифт крупнее. Длину смогу увеличить, а высоту заголовка видимо - нет. Значки видимо останутся в своем размере и наверное чекбоксы, радиобоксы, полосы прокрутки и т.д.

Tашел TerminalInfoInteger(TERMINAL_SCREEN_DPI) - у меня = 96.

Видимо надо множитель размеров брать как

k = TerminalInfoInteger(TERMINAL_SCREEN_DPI) / 96;

Попробую - возможно будет почти красиво...

 

После увеличения всего в 2,5 раза (240 DPI / 96 DPI) получилось почти как на обычном мониторе. Только элементы которые сделаны картинками (-, крестик, чекбоксы, прокрутка) остались мелкими. Ну хотя бы всё работает...

Оригинал на 96 DPI:

Версия для 240 DPI:


С размерами элементов всё просто - все отступы, ширины и высоты умножаем на 2,5.
Для шапки и чекбоксов пришлось переопределять дефайны

#include <Controls\Defines.mqh>

#ifdef K_DPI_2_5 //для мониторов с высокой плотностью пикселей. Стандартное DPI=96, у них 240 в 2.5 раза больше.
   #undef  CONTROLS_DIALOG_CAPTION_HEIGHT  //22
   #undef  CONTROLS_DIALOG_BUTTON_OFF      //3
   #undef  CONTROLS_BUTTON_SIZE            //16
   #undef  CONTROLS_LIST_ITEM_HEIGHT       //18
   #undef  CONTROLS_CHECK_BUTTON_Y_OFF     //3
   //#undef  CONTROLS_CHECK_LABEL_Y_OFF    //0
   #undef  CONTROLS_SCROLL_SIZE            //18
   
   // переопределяем новые значения
   #define CONTROLS_DIALOG_CAPTION_HEIGHT   55  // высота заголовка окна 22
   #define CONTROLS_DIALOG_BUTTON_OFF       8   // отступ/позиция кнопок (крестик, свернуть) 3
   #define CONTROLS_BUTTON_SIZE             40  // default size of button (16 x 16) 16
   
   #define CONTROLS_LIST_ITEM_HEIGHT        45  // height of list item (for ListView) 18
   #define CONTROLS_CHECK_BUTTON_Y_OFF      16   // Y offset of check button (for CheckBox) 3
   //#define CONTROLS_CHECK_LABEL_Y_OFF     0   // Y offset of label (for CheckBox) 0
   #define CONTROLS_SCROLL_SIZE             45  // default lateral size of scrollbar
#endif 
 

Панель для перемещения графика в заданную дату 

v1.01

Исправил выбор значений: теперь день не выбрать, пропустив месяц (выход за массив был)

Файлы: