Обсуждение статьи "Графические интерфейсы V: Элемент "Комбинированный список" (Глава 3)"

 

Опубликована статья Графические интерфейсы V: Элемент "Комбинированный список" (Глава 3):

В первых двух главах пятой части серии о графических интерфейсах были разработаны классы для создания полосы прокрутки и списка. В этой главе рассмотрим класс для создания такого элемента управления, как «Комбинированный список». Это тоже составной элемент, в числе частей которого есть элементы, рассмотренные в первых двух главах пятой части.

Комбинированный список или комбо-бокс (combobox) это составной элемент управления, основными частями которого являются (1) кнопка и (2) список. Список в этом случае является выпадающим элементом и вызывается посредством нажатия на кнопку. После выбора пункта из списка его текст отображается в кнопке, а список скрывается. Когда в программе есть множество многовариантных параметров, то комбо-боксы будут весьма кстати, так как позволяют создать компактный графический интерфейс.

В списке ниже перечислены все объекты-примитивы, из которых будет собираться элемент «Комбо-бокс».

  1. Фон элемента
  2. Надпись (описание элемента)
  3. Кнопка
  4. Признак выпадающего списка

Рис. 1. Составные части элемента «Комбо-бокс».

Рис. 1. Составные части элемента «Комбо-бокс».

Автор: Anatoli Kazharski

 

Классно, пользительные вещи вытворяешь ;)

Анатоль, мне кажется есть некие доработки, которые можно было бы внести. Например, когда курсор находится над любым из списков, рука сама тянется к колёсику для прокрутки списка, но, увы, прокручиваем график. А ведь у тебя есть отслеживание прокрутки графика. Может лучше не убирать список, а именно его прокручивать, временно отключив прокрутку графика, как считаешь?

И ещё: так и не понял, есть ли возможность не выводить описание списка, которое слева от кнопки списка находится? Оно не всегда нужно.

 

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

Например, в 3D Studio MAX, например, есть реакция на на зажатую левую кнопку мыши и её перемещение вверх-вниз над формой инкремента/декремента какого-либо значения. Щёлкнул по стрелке вверх или вниз и, не отпуская кнопки ведёшь мышой вверх или вниз, а значение в окошке формы либо увеличивается, либо уменьшается в зависимости от направления движения мыши.

 
Artyom Trishkin:

Анатоль, мне кажется есть некие доработки, которые можно было бы внести. Например, когда курсор находится над любым из списков, рука сама тянется к колёсику для прокрутки списка, но, увы, прокручиваем график. А ведь у тебя есть отслеживание прокрутки графика. Может лучше не убирать список, а именно его прокручивать, временно отключив прокрутку графика, как считаешь?

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

И ещё: так и не понял, есть ли возможность не выводить описание списка, которое слева от кнопки списка находится? Оно не всегда нужно. 

Да, это можно. При создании элемента в метод CComboBox::LabelText() передать пустую строку ("").

Например, в 3D Studio MAX, например, есть реакция на на зажатую левую кнопку мыши и её перемещение вверх-вниз над формой инкремента/декремента какого-либо значения. Щёлкнул по стрелке вверх или вниз и, не отпуская кнопки ведёшь мышой вверх или вниз, а значение в окошке формы либо увеличивается, либо уменьшается в зависимости от направления движения мыши.

В следующей статье будет представлен ряд элементов управления, в числе которых есть элемент "Поле ввода". Там в текущей реализации есть ускоренная прокрутка. То есть зажатие левой кнопки мыши над кнопками инкремента/декремента и удержание курсора в области этих кнопок приводит к ускоренной перемотке значений.

 

Скопировал фсе в mql4 папку, советник TestLibrary серый и не открывается. Пишет в экспертах "cannot open file".

Работает ли в режиме теста? Есть ли смысл разбираться, почему не запускается, так как очень важно чтобы работало в режиме тестирования

 
Evgeniy Scherbina:

Скопировал фсе в mql4 папку, советник TestLibrary серый и не открывается. Пишет в экспертах "cannot open file".

Работает ли в режиме теста? Есть ли смысл разбираться, почему не запускается, так как очень важно чтобы работало в режиме тестирования

Версия библиотеки для MT4 больше не поддерживается мной.

Последнюю версию для MT5 на текущий момент можно скачать в этой статье: Графические интерфейсы X: Элемент "Время", элемент "Список из чекбоксов" и сортировка таблицы (build 6)

На текущей стадии разработки тесты в тестере не проводились и ещё долго не будут проводиться. 

 
Evgeniy Scherbina:

Скопировал фсе в mql4 папку, советник TestLibrary серый и не открывается. Пишет в экспертах "cannot open file".

Работает ли в режиме теста? Есть ли смысл разбираться, почему не запускается, так как очень важно чтобы работало в режиме тестирования

В режиме визуализации графику выводит, но нет никакой интерактивности.
 
Artyom Trishkin:
В режиме визуализации графику выводит, но нет никакой интерактивности.
Для меня это главное. Своими силами я сделал раскрывающийся список, который реагирует на щелчки в режиме теста. Но в режиме теста нет подсветки при наведении мышью на элемент. В реальной торговли все гут. Выходит, что в режиме теста не работает только событие ON_MOUSE_MOVE.
 
Anatoli Kazharski:

Версия библиотеки для MT4 больше не поддерживается мной.

какая последняя версия Библиотеки, работающая в MT4 ?

 ——————————

как ПОСЛЕ создания изменить количество пунктов, количество отображаемых пунктов и их значения? например было 3 (отображение 3), делаем 4 (отображение 4)

   if(id==CHARTEVENT_CUSTOM+...){ 

         m_combobox_sm.ItemsTotal(4);

         m_combobox_sm.VisibleItemsTotal(4);

         string items_text[4]={"FALSE","item 1.0","item 2.0","item 3.0"};

         for(int i=0; i<4; i++){m_combobox_sm.ValueToList(i,items_text[i]);}

   }

 
Pavel Kolchin:

какая последняя версия Библиотеки, работающая в MT4 ?

Последняя версия для MT4 в этой статье: Графические интерфейсы X: Обновления для библиотеки Easy And Fast (build 3)

как ПОСЛЕ создания изменить количество пунктов, количество отображаемых пунктов и их значения? например было 3 (отображение 3), делаем 4 (отображение 4)

Такая возможность появилась в последней версии библиотеки и только для MT5Графические интерфейсы X: Расширенное управление списками и таблицами. Оптимизация кода (build 7)

 
Anatoli Kazharski:

как думаете, если рассматривать версию 10.3 - можно ли в обработчике событий удалить и на этом же месте создать combobox с новыми параметрами?

Причина обращения: