|
Вопрос # 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 (статус: Посетитель)
Вопрос отправлен: 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 (статус: Посетитель), 14 июля 2008, 19:55 [#3]:
Вадим К
Вы может меня не поняли,я не про сглаженную кривую.Просто точки соединяются не последовательно.И вместо того что бы получить что то напоминающее дугу получается какая то кардиограмма.
|
|
GAZ (статус: Посетитель), 14 июля 2008, 19:59 [#4]:
Вадим К
...Cells[0,0]:=inttostr(2);
Цифры это я так для наглядности поставил,на самом деле там
...Cells[0,0]:=inttostr(i);
|
|
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 (статус: Посетитель), 15 июля 2008, 06:28 [#9]:
Николай Рубан
Так как преодолеть этот минус, есть идеи?
...просто перестройте порядок их ввода/чтения... - не подходит.
StringGrid у меня заполняется по мере поступления точек по времени и каждый раз разное количество и разные координаты.
|
|
Вадим К (статус: Академик), 15 июля 2008, 11:17 [#10]:
а кто сказал, что это минус? это поведение по дизайну.
Что же делать? хранить данные в массиве, при добавлении новой точки сортировать (если массив уже отсортирован, то вставка новой точки - очень простоая задача) и обновлять Chart
Галочка "подтверждения прочтения" - вселенское зло.
|
|
GAZ (статус: Посетитель), 15 июля 2008, 17:27 [#11]:
Вадим К
Пример Х,H кординаты самолёта(Y=0),они поступают каждые пять секунд,самолёт выполняет петлю,что вы здесь предлогаете сортировать и что вставлять и как обновлять.
|
|
Вадим К (статус: Академик), 15 июля 2008, 18:03 [#12]:
насколько мне известно, компонент TChart не умеет рисовать графики с петлями. Прийдётся ручками прорисовывать.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Николай Рубан (статус: 10-ый класс), 15 июля 2008, 19:39 [#13]:
Если уж так стоит вопрос, то используйте точечный график - но тем самым вы не увидите общий вид кривой, это минус...
Либо отказываться от TChart и прорисовывать график вручную прямо на канве, т.е. написать кусок кода, который будет выполнять построения графика по точкам. На мой взгляд это наиболее оптимальный вариант.
|
|
GAZ (статус: Посетитель), 16 июля 2008, 06:13 [#14]:
Вадим К , Николай Рубан
Нашёл ответ на другом форуме
Series1.XValues.Order:=LoNone;!!!
{LoAscending - точки идут по нарастанию аргумента
LoDescending - по убыванию
LoNone - так как их ввели}
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|