Вопрос про TChart. Где про него почитать?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Вопрос про TChart. Где про него почитать?

Сообщение Climber »

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

Я попробовал освоить методом научного тыка.
Кинул компонент TChart, TQuery, TDataSource, TDBChartSource, два раза кликнул по TChart, в появившемся окне нажал "Добавить", добавилась новая серия, в свойствах серии указал Source - DBChartSource1, написал текст запроса. При запуске - ошибка "List index (0) out of bounds". Что делать дальше - вообще не понятно.

Пошлите меня куда-нибудь, где матчасть можно изучить...
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

В каталоге lazarus\components\tachart\demo\ имеется куча демок. Ковыряйте.

Да, ну и Lazarus обновить бы не мешало.
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

Climber писал(а):При запуске - ошибка "List index (0) out of bounds". Что делать дальше - вообще не понятно.


Хоть мой хрустальный шар сегодня мутноват, всё же могу предположить, что у DBChartSource
не указаны поля FieldX и FieldY.

Это, кстати, не повод для TChart вылетать с ошибкой -- исправил в r30444, номинировал в back-port.

Максим писал(а):Да, ну и Lazarus обновить бы не мешало.


Это точно.
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

Ask писал(а):
Climber писал(а):При запуске - ошибка "List index (0) out of bounds". Что делать дальше - вообще не понятно.


Хоть мой хрустальный шар сегодня мутноват, всё же могу предположить, что у DBChartSource
не указаны поля FieldX и FieldY.

Это, кстати, не повод для TChart вылетать с ошибкой -- исправил в r30444, номинировал в back-port.

Максим писал(а):Да, ну и Lazarus обновить бы не мешало.


Это точно.

С хрустальным шаром все ОК - мой метод научного тыка эти поля не осилил. Лазарус, кстати, у меня последний (0.9.30).
Только вот эти поля все равно не спасли. Я хотел сделать PieChart, сделал запрос, который возвращает столбцы "Сумма" и "Категория". Как ни заполняй поля FieldX и FieldY, ответ один: "Field "Категория" is invalid float" или что-то в этом роде.
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

Ask писал(а):Лазарус, кстати, у меня последний (0.9.30).

Хм. Тогда советую обновить подпись :)

Я хотел сделать PieChart, сделал запрос, который возвращает столбцы "Сумма" и "Категория". Как ни заполняй поля FieldX и FieldY, ответ один: "Field "Категория" is invalid float" или что-то в этом роде.


Я ведь почему про хрустальный шар говорил -- надо в таких случаях постить пример проекта, иначе приходится угадывать, где ошибка.
На этот раз, из сообщения можно предположить, что в поле "Категория" записаны не вещественные числа, а, например, строки,
и поэтому использовать его в качестве Y не получится. Кроме того, у PieChart вообще нет координаты X.
Так что предлагаю установить FieldY=Сумма FieldText=Категория
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

Ask писал(а):Я ведь почему про хрустальный шар говорил -- надо в таких случаях постить пример проекта, иначе приходится угадывать, где ошибка.

Заглядывать в хрустальный шар не пришлось бы, если бы мне сразу дали хотя бы примерное направление, где почитать про работу TChart + БД. Хотя что-то мне уже подсказывает, что такого в природе не существует.
Но оно таки заработало!
Запрос возвращает числа в столбце "Сумма" и подписи в столбце "Категория". Я сделал FieldY = "Сумма" и FieldText = "Категория", FieldX оставил пустой.
Теперь надо разобраться с легендой...
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Climber писал(а):Хотя что-то мне уже подсказывает, что такого в природе не существует.
Но оно таки заработало!

Вот вам и карты в руки. Пол свежим следам написать манул - как вы добились, чтобы оно заработало...
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

alexs писал(а):
Climber писал(а):Хотя что-то мне уже подсказывает, что такого в природе не существует.
Но оно таки заработало!

Вот вам и карты в руки. Пол свежим следам написать манул - как вы добились, чтобы оно заработало...

Весь мануал - в этом топике, мне добавить нечего :)
Вот когда до конца разберусь - тогда, может быть...

Кстати: диаграмма выглядит не очень красиво, это можно как-то исправить? Ну то есть проблема решится только созданием потомка или можно с событиями поколдовать?
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

Climber писал(а):Вот когда до конца разберусь - тогда, может быть...


Было бы неплохо :)

Climber писал(а):диаграмма выглядит не очень красиво, это можно как-то исправить?


Это можно прямо сразу на башорг. И никто ведь не поверит, что программист написал, а не заказчик.
Пожалуйста, поконкретнее.
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

Давно мечтаю попасть на башорг. Не берут :(

Вот пример того, что есть и чего хочется 8)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

Climber писал(а):Вот пример того, что есть и чего хочется


Ого. Тут не в наследовании дело -- нужно найти код, который умеет рисовать такие
эффекты. Это ведь не просто градиент, а хитрое сочетание.

Могу добавить event в TPieSeries аналогично тому, как сделано в TBarSeries.

Метки нужны именно внутри?
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

Метки внутри не нужны, это просто такая диаграмма попалась. Просто хотел показать красивую градиентную заливку. На самом деле, даже Excel настолько красиво не умеет, так что я не особо расстраиваюсь. У меня была идея рисовать такие штуки с помощью OpenGL, только надо придумать способ, как это правильно организовать..

На самом деле, достаточно просто добавить антиалиасинг...
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

Ask писал(а):...
Метки нужны именно внутри?

Кстати, метки внутри не помешали бы.
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

достаточно просто добавить антиалиасинг


Уже есть.
См. aggpasdemo и bgrademo, а под Qt -- просто basicdemo.
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

2 Climber

Могу посоветовать только сделать свои компоненты. Но не нужно "заморачиваться" с OpenGL. Используйте векторную отрисовку. Например, в SVG или WMF. Это не сложно, но довольно муторно, если захотите "воспроизвести" TChart'ы полностью.
"Отрисовать" затем все можно через TImage.

Если начнете писать, то могу попробовать присоединиться.

PS. Моя проблема сейчас - "рендер" RTF-форматированного текста в WMF или SVG. Вот это действительно сложно :)
Ответить