Помогите с TAChart

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

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

Помогите с TAChart

Сообщение user123 » 23.11.2010 01:04:20

Уважаемые профи! Подскажите новичку по компоненту TAChart:
1. Как по осям задать произвольное количество разбиений у меня количество разбиений зависит от мин и макс. числа и меняется по непонятному алгоритму.
2.Как по осям Х и У задать кроме основных делений задать, допустим, по 5 подделений.
3.Можно ли сохранить на диск серии TAChart с последующим чтением и отрисовкой, и если можно, как это сделать.
user123
незнакомец
 
Сообщения: 6
Зарегистрирован: 13.11.2010 16:09:23

Re: Помогите с TAChart

Сообщение Ask » 23.11.2010 22:08:56

user123 писал(а):Уважаемые профи! Подскажите новичку по компоненту TAChart:
1. Как по осям задать произвольное количество разбиений у меня количество разбиений зависит от мин и макс. числа и меняется по непонятному алгоритму.
2.Как по осям Х и У задать кроме основных делений задать, допустим, по 5 подделений.

Можно, но только в версии 0.9.29
Пример см. в axisdemo

user123 писал(а):3.Можно ли сохранить на диск серии TAChart с последующим чтением и отрисовкой, и если можно, как это сделать.


Ну, как и любые другие данные, координаты точек можно записать в файл, а потом считать обратно.
TAChart тут ни при чём.
Если данные лежат в БД, можно для упрощения работы использовать TDbChartSource.
Если данные никогда не меняются (т.е. фиксированы в момент написания программы),
можно использовать свойство DataPoints в TListChartSource
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение user123 » 24.11.2010 23:15:43

В axisdemo не нашел подходящего примера. Если не сложно, укажите в каком именно примере это есть.
По п.3- данные нигде не лежат. Они поступают извне. Их как раз надо куда-нибудь положить, сохранить на диске, а потом считать при необходимости, отрисовать на экране и, возможно распечатать. К сожалению у меня слишком мало знаний во всем перечисленном. Может хотя-бы названия компонентов дадите, которые мне смогут помочь. Буду ковырять их методом тыка. Спасибо.
user123
незнакомец
 
Сообщения: 6
Зарегистрирован: 13.11.2010 16:09:23

Re: Помогите с TAChart

Сообщение Ask » 25.11.2010 20:07:02

В axisdemo не нашел подходящего примера. Если не сложно, укажите в каком именно примере это есть.


Страница "Customized marks"

Они поступают извне. Их как раз надо куда-нибудь положить, сохранить на диске, а потом считать при необходимости, отрисовать на экране и, возможно распечатать.


Вам необходимо изучить стандартные средства работы с файлами. TAChart тут не при чём.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение user123 » 25.11.2010 23:31:19

Вам необходимо изучить стандартные средства работы с файлами. TAChart тут не при чём

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

А по поводу
Страница "Customized marks"

Это не совсем то, что надо. мне необходим график как во вложении, то есть дробные метки на осях
У вас нет необходимых прав для просмотра вложений в этом сообщении.
user123
незнакомец
 
Сообщения: 6
Зарегистрирован: 13.11.2010 16:09:23

Re: Помогите с TAChart

Сообщение Ask » 28.11.2010 15:52:23

user123 писал(а):
Вам необходимо изучить стандартные средства работы с файлами. TAChart тут не при чём

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


http://freepascal.org/docs-html/rtl/sys ... tions.html

user123 писал(а):А по поводу
Страница "Customized marks"

Это не совсем то, что надо. мне необходим график как во вложении, то есть дробные метки на осях


А, понятно. Это можно сделать с помощью нескольких сгруппированных осей.
Добавил к демке страницу "Submarks" в ревизии 28521
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение user123 » 30.11.2010 10:09:45

Добавил к демке страницу "Submarks" в ревизии 28521

буду весьма признателен за информацию, где это можно скачать.
user123
незнакомец
 
Сообщения: 6
Зарегистрирован: 13.11.2010 16:09:23

Re: Помогите с TAChart

Сообщение Ask » 30.11.2010 17:01:46

Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение user123 » 01.12.2010 13:06:52

Спасибо. С записью/чтением в файл разобрался. Все отлично работает. Демку скачаю, посмотрю. И еще вопрос. А как распечатать на принтере полученный график?
user123
незнакомец
 
Сообщения: 6
Зарегистрирован: 13.11.2010 16:09:23

Re: Помогите с TAChart

Сообщение Ask » 02.12.2010 12:30:07

user123 писал(а): А как распечатать на принтере полученный график?


Теоретически, Chart1.PaintOnCanvas(Printer1.Canvas)
Насколько хорошо будет выглядеть -- не уверен.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение VAshot » 23.01.2011 22:30:53

Ask писал(а):
user123 писал(а): А как распечатать на принтере полученный график?


Теоретически, Chart1.PaintOnCanvas(Printer1.Canvas)
Насколько хорошо будет выглядеть -- не уверен.


К вопросу вывода на печать.
Я делал следующим образом:
- создавал в памяти специальный чарт (или правил существующий на форме), на время печати менял родителя сериям, после печати - обратно;
- менял размер шрифтов, фоновую заливку;
- задавал созданный для этого параметр zoomCoef у чарта, который рассчитывается в зависимости от текущего DPI принтера (ChartPrint.zoomCoef := XDPI/72;), для простоты разрешение принтера одинаковое (XDPI=YDPI);
- в коде, везде где задаются линейные размеры, домножил всё на zoomCoef с последующим округлением (почему-то не сделал функцией).

Работает, красиво, на виртуальный PDF принтер - отлично, правда не все принтеры справились с большим объемом данных (в районе 10^4 отрезков на графике) :)

Ask, я так понял, что Вы автор текущей версии компонента, можно ли добавить в исходник домножение на коэффициент?
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Re: Помогите с TAChart

Сообщение Ask » 24.01.2011 06:43:07

Да, Я автор. Добавить можно, только Я не до конца понял, куда именно.
Пока понятно про Font.Size. Это, кстати, уже довольно много мест в коде.
Например, Pen.Width надо менять? Или заменять заливку bsCross на Pattern
с более толстыми линиями?
Если так, то мне кажется, что это надо решать на уровне Printer.Canvas.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение VAshot » 24.01.2011 07:39:39

Размер шрифта задавал у канвы принтера, раньше чарт просто выводил на канву используя её параметры.
Менял только линейные размеры, т. е. все константы. Сейчас нужно и переменные, часть констант стала свойствами.
Толщину не менял. Заливку, соответственно, не трогал. Пример в файле.
Количество замен - гигантское, если это как-то можно сделать через канву, то правильнее. Но как?
Хотя, по сути, вывод на канву векторный, логично, что можно сделать масштабирование.

Кстати, обратите внимание на сетку. Она хитрая, сетка правой оси всегда совпадает с левой. Шаги (обоих осей) подбираются автоматически, с ограничением по кратности определенным круглым значениям.
Если интересен код - выложу, но он на древней версии чарта основан и абсолютно не пригоден для переноса.

Appendix A 3600.7z
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Re: Помогите с TAChart

Сообщение Ask » 24.01.2011 14:26:20

VAshot писал(а):Размер шрифта задавал у канвы принтера


Попробовал только что. Оказывается, всё не так уж плохо, размеры шрифтор и толщину линий Лазарус уже
и так масштабирует. Елинственное, что по умолчанию размер шрифта проставляется в 0,
и это при выводе на экран интерпретируется как дефолтный размер, а на принтер -- как именно 0.
Но если указать, скажем, размер 10, то всё работает.

Так что вручную умножать надо только размеры, которые пользователь прямо задаёт в пикселях,
типа TickLength. Надо только подумать, как это сделать универсально -- параметр что ли добавить в PaintToCanvas...

VAshot писал(а):Кстати, обратите внимание на сетку. Она хитрая, сетка правой оси всегда совпадает с левой. Шаги (обоих осей) подбираются автоматически, с ограничением по кратности определенным круглым значениям.


Это уже есть, см. axisdemo. Только набор "круглых" значений жёстко зашит, надо бы его сделать управляемым.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение VAshot » 24.01.2011 14:51:30

Ask писал(а): параметр что ли добавить в PaintToCanvas...

Думаю любой вариант сойдет.
Но один в один вывод на принтер маловероятен, фон там поменять, размер заголовка. Сейчас через временный чарт делал, глупо.
Может некое свойство добавить в котором можно задать наиболее вероятные изменяемые свойства при печати?
Тогда задали их (Chart.PrintParam.zoom:=2.55, Chart.PrintParam.BackgroundColor:=clwhite, Chart.PrintParam.TitleFontSize:=14pt) и при печати указали использование этих значений при отрисовке (Chart.PaintToCanvas(Printer.Canva, true)), где true - флаг.

Добавлено спустя 30 минут 57 секунд:
Ask писал(а):Это уже есть, см. axisdemo. Только набор "круглых" значений жёстко зашит, надо бы его сделать управляемым.

Если честно, не разобрался как управляться этим. Понял, что визуально можно любой нужный сформировать. Но вот как? Методом тыка что-то не очень в голове технология создается. Где-то можно почитать описание пользователя, delphi?

У себя было так: задал максимум и минимум для обоих осей, а при отрисовке чарт подобрал шаг и поменял при необходимости максимумы. А у серий был параметр, на левой или правой рисоваться. Было понятно, но не универсально)

А вот такую штуку можно сделать, без ручного пересчета параметров осей при каждом событии масштаба?
Масштабирование работает не по отношению ко всем осям. Т.е. две оси, два графика (или 4 оси, если по X тоже не нужно), детализируем кусок первого графика, масштаб меняется, но только по отношению первой оси, вторая ось как отображалась на экране на всю высоту чарта от 0 до 10, так и отображается.
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 234

Рейтинг@Mail.ru