Классно, пользительные вещи вытворяешь ;)
Анатоль, мне кажется есть некие доработки, которые можно было бы внести. Например, когда курсор находится над любым из списков, рука сама тянется к колёсику для прокрутки списка, но, увы, прокручиваем график. А ведь у тебя есть отслеживание прокрутки графика. Может лучше не убирать список, а именно его прокручивать, временно отключив прокрутку графика, как считаешь?
И ещё: так и не понял, есть ли возможность не выводить описание списка, которое слева от кнопки списка находится? Оно не всегда нужно.
Ну или вообще кардинально - если главное окно программы в фокусе, то отрубить прокрутку графика, а там уже по месту определять, нужно что-либо прокручивать от колёсика, или не реагировать на него...
Например, в 3D Studio MAX, например, есть реакция на на зажатую левую кнопку мыши и её перемещение вверх-вниз над формой инкремента/декремента какого-либо значения. Щёлкнул по стрелке вверх или вниз и, не отпуская кнопки ведёшь мышой вверх или вниз, а значение в окошке формы либо увеличивается, либо уменьшается в зависимости от направления движения мыши.
Анатоль, мне кажется есть некие доработки, которые можно было бы внести. Например, когда курсор находится над любым из списков, рука сама тянется к колёсику для прокрутки списка, но, увы, прокручиваем график. А ведь у тебя есть отслеживание прокрутки графика. Может лучше не убирать список, а именно его прокручивать, временно отключив прокрутку графика, как считаешь?
Сейчас, насколько я знаю, средствами MQL можно отследить, нажата ли средняя кнопка мыши. Но отследить прокручивается ли она, пока нельзя.
И ещё: так и не понял, есть ли возможность не выводить описание списка, которое слева от кнопки списка находится? Оно не всегда нужно.
Да, это можно. При создании элемента в метод CComboBox::LabelText() передать пустую строку ("").
Например, в 3D Studio MAX, например, есть реакция на на зажатую левую кнопку мыши и её перемещение вверх-вниз над формой инкремента/декремента какого-либо значения. Щёлкнул по стрелке вверх или вниз и, не отпуская кнопки ведёшь мышой вверх или вниз, а значение в окошке формы либо увеличивается, либо уменьшается в зависимости от направления движения мыши.
В следующей статье будет представлен ряд элементов управления, в числе которых есть элемент "Поле ввода". Там в текущей реализации есть ускоренная прокрутка. То есть зажатие левой кнопки мыши над кнопками инкремента/декремента и удержание курсора в области этих кнопок приводит к ускоренной перемотке значений.
//+------------------------------------------------------------------+ //|ComboBox.mqh | //| Copyright 2015, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #include "Element.mqh" #include "Window.mqh" #include "ListView.mqh" //+------------------------------------------------------------------+ //| Êëàññ äëÿ ñîçäàíèÿ êîìáèíèðîâàííîãî ñïèñêà | //+------------------------------------------------------------------+ class CComboBox : public CElement { private: //--- Óêàçàòåëü íà ôîðìó, ê êîòîðîé ýëåìåíò ïðèñîåäèí¸í CWim_buttonndow *m_wnd; //--- Îáúåêòû äëÿ ñîçäàíèÿ êîìáî-áîêñà CRectLabel m_area;По какой причине комментарии больше не на английском?
По какой причине комментарии больше не на английском?
У меня то же самое, и я думаю, что в настоящее время у них есть две причины.
1. Некоторые проблемы, которые все еще необходимо исправить (особенно в MT4 !)
2. В настоящее время нет человека, который мог бы перевести их на английский. Для меня также непонятно, почему основные комментарии не на английском. Но пока функции объявлены на английском, и большинство примеров, как выше, доступны на английском, это не имеет значения.
Опубликована новая статья Graphical Interfaces V: The Combobox Control (Chapter 3):
Автор: Анатолий Кажарский
Хорошая работа со статьями. Я наслаждаюсь следующей серией статей. Не могли бы вы проверить SplitButton.mqh строку 90? Я получаю ошибку
return - cannot convert from const pointer to nonconst pointer.
[WIN7 64bits - MetaTrader5 build 1472]
Странное поведение SplitString с ComboBox.
Я создал combobox для контроля sl и tp для ордера, но когда я попытался получить выбранный элемент, возникла проблема.
Когда пользователь нажимает на кнопки sell или buy, программа получает выбранный элемент из combobox и рассчитывает sl и tp для ордера.
Когда я запускаю его в режиме отладки (F5), проблемы нет. Но когда я перетаскиваю его из списка советников на график, проблема появляется.
Похоже, что библиотека EasyAndFast переопределяет каким-то образом функции SplitString, или PrintFormat, или StringToDouble, или что-то в этом роде. Но я не уверен.
Вот мой пример:
//| Создает комбобокс TP:SL|
//+------------------------------------------------------------------+
bool CProgram::CreateTPSLComboBox(const int x_gap, const int y_gap, const string text) {
// Общее количество элементов в списке
#define ITEMS_TOTAL1 4
// Передайте объект панели
_tpslCombobox.WindowPointer(_mainWindow);
// Прикрепите к первой вкладке
_mainTabs.AddToElementsArray(0, _tpslCombobox);
// Координаты
int x = _mainWindow.X() + x_gap;
int y = _mainWindow.Y() + y_gap;
// Массив значений элементов в представлении списка
string items_text[ITEMS_TOTAL1] = {"2:4", "2:3", "3:4", "0:0"};
// Установите свойства перед созданием
_tpslCombobox.XSize(90);
_tpslCombobox.YSize(18);
_tpslCombobox.LabelText(text);
_tpslCombobox.ButtonXSize(45);
_tpslCombobox.ItemsTotal(ITEMS_TOTAL1);
_tpslCombobox.VisibleItemsTotal(4);
_tpslCombobox.AreaColor(clrWhite);
// Храните значения элементов в представлении списка combobox
for(int i = 0; i < ITEMS_TOTAL1; i++)
_tpslCombobox.ValueToList(i, items_text[i]);
// Получите указатель вида списка
CListView *lv = _tpslCombobox.GetListViewPointer();
// Установите свойства представления списка
lv.LightsHover(true);
lv.SelectedItemByIndex(lv.SelectedItemIndex() == WRONG_VALUE ? 0 : lv.SelectedItemIndex());
// Создайте элемент управления
if(!_tpslCombobox.CreateComboBox(m_chart_id, m_subwin, x, y))
return(false);
// Добавьте объект в общий массив групп объектов
CWndContainer::AddToElementsArray(0, _tpslCombobox);
return(true);
}
...
//+------------------------------------------------------------------+
//| Функция продажи |
//+------------------------------------------------------------------+
void CProgram::Sell() {
string sep = ":";
ushort usep;
usep = StringGetCharacter(sep, 0);
string s[];
double tp = 0.0;
double sl = 0.0;
if(StringSplit(_tpslCombobox.ButtonText(), usep, s) == 2) {
PrintFormat("s01: %s - s02: %s", s[0], s[1]); // output: s01: 2 - s02: 4
tp = StringToDouble(s[0]);
sl = StringToDouble(s[1]);
}
PrintFormat("tp: %.2f - sl: %.2f", tp, sl); // output: tp: 2.00 - sl: 2.00
...
Вывод: "tp:2.00 - sl: 2.00" должно быть "tp:2.00 - sl: 4.00".
Но опять же, проблема возникает только тогда, когда я перетаскиваю на график. Когда я запускаю его в режиме отладки, все в порядке.
Что посоветуете?
UPDATE:
Похоже, что проблема в MetaTrader 5, а не конкретно в библиотеке EasyAndFast.
Вот тест:
//|тест.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Функция запуска программы сценария|
//+------------------------------------------------------------------+
void OnStart()
{
//---
string sep = ":";
ushort usep;
usep = StringGetCharacter(sep, 0);
string s[];
double tp = 0.0;
double sl = 0.0;
if(StringSplit("2:4", usep, s) == 2) {
tp = StringToDouble(s[0]);
sl = StringToDouble(s[1]);
}
PrintFormat("tp: %.2f - sl: %.2f", tp, sl);
}
//+------------------------------------------------------------------+
Вывод: "tp: 2.00 - sl: 2.00" при перетаскивании скрипта на график.
Если кто-то еще подтвердит это, я сообщу в ServiceDesk.
Спасибо.
[WIN7 64bits - MetaTrader5 build 1472]
Скопировал фсе в mql4 папку, советник TestLibrary серый и не открывается. Пишет в экспертах "cannot open file".
Работает ли в режиме теста? Есть ли смысл разбираться, почему не запускается, так как очень важно чтобы работало в режиме тестирования.
Скопировал фсе в mql4 папку, советник TestLibrary серый и не открывается. Пишет в экспертах "cannot open file".
Работает ли в режиме теста? Есть ли смысл разбираться, почему не запускается, так как очень важно чтобы работало в режиме тестирования.
Версия библиотеки для MT4 больше не поддерживается мной.
Последнюю версию для MT5 на текущий момент можно скачать в этой статье: Графические интерфейсы X: Элемент "Время", элемент "Список из чекбоксов" и сортировка таблицы (build 6)
На текущей стадии разработки тесты в тестере не проводились и ещё долго не будут проводиться.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Графические интерфейсы V: Элемент "Комбинированный список" (Глава 3):
В первых двух главах пятой части серии о графических интерфейсах были разработаны классы для создания полосы прокрутки и списка. В этой главе рассмотрим класс для создания такого элемента управления, как «Комбинированный список». Это тоже составной элемент, в числе частей которого есть элементы, рассмотренные в первых двух главах пятой части.
Комбинированный список или комбо-бокс (combobox) это составной элемент управления, основными частями которого являются (1) кнопка и (2) список. Список в этом случае является выпадающим элементом и вызывается посредством нажатия на кнопку. После выбора пункта из списка его текст отображается в кнопке, а список скрывается. Когда в программе есть множество многовариантных параметров, то комбо-боксы будут весьма кстати, так как позволяют создать компактный графический интерфейс.
В списке ниже перечислены все объекты-примитивы, из которых будет собираться элемент «Комбо-бокс».
Рис. 1. Составные части элемента «Комбо-бокс».
Автор: Anatoli Kazharski