![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопросы по TChart: 1) AddNull в TGanttSeries; 2) refresh TChart [D6, WinXP]
vlad2 © (2012-08-15 13:41:00)Есть две проблемы.
Проблема 1.
Имеется, например, 3 серии. В 1-й нет одного значения, которое есть во 2 и 3-й сериях. В результате всё строится правильно, но на оси нет метки (Label) с этим значением (остальные есть, идут подряд нормально).
Для диаграмм (TBarSeries) нашел такое решение: добавляю в серию 1 пустую запись с недостающим значением через метод AddNull. В результате всё построено так же, но появилась нужная метка.
Для TGanttSeries такой номер не прошёл. После добавления пустой записи в серию (AddNull благополучно прошёл, не обругал) при построении графика вылезает ошибка: "List index out of bounds". Метод AddY даёт то же самое.
Вопросы по TGanttSeries и TBarSeries:
1. Как сделать (кроме AddNull), чтобы на оси обязательно были метки, если соответствующее значение есть хотя бы в одной серии?
2. Можно ли и как пользоваться AddNull в сериях TGanttSeries?
Проблема 2.
Старая проблема в runtime: после изменений некоторых свойств элементов графика (например, осей, легенды, коррекция размеров и т.п.) ПОСЛЕ создания серий TChart не обновляется. На принудительное использование методов типа Refresh, Repaint, Update ... не реагирует.
Нашёл только один способ обновления: CopyToClipboardBitmap, он работает, но если графиков строится подряд больше сотни, это заметно долго.
Неужели нет более "цивилизованного" и быстрого метода обновления TChart?
Если нужен конкретный пример, когда не работает, - изменение ColorWidth легенды после построения серий.
Спасибо.
vlad2 (2012-08-16 17:00:00) [1]
> Поставь ВР на строке chart.CopyToClipboardBitmap и нажми
> F7
Если бы было так просто, не обращался бы на форум. CopyToClipboardBitmap - функция предка TChart, её код мне недоступен.
Германн (2012-08-16 02:33:00) [2]
> vlad2 (15.08.12 18:42) [6]
>
>
> > Так и смотри значение индекса перед вызовом
>
>
> Какого индекса?
А отладчик для чего?
Поставь ВР на строке chart.CopyToClipboardBitmap и нажми F7.
vlad2 (2012-08-15 18:42:00) [3]
> Так и смотри значение индекса перед вызовом
Какого индекса?
Перед вызовом chart.Series[k].AddNull() chart.Series[k].Count = 30
после - chart.Series[k].Count = 31, а после вызова chart.CopyToClipboardBitmap() - ошибка "List index out of bounds (30)".
Перед вызовом chart.Series[k].AddGantt(...) chart.Series[k].Count = 30
после - тоже chart.Series[k].Count = 31, а после вызова chart.CopyToClipboardBitmap() - никакой ошибки нет.
Вот я и не могу понять, в чём дело. Косяк в TGanttSeries при AddNull? В TBarSeries этого же не происходит.
Inovet (2012-08-15 18:27:00) [4]> [4] vlad2 (15.08.12 18:23)
> Гугл-переводчик даёт то же самое :).
Так и смотри значение индекса перед вызовом.
vlad2 (2012-08-15 18:23:00) [5]Спасибо, sniknik ©, Гугл-переводчик даёт то же самое :).
sniknik (2012-08-15 16:48:00) [6]> List index out of bounds
ошибка вполне определенная, обращение в список "за пределы" существующих записей этого списка.
vlad2 (2012-08-15 15:30:00) [7]
> код показывайте или тестовый пример
К сожалению, этого, видимо, нельзя, т.к. программирую на C++ Builder. А вопрос задал здесь, не найдя ответов на сишных форумах, он общий, безотносительно к языку.
Схема примерно такая:
1. После того, как заполнил серии Гантта данными, добавляю одну пустую запись в 1 серию. После этого при попытке обратиться к CopyToClipboardBitmap возникает ошибка "List index out of bounds".
2. Изменение ColorWidth легенды должно приводить к изменению NumRows легенды, чего никогда не произойдёт, если не обновлять каждый раз TChart.
AV (2012-08-15 13:48:00) [8]код показывайте или тестовый пример