Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

DNK
I. DNK
Баллы: 5

Подробнее »



Вопрос # 1 771

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!Случайно столкнулся в своей программе с проблемкой связанной с компонентом
Chart.Чтобы её объяснить попробую привести пример.Кидаем на форму
StringGrid1: TStringGrid;
Chart1: TChart;
Series1: TFastLineSeries;
Button1: TButton;
Заполняем таблицу,ну например так:
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin
Cells[0,0]:=inttostr(2);
Cells[1,0]:=inttostr(1);
Cells[0,1]:=inttostr(6);
Cells[1,1]:=inttostr(2);
Cells[0,2]:=inttostr(8);
Cells[1,2]:=inttostr(4);
Cells[0,3]:=inttostr(12);
Cells[1,3]:=inttostr(6);
Cells[0,4]:=inttostr(14);
Cells[1,4]:=inttostr(8);
Cells[0,5]:=inttostr(10);
Cells[1,5]:=inttostr(7);
Cells[0,6]:=inttostr(6);
Cells[1,6]:=inttostr(5);
end;
end;
Далее стоим график
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
with StringGrid1 do
for i:=0 to RowCount-1 do
Series1.AddXY(StrToInt(Cells[0,i]),StrToInt(Cells[1,i]),'',clTeeColor);
end;
И вот здесь к моему удивлению вместо подобия дуги график рисует ломанную кривую.Не могли бы вы объяснить что я не учёл?

GAZ Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: GAZ (статус: Посетитель)
Вопрос отправлен: 14 июля 2008, 19:31
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Мережников Андрей

Здравствуйте, GAZ!
В chart выбран вид графика, который надо построить? И для чего отдельно вводить Series, когда можно использовать Chart.series[0] (если график должен строиться только один)?

Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 14 июля 2008, 19:44


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 16 июля 2008, 06:13; участников в обсуждении: 4.
Вадим К

Вадим К (статус: Академик), 14 июля 2008, 19:45 [#1]:

а он и не обязан рисовать сглаженную кривую. Вы же скорее всего выбрали обычный график.
а строку Cells[0,0]:=inttostr(2); можно записать как
Cells[0,0]:='2'; - проще и красивее.
Галочка "подтверждения прочтения" - вселенское зло.
Вадим К

Вадим К (статус: Академик), 14 июля 2008, 19:47 [#2]:

to Мережников Андрей:
в данном случае Chart.series[0] и Series1 указывают на один и тот же объект. Так что можно выбрать то, что записывается короче.
Галочка "подтверждения прочтения" - вселенское зло.
GAZ

GAZ (статус: Посетитель), 14 июля 2008, 19:55 [#3]:

Вадим К
Вы может меня не поняли,я не про сглаженную кривую.Просто точки соединяются не последовательно.И вместо того что бы получить что то напоминающее дугу получается какая то кардиограмма.
GAZ

GAZ (статус: Посетитель), 14 июля 2008, 19:59 [#4]:

Вадим К
...Cells[0,0]:=inttostr(2);
Цифры это я так для наглядности поставил,на самом деле там
...Cells[0,0]:=inttostr(i);
GAZ

GAZ (статус: Посетитель), 14 июля 2008, 20:01 [#5]:

Мережников Андрей
Графиков строится много.Я же говорю я так для примера написал.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 14 июля 2008, 20:36 [#6]:

если графиков строится много, то для каждого надо задать вид в Chart и использовать соответственно series[0] для первого, series[1] -для второго и т.д.
to Вадим К - зачем добавлять лишнюю переменную, если можно обойтись тем, что есть? :-)
to GAZ, перед заполнением серии, Вы ее очищаете clear?
Николай Рубан

Николай Рубан (статус: 10-ый класс), 14 июля 2008, 20:45 [#7]:

Почему кардиограмма? График соответствует введенным данным.
В Chart-е есть один минус - он строит график/диаграмму по степени чтения/ввода данных, так что если Вас не устраивает порядок точек построения, просто перестройте порядок их ввода/чтения.
Вадим К

Вадим К (статус: Академик), 14 июля 2008, 21:16 [#8]:

to Мережников Андрей
А кто сказал, что добавлять? она автоматом создается. К тому же 4 байта погоды не испортят, а вот если к графику планируются частые обращения, то скорости, хоть и чуточку, но добавит. да и размер кода уменьшиться.
Галочка "подтверждения прочтения" - вселенское зло.
GAZ

GAZ (статус: Посетитель), 15 июля 2008, 06:28 [#9]:

Николай Рубан
Так как преодолеть этот минус, есть идеи?
...просто перестройте порядок их ввода/чтения... - не подходит.
StringGrid у меня заполняется по мере поступления точек по времени и каждый раз разное количество и разные координаты.
Вадим К

Вадим К (статус: Академик), 15 июля 2008, 11:17 [#10]:

а кто сказал, что это минус? это поведение по дизайну.
Что же делать? хранить данные в массиве, при добавлении новой точки сортировать (если массив уже отсортирован, то вставка новой точки - очень простоая задача) и обновлять Chart
Галочка "подтверждения прочтения" - вселенское зло.
GAZ

GAZ (статус: Посетитель), 15 июля 2008, 17:27 [#11]:

Вадим К
Пример Х,H кординаты самолёта(Y=0),они поступают каждые пять секунд,самолёт выполняет петлю,что вы здесь предлогаете сортировать и что вставлять и как обновлять.
Вадим К

Вадим К (статус: Академик), 15 июля 2008, 18:03 [#12]:

насколько мне известно, компонент TChart не умеет рисовать графики с петлями. Прийдётся ручками прорисовывать.
Галочка "подтверждения прочтения" - вселенское зло.
Николай Рубан

Николай Рубан (статус: 10-ый класс), 15 июля 2008, 19:39 [#13]:

Если уж так стоит вопрос, то используйте точечный график - но тем самым вы не увидите общий вид кривой, это минус...
Либо отказываться от TChart и прорисовывать график вручную прямо на канве, т.е. написать кусок кода, который будет выполнять построения графика по точкам. На мой взгляд это наиболее оптимальный вариант.
GAZ

GAZ (статус: Посетитель), 16 июля 2008, 06:13 [#14]:

Вадим К , Николай Рубан
Нашёл ответ на другом форуме

Series1.XValues.Order:=LoNone;!!!

{LoAscending - точки идут по нарастанию аргумента
LoDescending - по убыванию
LoNone - так как их ввели}

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 21 августа 2017, 15:02
Выполнено за 0.06 сек.
Рейтинг@Mail.ru