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

 
Artyom Trishkin:

Я имею в виду на сайте в статье - может там старый прибился к обновлениям. Я ж беру файл из последнего обновления, загруженного с сайта снизу статьи из зипа.

Вот, внёс правки как выше написал:

Отлично. А то может у тебя там чего прибилось, как это неоднократно бывало. ) Но если что, буду иметь в виду.
 
Anatoli Kazharski:
Отлично. А то может у тебя там чего прибилось, как это неоднократно бывало. ) Но если что, буду иметь в виду.

Вот прям вынуждаешь ерундой заниматься.


Мелко, но видно.

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

 
Artyom Trishkin:

Вот прям вынуждаешь ерундой заниматься.

Мелко, но видно.

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

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

Если обнаружится проблема, то твоё предложение-исправление может не для всех случаев подойти. Для твоего случая подошло, но там все режимы тестировать надо. Я сам этим займусь, если обнаружу проблему.

Действительно, не занимайся ерундой. )

 
Anatoli Kazharski:

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

Если обнаружится проблема, то твоё предложение-исправление может не для всех случаев подойти. Для твоего случая подошло, но там все режимы тестировать надо. Я сам этим займусь, если обнаружу проблему.

Действительно, не занимайся ерундой. )

Хорошо, не буду ;)

Толь, вопрос: таблицы сортируются по столбцам - всё нормально. Но ..., если в таблице есть пустые строки, и их много, то сортировка включает эти пустые строки тоже. Получается, что, допустим, есть таблица с тысячей строк (1001 - нулевая для заголовка) - по максимальному количеству символов в обзоре рынка. Но на данный момент в обзоре рынка есть всего 10 символов. Они все есть в таблице в первых десяти её строках - с первой по десятую. Остальные строки пустые (таблицы же не динамические, а символы могут добавляться/удаляться в/из таблицы). Если попробовать отсортировать такую таблицу, то сортированный список уходит в самый конец таблицы - в строки 990 - 1000 (нулевая - заголовок), а наверху видны пустые строки. Это не есть хорошо и, как мне кажется, упущение.

 
Artyom Trishkin:

... таблицы же не динамические, а символы могут добавляться/удаляться в/из таблицы...

Скоро будут динамические. Как раз занимаюсь сейчас этим. 
 
Anatoli Kazharski:
Скоро будут динамические. Как раз занимаюсь сейчас этим. 
Это отлично! А проблема с включением в сортированный список совершенно пустых строк? Как с ней?
 
Artyom Trishkin:
... А проблема с включением в сортированный список совершенно пустых строк? Как с ней?
Пока останется, как есть. К сортировке не буду возвращаться в ближайшее время.
 
Anatoli Kazharski:
Пока останется, как есть. К сортировке не буду возвращаться в ближайшее время.
Ясно. Ну, ..., впрочем сортировка есть у меня под конкретные нужды. А там, глядишь, и ты когда-нибудь подправишь...
 
Anatoli Kazharski:
...

То же самое с разделительной линией в контекстном меню в ContextMenu.mqh - разделительная полоса между пунктами меню встаёт не на свои координаты.

В методе:

//+------------------------------------------------------------------+
//| Создаёт разделительную линию                                     |
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- Сохраним указатель формы
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- Установим свойства
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- Создание разделительной линии
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x,y,m_x_size-10,2))
      return(false);
//--- Сохраним указатель объекта
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

заменил выделенное на

//+------------------------------------------------------------------+
//| Создаёт разделительную линию                                     |
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- Сохраним указатель формы
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- Установим свойства
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- Создание разделительной линии
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x-m_wnd.X(),y-m_wnd.Y(),m_x_size-10,2))
      return(false);
//--- Сохраним указатель объекта
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

и разделительная полоса встала на место.

 
Artyom Trishkin:

То же самое с разделительной линией в контекстном меню в ContextMenu.mqh - разделительная полоса между пунктами меню встаёт не на свои координаты.

Воспроизвёл все подобные случаи. Это касается всех элементов, которые используются, как составные части в других элементах. Обнаруживается, когда начальные абсолютные координаты формы, при создании графического интерфейса, больше (1,1).  

Исправление будет в следующем билде. В качестве временного быстрого решения подойдут или (1) твои примеры или (2) просто изначально устанавливать форму в координатах (1,1). Лучше второе, так как может посыпаться в других режимах позиционирования элементов.

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