Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.12.2010, 10:11
glorx glorx вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 33
Репутация: 10
По умолчанию Построение графика из StringGrid

всем привет.
такая задача построить график по данным из StringGrid, как это реализовать например в Tchart???
В таблице даны например:


КПД Скольжение Трение
63 23,5 45,3
57 12,4 67,1
81 102,4 35,4
Нужно построить график зависимоти скольжения и КПД от трения!
как это сделать помогите не могу разобраться!!
Заранее спасибо огромное!!
Ответить с цитированием
  #2  
Старый 16.12.2010, 16:30
glorx glorx вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 33
Репутация: 10
По умолчанию

вот обработчик на кнопку для построения графика, но ошибка при нажатии!!что не так??
Код:
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  
Старый 17.12.2010, 08:15
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

Извини, нет времени смотреть на твой код, Я делал вот так. В принципе все просто, отредактируешь под себя и 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  
Старый 17.12.2010, 09:18
glorx glorx вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 33
Репутация: 10
По умолчанию

привет, слушай вставил этот код , при нажатии на кнопку ошибку выдает:
http://s003.radikal.ru/i204/1012/bf/a10e832d6404.jpg
и с моим кодом тож самое писал! в чем дело?
Ответить с цитированием
  #5  
Старый 17.12.2010, 09:22
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

дело в том что пустая строка пытается преобразоваться в целое число.

насколько понимаю ошибка возникает вот тут
Цитата:
(StringGrid1.Cells[1,j]),strtoint (StringGrid1.Cells[0,j]
?
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #6  
Старый 17.12.2010, 09:58
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

StringGrid то заполнен?
Ответить с цитированием
  #7  
Старый 17.12.2010, 12:11
glorx glorx вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 33
Репутация: 10
По умолчанию

аааа блин понял вообщем у меня изначально таблица из 9 строк(просто это максимально возможное кол-во строк)!!
а заполняться могут не все, ну например только 3!!
а при построении графика он берет данные из всех!!
попробую поправить чтобы брал только из заполненых!!
отпишу что получится, спасибо!
Ответить с цитированием
  #8  
Старый 17.12.2010, 12:15
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

Ага, пиши.
Ответить с цитированием
  #9  
Старый 17.12.2010, 12:56
glorx glorx вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 33
Репутация: 10
По умолчанию

вообщем что получилось график вроде строит, незнаю правильно ли)
ругается на 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  
Старый 17.12.2010, 14:21
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

Где ты указал на Series1, Series2?
Принцип работы с графиком понял?
Выдели Chart1 и нажми F1. Там это есть.
Ответить с цитированием
  #11  
Старый 17.12.2010, 15:45
glorx glorx вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Где ты указал на Series1, Series2?
эти указал в type вначале unit'a..может нужно в var в процедуре на кнопке??
Ответить с цитированием
  #12  
Старый 17.12.2010, 16:27
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

Нет, Ты все правильно указал
Пройдись построчно, погляди где ошибка выходит
Ответить с цитированием
  #13  
Старый 17.12.2010, 16:43
glorx glorx вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 33
Репутация: 10
По умолчанию

слушай указал в var непосредственно в процедуре и все вроде нормально стало!))
С графиком не совсем разобрался пока что!!серии ведь создаются из кода а не в настройке компонента вручную, а значит и настройку серий:отображение и т.д нужно в коде делать, я правильно понимаю??
и еще такой вопрос не в тему, как сделать чтобы в Edit числа можно было вводить как через точку так и через запятую!! а то ошибку выдает при точке!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter