Следующее обновление для этого класса (CTabs) будет "Режим многострочных вкладок".
Как здесь (в несколько рядов) :
Супер. Жаль, что пока таблицы и списки - лишь таблицы и списки. Пока практичестки служат лишь визуальным оформлением данных без какого-либо интерактива.
Хотелось бы, конечно брать, и выделять нужные столбцы/строки списков/таблиц, и проводить с ними некие манипуляции - например: есть список, поставили чекбоксы, или вообще целиком выделили нужные строки, и вывели в отдельном окне общие данные по выбранным строкам... Вот нечто такое было бы супер :)
Впрочем, чтобы можно было сиё делать, нужно добавить методы для манипуляций с этими данными. Может оно уже есть, да я не знаю?
Супер. Жаль, что пока таблицы и списки - лишь таблицы и списки. Пока практичестки служат лишь визуальным оформлением данных без какого-либо интерактива.
...
По большей части из перечисленного всё это есть.
Выбирая в списках (CListView) пункт генерируется событие, по которому можно определить, в каком именно элементе был осуществлён выбор и какое текущее значение выбрано.
Тоже самое в таблицах (CTable). При выделении ряда таблицы генерируется событие, в параметрах которого содержится индекс ряда (параметр dparam), по которому можно потом получить значения в ячейках этого ряда с помощью метода CTable::GetValue():
//+------------------------------------------------------------------+//| Возвращает значение по указанным индексам | //+------------------------------------------------------------------+string CTable::GetValue(constint column_index,constint row_index)
{
//--- Проверка на выход из диапазона столбцовint csize=::ArraySize(m_vcolumns);
if(csize<1 || column_index<0 || column_index>=csize)
return("");
//--- Проверка на выход из диапазона рядовint rsize=::ArraySize(m_vcolumns[column_index].m_vrows);
if(rsize<1 || row_index<0 || row_index>=rsize)
return("");
//--- Вернуть значениеreturn(m_vcolumns[column_index].m_vrows[row_index]);
}
//---
А в режиме редактирования ячеек таблицы генерируется событие, в параметрах которого (параметр sparam) можно получить строку с номером столбца, с номером ряда и текущим значением в редактируемой ячейке, в формате "column_row_text".
Artyom Trishkin:
Хотелось бы, конечно брать, и выделять нужные столбцы/строки списков/таблиц, и проводить с ними некие манипуляции - например: есть список, поставили чекбоксы, или вообще целиком выделили нужные строки, и вывели в отдельном окне общие данные по выбранным строкам... Вот нечто такое было бы супер :)
Для списков с чек-боксами и радио-кнопками сделаю потом отдельные классы.
Здравствуйте. Очень хорошая статья, но на данный момент у меня есть несколько вопросов:
1.) Я не нашел информации, как я могу добавить простые элементы управления CLabel или CEdit на форму. (Из objects.mqh) У них нет функции типа WindowPointer(). Я могу создать эти объекты, но не могу прикрепить их к окну.
Толь, что-то никак не могу победить... Есть два окна. Из первого - из главного меню открываем второе окно, в котором есть 4-ре вкладки с иконками. К каждой вкладке привязана своя таблица.
Проблема вот в чём: при первом открытии окна всегда видна самая последняя построенная таблица, и не важно, что перед открытием окна вкладка переключается программно на нужную - она выделена как и полагается, но таблица на ней не та, которая к ней привязана, а самая последняя.
С вкладками типа CTabs работает правильно. А для вкладок CIconTabs пока не делал персональные массивы в движке библиотеки и автоматический показ содержимого выделенной вкладки при открытии диалогового окна. В следующем обновлении будет исправлено.
Но как временное решение уже сейчас можно отслеживать открытие диалогового окна в пользовательском классе и обновлять вкладки, как показано в листинге ниже:
С вкладками типа CTabs работает правильно. А для вкладок CIconTabs пока не делал персональные массивы в движке библиотеки и автоматический показ содержимого выделенной вкладки при открытии диалогового окна. В следующем обновлении будет исправлено.
Но как временное решение уже сейчас можно отслеживать открытие диалогового окна в пользовательском классе и обновлять вкладки, как показано в листинге ниже:
bool CProgram::CreatetrailStop(constint x_gap, constint y_gap, string text)
{
//--- Сохраните указатель на главный элемент
m_StartTS.WindowPointer(m_window);
//--- Координатыint x = m_window.X() + x_gap;
int y = m_window.Y() + y_gap;
//--- Резерв для вкладки
m_tabs.AddToElementsArray(1, m_StartTS);
//--- Свойства
m_StartTS.XSize(95);
m_StartTS.YSize(15);
m_StartTS.EditXSize(40);
m_StartTS.MinValue(0.01);
m_StartTS.StepValue(0.01);
m_StartTS.SetDigits(1);
m_StartTS.SetValue(NormalizeDouble(whenToTrail,1));
m_StartTS.ResetMode(true);
//--- Создайте элемент управленияif(!m_StartTS.CreateSpinEdit(m_chart_id, m_subwin, text, x, y))
return(false);
//--- Добавьте объект в общий массив групп объектов
CWndContainer::AddToElementsArray(0, m_StartTS);
return(true);
}
этот объект не привязан к панели, но находится на графике.
Конечно. )
Следующее обновление для этого класса (CTabs) будет "Режим многострочных вкладок".
Как здесь (в несколько рядов) :
Супер. Жаль, что пока таблицы и списки - лишь таблицы и списки. Пока практичестки служат лишь визуальным оформлением данных без какого-либо интерактива.
Хотелось бы, конечно брать, и выделять нужные столбцы/строки списков/таблиц, и проводить с ними некие манипуляции - например: есть список, поставили чекбоксы, или вообще целиком выделили нужные строки, и вывели в отдельном окне общие данные по выбранным строкам... Вот нечто такое было бы супер :)
Впрочем, чтобы можно было сиё делать, нужно добавить методы для манипуляций с этими данными. Может оно уже есть, да я не знаю?
Супер. Жаль, что пока таблицы и списки - лишь таблицы и списки. Пока практичестки служат лишь визуальным оформлением данных без какого-либо интерактива.
...
По большей части из перечисленного всё это есть.
Выбирая в списках (CListView) пункт генерируется событие, по которому можно определить, в каком именно элементе был осуществлён выбор и какое текущее значение выбрано.
Тоже самое в таблицах (CTable). При выделении ряда таблицы генерируется событие, в параметрах которого содержится индекс ряда (параметр dparam), по которому можно потом получить значения в ячейках этого ряда с помощью метода CTable::GetValue():
//---
А в режиме редактирования ячеек таблицы генерируется событие, в параметрах которого (параметр sparam) можно получить строку с номером столбца, с номером ряда и текущим значением в редактируемой ячейке, в формате "column_row_text".
Хотелось бы, конечно брать, и выделять нужные столбцы/строки списков/таблиц, и проводить с ними некие манипуляции - например: есть список, поставили чекбоксы, или вообще целиком выделили нужные строки, и вывели в отдельном окне общие данные по выбранным строкам... Вот нечто такое было бы супер :)
Для списков с чек-боксами и радио-кнопками сделаю потом отдельные классы.
1.)
Я не нашел информации, как я могу добавить простые элементы управления CLabel или CEdit на форму. (Из objects.mqh)
У них нет функции типа WindowPointer().
Я могу создать эти объекты, но не могу прикрепить их к окну.
не работает в этом случае...
2.)
Является ли CComboBox статическим объектом. Можно ли изменить список элементов в
ComboBox-Listview после создания ComboBox?
Спасибо!
Толь, что-то никак не могу победить... Есть два окна. Из первого - из главного меню открываем второе окно, в котором есть 4-ре вкладки с иконками. К каждой вкладке привязана своя таблица.
Проблема вот в чём: при первом открытии окна всегда видна самая последняя построенная таблица, и не важно, что перед открытием окна вкладка переключается программно на нужную - она выделена как и полагается, но таблица на ней не та, которая к ней привязана, а самая последняя.
Сделал пример. Картинка первого открытия окна:
Скриншоты торговой платформы MetaTrader
EURUSD, D1, 2016.11.03
MetaQuotes Software Corp., MetaTrader 5, Demo
Как видно, выделена вкладка 1, но таблица видна та, которая привязана к Tab 4 - в самой таблице в заголовках столбцов это написано.
Далее, если переключать вкладки, то таблицы помещаются туда, куда и положено, выделил вторую вкладку мышкой:
Скриншоты торговой платформы MetaTrader
EURUSD, D1, 2016.11.03
MetaQuotes Software Corp., MetaTrader 5, Demo
Вернулся на первую:
Скриншоты торговой платформы MetaTrader
EURUSD, D1, 2016.11.03
MetaQuotes Software Corp., MetaTrader 5, Demo
Что не так делаю? Или это баг?
Файлы в прицепе. Индикатор.
...
Что не так делаю? Или это баг?
С вкладками типа CTabs работает правильно. А для вкладок CIconTabs пока не делал персональные массивы в движке библиотеки и автоматический показ содержимого выделенной вкладки при открытии диалогового окна. В следующем обновлении будет исправлено.
Но как временное решение уже сейчас можно отслеживать открытие диалогового окна в пользовательском классе и обновлять вкладки, как показано в листинге ниже:
//| Обработчик событий |
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX)
{
if(lparam==m_window2.Id())
m_icon_tabs.ShowTabElements();
}
}
С вкладками типа CTabs работает правильно. А для вкладок CIconTabs пока не делал персональные массивы в движке библиотеки и автоматический показ содержимого выделенной вкладки при открытии диалогового окна. В следующем обновлении будет исправлено.
Но как временное решение уже сейчас можно отслеживать открытие диалогового окна в пользовательском классе и обновлять вкладки, как показано в листинге ниже:
//| Обработчик событий |
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX)
{
if(lparam==m_window2.Id())
m_icon_tabs.ShowTabElements();
}
}
Я пытаюсь добавить поле ввода на вкладку, но оно не работает.
тогда функция.
этот объект не привязан к панели, но находится на графике.
и после удаления графика объект остается.