Обсуждение статьи "Графические интерфейсы X: Расширенное управление списками и таблицами. Оптимизация кода (build 7)" - страница 8
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Хорошо. Продолжим потом на том примере, с которого начали здесь. Дополни его до уровня, когда проблема начинает проявляться.
Не, Толь, и в твоём примере то же самое - ничего не изменилось. В Table.mqh добавил в последний цикл:
for(uint c=l; c<m_visible_columns_total; c++)
{
//--- Получим текущую позицию ползунка вертикальной полосы прокрутки
v=m_scrollv.CurrentPos()+t;
//--- Ряды
for(uint r=t; r<m_visible_rows_total; r++)
{
//--- Смещение данных таблицы
if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
{
//--- Корректировка с учётом выделенной строки
color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];
//--- Корректировка (1) значений, (2) цвета фона, (3) цвета текста и (4) выравнивания текста в ячейках
SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],m_vcolumns[h].m_cell_color[v],m_vcolumns[h].m_text_color[v],m_vcolumns[h].m_text_align[v]);
v++;
}
}
//---
h++;
}
В Program.mqh добавил в таймер:
//| Таймер |
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
{
CWndEvents::OnTimerEvent();
//--- Пауза между обновлением элементов
if(m_counter1.CheckTimeCounter())
{
//--- Обновление второго пункта статусной строки
m_status_bar.ValueToItem(1,::TimeToString(::TimeLocal(),TIME_DATE|TIME_SECONDS));
//--- Перерисовать график
m_chart.Redraw();
}
//--- Пауза между обновлением элементов
if(m_counter2.CheckTimeCounter())
{
//--- Вписать в Price первого ряда значение цены текущего символа
MqlTick tick;
if(SymbolInfoTick(Symbol(),tick))
{
int dg=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);
m_table.SetValue(1,1,DoubleToString(tick.bid,dg),dg);
m_table.UpdateTable();
}
//--- Добавить ряд в таблицу, если общее кол-во меньше указанного
if(m_table.RowsTotal()<m_spin_edit1.GetValue())
m_table.AddRow();
//--- Добавить столбец в таблицу, если общее кол-во меньше указанного
if(m_table.ColumnsTotal()<m_spin_edit2.GetValue())
m_table.AddColumn();
//--- Добавить пункт в список, если общее кол-во меньше указанного
if(m_listview.ItemsTotal()<m_spin_edit5.GetValue())
{
m_listview.AddItem("SYMBOL "+string(m_listview.ItemsTotal()));
//--- Переместить ползунок полосы прокрутки в конец списка
m_listview.Scrolling();
}
//--- Добавить пункт в список из чек-боксов, если общее кол-во меньше указанного
if(m_checkbox_list.ItemsTotal()<m_spin_edit5.GetValue())
{
m_checkbox_list.AddItem("Checkbox "+string(m_checkbox_list.ItemsTotal()));
//--- Переместить ползунок полосы прокрутки в конец списка
m_checkbox_list.Scrolling();
}
//--- Перерисовать график
m_chart.Redraw();
}
}
//+------------------------------------------------------------------+
Всё как и было - без изменений - моргает.
Может у тебя уже другая версия Table.mqh, и в ней уже работает с такими изменениями?
...
Может у тебя уже другая версия Table.mqh, и в ней уже работает с такими изменениями?
Версия та же, что и в статье с примером. У себя проблем не вижу. Ничем пока больше помочь не могу, так как причины не ясны.
И у тебя таймер отрабатывает, цена обновляется в таблице с каждым новым тиком, но при этом таблица ведёт себя нормально?
Да.
Работу с мышкой не менял? Зависит от состояния курсора - двигаешь - выделенная строка становится выделенной, правда моргает, если курсор на месте, то никакого выделения строки не видно.
Всё, что ты описываешь, у меня воспроизводилось до тех изменений, которые я указал. Теперь проблем у себя не вижу. Попробуй перекомпилировать все файлы библиотеки и посмотри ещё раз.
Не помогло.
Не помогло.
Обрати внимание не только на то, что выделено, но и где это потом используется:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Обсуждение статьи "Графические интерфейсы X: Расширенное управление списками и таблицами. Оптимизация кода (build 7)"
Anatoli Kazharski, 2017.01.24 12:26
Чтобы выделенный ряд таблицы не мигал, в метод CTable::UpdateTable() в последнем цикле добавить вот эти строки:
for(uint c=l; c<m_visible_columns_total; c++)
{
//--- Получим текущую позицию ползунка вертикальной полосы прокрутки
v=m_scrollv.CurrentPos()+t;
//--- Ряды
for(uint r=t; r<m_visible_rows_total; r++)
{
//--- Смещение данных таблицы
if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
{
//--- Корректировка с учётом выделенной строки
color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];
//--- Корректировка (1) значений, (2) цвета фона, (3) цвета текста и (4) выравнивания текста в ячейках
SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],back_color,text_color,m_vcolumns[h].m_text_align[v]);
v++;
}
}
//---
h++;
}
//---
А с остальным нужно больше подробностей.
Вот это что? :