| 
| 
 | Вопрос # 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 - так как их ввели}
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |