|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Построение графика из StringGrid
всем привет.
такая задача построить график по данным из 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 числа можно было вводить как через точку так и через запятую!! а то ошибку выдает при точке!! |