![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
всем привет.
такая задача построить график по данным из StringGrid, как это реализовать например в Tchart??? В таблице даны например: КПД Скольжение Трение 63 23,5 45,3 57 12,4 67,1 81 102,4 35,4 Нужно построить график зависимоти скольжения и КПД от трения! как это сделать помогите не могу разобраться!! Заранее спасибо огромное!! |
|
#2
|
|||
|
|||
|
вот обработчик на кнопку для построения графика, но ошибка при нажатии!!что не так??
Код:
procedure TForm1.btn10Click(Sender: TObject);
var
i: integer;
begin
with strngrd1 do
for i:=1 to RowCount-1 do
cht4.Series[1].AddXY(StrToFloat(strngrd1.Cells[3,i]),StrTofloat(strngrd1.Cells[4,i]),'',clTeeColor);
cht4.Series[2].AddXY(StrToFloat(strngrd1.Cells[3,i]),StrTofloat(strngrd1.Cells[5,i]),'',clTeeColor);
Series1.XValues.Order:=LoNone;
Series2.XValues.Order:=LoNone;
end;Последний раз редактировалось glorx, 16.12.2010 в 22:09. |
|
#3
|
||||
|
||||
|
Извини, нет времени смотреть на твой код, Я делал вот так. В принципе все просто, отредактируешь под себя и NULL проблем
Код:
with Chart1 do
begin
//если необходимо можешь задать min X , max Y, min Y , max Y
BottomAxis.Automatic:= False;
DBChart1.BottomAxis.Maximum := ...;
DBChart1.BottomAxis.Minimum := ...;
LeftAxis.Automatic := False;
LeftAxis.Maximum := ...;
LeftAxis.Minimum := ...;
//можешь проверить серию на повтор,например
if SeriesCount > 0 then
begin
for j:=0 to SeriesCount-1 do
begin
if (Series[j].Title = ...) then
exit;
end;
end;
UndoZoom;//востанавливаем исходный масштаб
Title.Text.Clear;
Title.Text.Add('....');//GRAPHIC
LeftAxis.AxisValuesFormat := '##.00';//
BottomAxis.Title.Caption := ...;//подписываем X
LeftAxis.Title.Caption := ...;//подписываем Y
Repaint;
end;
создаём серию
Series := TFastLineSeries.Create(Chart1); //тип FastLine
Series.ParentChart := Chart1; //назначение родительского графика
(Series as TFastLineSeries).LinePen.Width:=1;//толщина
Series.XValues.Order:= LoNone; //чтобы соединялись точки так как их вводят!!!
for j := 1 to StringGrid1.RowCount-1 do
begin
Series.AddXY(strtoint(StringGrid1.Cells[1,j]),strtoint (StringGrid1.Cells[0,j]), '',clRed);
end;
Series.Title := ... ; //
Series.Active := True;Если что то не получится, пиши |
|
#4
|
|||
|
|||
|
привет, слушай вставил этот код , при нажатии на кнопку ошибку выдает:
http://s003.radikal.ru/i204/1012/bf/a10e832d6404.jpg и с моим кодом тож самое писал! в чем дело? |
|
#5
|
|||
|
|||
|
дело в том что пустая строка пытается преобразоваться в целое число.
насколько понимаю ошибка возникает вот тут Цитата:
|
|
#6
|
||||
|
||||
|
StringGrid то заполнен?
|
|
#7
|
|||
|
|||
|
аааа блин понял вообщем у меня изначально таблица из 9 строк(просто это максимально возможное кол-во строк)!!
а заполняться могут не все, ну например только 3!! а при построении графика он берет данные из всех!! попробую поправить чтобы брал только из заполненых!! отпишу что получится, спасибо! |
|
#8
|
||||
|
||||
|
Ага, пиши.
|
|
#9
|
|||
|
|||
|
вообщем что получилось график вроде строит, незнаю правильно ли)
ругается на Series1 и Series2 которые я вручную прописал вначале: Series1:Tfastlineseries Series2:Tfastlineseries но нажимаем no и запускает прогу, как от этого сообщения избавится? и еще график мелкий какой та, как увеличить? и нужно чтобы значения по оси x и y подписаны были хотябы!! В самом TСhart я ничего не делал! вот код если что: Код:
procedure TForm1.btn10Click(Sender: TObject);
var j,n: integer;
begin
with Chart1 do
begin
UndoZoom;//востанавливаем исходный масштаб
Title.Text.Clear;
Title.Text.Add('Зависимость КПД и коэф.сколжения от коэф.тяги');//GRAPHIC
LeftAxis.AxisValuesFormat := '##.00';//
BottomAxis.Title.Caption := 'трение';//подписываем X
LeftAxis.Title.Caption := 'кпд и скольжение';//подписываем Y
Repaint;
end;
//создаём серию
Series1:=TFastLineSeries.Create(Chart1); //тип FastLine
Series1.ParentChart := Chart1; //назначение родительского графика
(Series1 as TFastLineSeries).LinePen.Width:=2;//толщина
Series1.XValues.Order:= LoNone; //чтобы соединялись точки так как их вводят!!!
Series2:=TFastLineSeries.Create(Chart1); //тип FastLine
Series2.ParentChart := Chart1; //назначение родительского графика
(Series2 as TFastLineSeries).LinePen.Width:=2;//толщина
Series2.XValues.Order:= LoNone; //чтобы соединялись точки так как их вводят!!!
n:=StrToInt(Form1.lbledt23.text);
for j := 1 to n do //n - это чтобы брал только троки заполненые а не все, n - кол-во опытов вводим раньше!!
begin
Series1.AddXY(StrToFloat(strngrd1.Cells[3,j]),StrToFloat(strngrd1.Cells[4,j]), '',clRed);
Series2.AddXY(strtofloat(strngrd1.Cells[3,j]),strtofloat(strngrd1.Cells[5,j]), '',clGreen);
end;
Series1.Title := 'Скольжение'; //
Series1.Active := True;
Series2.Title := 'КПД'; //
Series2.Active := True;
end; |
|
#10
|
||||
|
||||
|
Где ты указал на Series1, Series2?
Принцип работы с графиком понял? Выдели Chart1 и нажми F1. Там это есть. |
|
#11
|
|||
|
|||
|
Цитата:
|
|
#12
|
||||
|
||||
|
Нет, Ты все правильно указал
Пройдись построчно, погляди где ошибка выходит |
|
#13
|
|||
|
|||
|
слушай указал в var непосредственно в процедуре и все вроде нормально стало!))
С графиком не совсем разобрался пока что!!серии ведь создаются из кода а не в настройке компонента вручную, а значит и настройку серий:отображение и т.д нужно в коде делать, я правильно понимаю?? и еще такой вопрос не в тему, как сделать чтобы в Edit числа можно было вводить как через точку так и через запятую!! а то ошибку выдает при точке!! |