Обсуждение статьи "Графические интерфейсы X: Сортировка, реконструкция таблицы и элементы управления в ячейках (build 11)" - страница 4

 
Anatoli Kazharski:

1. Когда закончите формировать графический интерфейс для своего разрабатываемого MQL-приложения, то при наполнении его, каким-нибудь торговым функционалом, может понадобиться инициализация значений программы при его загрузке/перезагрузке. Здесь это просто пример, так как предполагается работать от и до в пользовательском классе CProgram. Я потом покажу, какие-нибудь более существенные примеры, когда закончу разработку библиотеки. Уже скоро закончится второй этап и можно будет представить реальные примеры MQL-приложений с использованием этой библиотеки.

2. У формы тоже должны быть заданы аналогичные свойства растягивания.

3. Да, обязательно.

//---

P.S. На текущий момент последняя версия библиотеки вот в этой статье: Графические интерфейсы X: Выделение текста в многострочном поле ввода (build 13)


спс, кстати заметил ошибку переполнения массива, если в примере 11_01 выделить последнюю строку и удалить к примеру первую строку, а потом снова выделить последнюю строку, то получим:

2017.04.19 20:27:52.564 TestLibrary11_01 (RUAL,H1) array out of range in 'CanvasTable.mqh' (1897,19)

На имя TestLibrary11_01 не обращайте внимания, это пример 11_01, библиотеку забрал последнюю, т.е. 13-ю версию


Еще вопрос, каким методом изменяется шаг тапа на ползунках скрола, а то по умолчанию слишком мелкий шаг?

 
Konstantin:


1. спс, кстати заметил ошибку переполнения массива, если в примере 11_01 выделить последнюю строку и удалить к примеру первую строку, а потом снова выделить последнюю строку, то получим: 2017.04.19 20:27:52.564 TestLibrary11_01 (RUAL,H1) array out of range in 'CanvasTable.mqh' (1897,19)

2. Еще вопрос, каким методом изменяется шаг тапа на ползунках скрола, а то по умолчанию слишком мелкий шаг?

1. Проверю и исправлю к следующему обновлению.

2. Пока не реализовано. Сделаю.

 

Если необходим только функционал таблицы, а привязка к форме CWindow обязательна, то возможно ли не активировать:

1. Элементы управления меню

2. Кнопку удаления формы

3. Как в таблице обновить значения ячеек? (вопрос снят, увидел параметр redraw в методе SetValue) :)

4. Не совсем понятен метод SetValue(const uint column_index,const uint row_index,const string value="",const uint digits=0,const bool redraw=false), зачем разделение на строковый тип хранимых данных и вещественный? На мой взгляд в таблице лучше хранить string. Но если это так необходимо, то лучше тактически создать два метода.

Насчет использования метода OnInitEvent так и не смог понять, буду ждать примеров.

 
Konstantin:

Если необходим только функционал таблицы, а привязка к форме CWindow обязательна, то возможно ли не активировать:

1. Элементы управления меню

2. Кнопку удаления формы

3. Как в таблице обновить значения ячеек?

Насчет использования метода OnInitEvent так и не смог понять, буду ждать примеров.

1. В пользовательском классе MQL-приложения CProgram Вы сами конструируете графический интерфейс. Поэтому, если Вам не нужно главное меню, то просто не создавайте эти элементы в этом классе.

2. Нет. Это обязательная кнопка на форме. Случайно удалить приложение с графика, нажав на неё, не получится, так как выходит окно для подтверждения этого действия.

3. Смотрите пример в этой статье: Графические интерфейсы X: Обновления для нарисованной таблицы и оптимизация кода (build 10). Если кратко, то используйте метод CCanvasTable::SetValue().


 
Anatoli Kazharski:

1. В пользовательском классе MQL-приложения CProgram Вы сами конструируете графический интерфейс. Поэтому, если Вам не нужно главное меню, то просто не создавайте эти элементы в этом классе.

2. Нет. Это обязательная кнопка на форме. Случайно удалить приложение с графика, нажав на неё, не получится, так как выходит окно для подтверждения этого действия.

3. Смотрите пример в этой статье: Графические интерфейсы X: Обновления для нарисованной таблицы и оптимизация кода (build 10). Если кратко, то используйте метод CCanvasTable::SetValue().



По п.2 сделайте пожалуйста выбор кнопок для формы, даже в MessageBox настраиваются наборы кнопок. В Qt так же можно изменять наборы этих кнопок, в стандартной библиотеке MetaQuotes они так же меняются.
 
Konstantin:

...

4. Не совсем понятен метод SetValue(const uint column_index,const uint row_index,const string value="",const uint digits=0,const bool redraw=false), зачем разделение на строковый тип хранимых данных и вещественный? На мой взгляд в таблице лучше хранить string. Но если это так необходимо, то лучше тактически создать два метода.

Не понял про тип данных. Они все хранятся, как string. Тип данных указывается для каждого столбца методом DataType() для сортировки. А параметр digits в методе SetValue() позволяет сразу задать количество знаков после разделителя для каждой ячейки отдельно.
 
Konstantin:

По п.2 сделайте пожалуйста выбор кнопок для формы, даже в MessageBox настраиваются наборы кнопок. В Qt так же можно изменять наборы этих кнопок, в стандартной библиотеке MetaQuotes они так же меняются.

Сейчас есть кнопки:

  1. Закрыть окно
  2. Свернуть/развернуть окно
  3. Всплывающие подсказки.

Какие ещё нужны? 

 
Anatoli Kazharski:

Сейчас есть кнопки:

  1. Закрыть окно
  2. Свернуть/развернуть окно
  3. Всплывающие подсказки.

Какие ещё нужны? 


я про них и говорю, что этот набор нужно сделать изменяемым, не всегда нужны все три эти кнопки ))
 
Anatoli Kazharski:
Не понял про тип данных. Они все хранятся, как string. Тип данных указывается для каждого столбца методом DataType() для сортировки. А параметр digits в методе SetValue() позволяет сразу задать количество знаков после разделителя для каждой ячейки отдельно.


)) теперь понял, кстати DataType() по дефолту какой тип имеет? Или дефолтного состояния нет и нужно по любому определять тип хранимого значения перед его добавлением в ячейку?

PS. Забыл написать, не всегда прогружаются ресурсные картинки в меню, хотя это может быть из-за того, что в виртуалке сижу.

 
Konstantin:

я про них и говорю, что этот набор нужно сделать изменяемым, не всегда нужны все три эти кнопки ))

2 и 3 можно не включать уже сейчас. В методе создания формы в пользовательском классе CProgram не вызывайте методы:

   m_window.UseRollButton();
   m_window.UseTooltipsButton();
Причина обращения: