Обсуждение статьи "Графические интерфейсы VII: Элементы "Вкладки" (Глава 2)" - страница 2

 
Anatoli Kazharski:

Конечно. )

Следующее обновление для этого класса (CTabs) будет "Режим многострочных вкладок". 

Как здесь (в несколько рядов) :

 

Супер. Жаль, что пока таблицы и списки - лишь таблицы и списки. Пока практичестки служат лишь визуальным оформлением данных без какого-либо интерактива.

Хотелось бы, конечно брать, и  выделять нужные столбцы/строки списков/таблиц, и проводить с ними некие манипуляции - например: есть список, поставили чекбоксы, или вообще целиком выделили нужные строки, и вывели в отдельном окне общие данные по выбранным строкам... Вот нечто такое было бы супер :)

Впрочем, чтобы можно было сиё делать, нужно добавить методы для манипуляций с этими данными. Может оно уже есть, да я не знаю?

 
Artyom Trishkin:

Супер. Жаль, что пока таблицы и списки - лишь таблицы и списки. Пока практичестки служат лишь визуальным оформлением данных без какого-либо интерактива.

...

По большей части из перечисленного всё это есть.

Выбирая в списках (CListView) пункт генерируется событие, по которому можно определить, в каком именно элементе был осуществлён выбор и какое текущее значение выбрано.

Тоже самое в таблицах (CTable). При выделении ряда таблицы генерируется событие, в параметрах которого содержится индекс ряда (параметр dparam), по которому можно потом получить значения в ячейках этого ряда с помощью метода CTable::GetValue():

//+------------------------------------------------------------------+
//| Возвращает значение по указанным индексам                        | 
//+------------------------------------------------------------------+
string CTable::GetValue(const int column_index,const int 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().
Я могу создать эти объекты, но не могу прикрепить их к окну.


CWndContainer::AddToElementsArray(m_subwin, _MyEditBox);
не работает в этом случае...

2.)
Является ли CComboBox статическим объектом. Можно ли изменить список элементов в

ComboBox-Listview после создания ComboBox?

Спасибо!

 

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

Проблема вот в чём: при первом открытии окна всегда видна самая последняя построенная таблица, и не важно, что перед открытием окна вкладка переключается программно на нужную - она выделена как и полагается, но таблица на ней не та, которая к ней привязана, а самая последняя.

Сделал пример. Картинка первого открытия окна:

Как видно, выделена вкладка 1, но таблица видна та, которая привязана к Tab 4 - в самой таблице в заголовках столбцов это написано.

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

Вернулся на первую:

Что не так делаю? Или это баг?

Файлы в прицепе. Индикатор.

Файлы:
 
Artyom Trishkin:

...

Что не так делаю? Или это баг?

С вкладками типа 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();
     }
  }
 
Anatoli Kazharski:

С вкладками типа 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();
     }
  }
Спасибо. Так работает. Теперь буду по две перекрывающих друг дружку таблицы в каждую вкладку пихать - глянем-с ;)
 
HI, если я сворачиваю диалог и меняю период, то диалог не работает в MT4.
 
При компиляции выдаёт ошибки вида:
'return' - cannot convert from const pointer to nonconst pointer        SplitButton.mqh 90      65
Лечится удалением Const в соответствующих строках.
 

Я пытаюсь добавить поле ввода на вкладку, но оно не работает.

input double whenToTrail=10.3;

class CProgram: public CWndEvents
{
protected:
   CSpinEdit         m_StartTS;
//Code
protected:
   bool              CreatetrailStop(const int x_gap, const int y_gap, const string text);
};


тогда функция.

bool CProgram::CreatetrailStop(const int x_gap, const int 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);
  }

этот объект не привязан к панели, но находится на графике.

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

ресурсный файл '\ Images \ EasyAndFastGUI \ Controls \ LeftTransp_black.bmp' не найден Calendar.mqh 443 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ LeftTransp_blue.bmp' не найден Calendar.mqh 444 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ calendar_today.bmp' не найден Calendar.mqh 738 11
ресурсный файл '\ Images \ EasyAndFastGUI \ Controls \ calendar_drop_on.bmp' не найден DropCalendar.mqh 435 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ calendar_drop_off.bmp' не найден DropCalendar.mqh 436 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ calendar_drop_locked.bmp' не найден DropCalendar.mqh 437 11
ресурсный файл '\ Images \ EasyAndFastGUI \ Controls \ RightTransp_rotate_black.bmp' не найден TreeItem.mqh 247 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ RightTransp_rotate_white.bmp' не найден TreeItem.mqh 248 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ pointer_x_resize.bmp' не найден Pointer.mqh 8 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ pointer_x_resize_blue.bmp' не найден Pointer.mqh 9 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ pointer_y_resize.bmp' не найден Pointer.mqh 10 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ pointer_y_resize_blue.bmp' не найден Pointer.mqh 11 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ pointer_xy1_resize.bmp' не найден Pointer.mqh 12 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ pointer_xy1_resize_blue.bmp' не найден Pointer.mqh 13 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ pointer_xy2_resize.bmp' не найден Pointer.mqh 14 11
Файл ресурса '\ Images \ EasyAndFastGUI \ Controls \ pointer_xy2_resize_blue.bmp' не найден Pointer.mqh 15 11
Файл ресурсов '\ Images \ EasyAndFastGUI \ Icons \ bmp16 \ folder.bmp' не найден FileNavigator.mqh 284 11
файл ресурсов '\ Images \ EasyAndFastGUI \ Icons \ bmp16 \ text_file.bmp' не найден FileNavigator.mqh 285 11

Я искал в MQL5 zip-файле, но файлов там нет, есть ли способ получить их?
Спасибо