Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2009, 19:44   #1
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
Счастье Построение графика из StringGrid в Chart

Короче нужна ваша помощь вот в чем: нужно что бы при нажатии на кнопочку строился график в Chart а данные для построение брал из StringGrid'a, естественно что бы все было подписано (тоесть какой год, и месяц). Вот как я пробовал, но у меня ниче не получилось. Вывод только один, либо я полный олень, либо просто олень.
Код:
Series1.AddXY(j, strtoint(StringGrid1.Cells[1,j]), StringGrid1.Cells[0,j], clRed)
Вот выложу фотку проги что бы было более понятно что я имел ввиду под "все было подписано".
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 25.03.2009, 07:21   #2
GennadijZotov
 
Регистрация: 24.03.2009
Сообщений: 6
По умолчанию

Код:
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;
Да и избався от знака доллара
From Stilet: Про форматирование кода не забываем.

Последний раз редактировалось Stilet; 25.03.2009 в 08:02.
GennadijZotov вне форума Ответить с цитированием
Старый 25.03.2009, 07:30   #3
GennadijZotov
 
Регистрация: 24.03.2009
Сообщений: 6
По умолчанию

не забудь
var Series : TFastLineSeries;
GennadijZotov вне форума Ответить с цитированием
Старый 25.03.2009, 17:44   #4
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию Непонятка...

Я конечно извиняюсь за свою тупость, но все же, вставил код который вы мне предоставили, ну естественно отредактировал, но, при нажатии на кнопочку построения графика сам график не строится, вот код, то что я там редактировал посмотрите может я просто чуть не то написал, и картинка того что у меня показывает:
Код:
procedure TForm1.Image10Click(Sender: TObject);
var Series : TFastLineSeries;
j: integer;
begin
with Chart1 do
  begin
//åñëè íåîáõîäèìî ìîæåøü çàäàòü  min X , max X,   min Y , max Y
      BottomAxis.Automatic:= False;
      Chart1.BottomAxis.Maximum := 12;
      Chart1.BottomAxis.Minimum := 1;
      LeftAxis.Automatic := False;
      LeftAxis.Maximum := 2008;
      LeftAxis.Minimum := 2006;
//ìîæåøü ïðîâåðèòü ñåðèþ íà ïîâòîð,íàïðèìåð
  if SeriesCount > 0 then
    begin
     for j:=0 to SeriesCount-1 do
      begin
       if (Series[j].Title = '554') then
        exit;
      end;
    end;
   UndoZoom;//âîñòàíàâëèâàåì èñõîäíûé ìàñøòàá
   Title.Text.Clear;
   Title.Text.Add('Statistiks of payout');//GRAPHIC
   LeftAxis.AxisValuesFormat := '##';//ôîðìàò ÷èñåë
   BottomAxis.Title.Caption  := 'month of payout';//ïîäïèñûâàåì X
   LeftAxis.Title.Caption    := 'year payout';//ïîäïèñûâàåì 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[1,j]), '',clBlack);
    end;
Series.Title := 'year payout' ; //
 Series.Active := True;
end;

end.
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 25.03.2009, 20:23   #5
GennadijZotov
 
Регистрация: 24.03.2009
Сообщений: 6
По умолчанию

Ну брат ты даёшь
...Series.AddXY(strtoint(StringGrid 1.Cells[1,j]),strtoint (StringGrid1.Cells[1,j]), '',clBlack);...
столб 1 от столба 1
и второе представь что у тебя в столбе 1 параметры - X ,а в столбе 2 - Y . Ты min и max понятия понимаешь,при чём тут номера месяца и года,если не дошло,выбрось из кода строки.
BottomAxis.Automatic:= False;
Chart1.BottomAxis.Maximum := 12;
Chart1.BottomAxis.Minimum := 1;
LeftAxis.Automatic := False;
LeftAxis.Maximum := 2008;
LeftAxis.Minimum := 2006;
GennadijZotov вне форума Ответить с цитированием
Старый 25.03.2009, 20:34   #6
GennadijZotov
 
Регистрация: 24.03.2009
Сообщений: 6
По умолчанию

Да и ещё ты обзываешь свою серию
Series.Title := 'year payout'
,а проверяешь на
...if (Series[j].Title = '554') then...
мыло у меня genazot@mail.ru вопросы ещё будут туда,я тут не эксперт.
GennadijZotov вне форума Ответить с цитированием
Старый 25.03.2009, 21:00   #7
GennadijZotov
 
Регистрация: 24.03.2009
Сообщений: 6
По умолчанию

Упс извини дошло по X у тебя правильно 12-max. Но у тебя должно быть 3 серии графиков,а вот название серий у тебя должно быть Series.Title := 2006, следующая 2007, далее 2008
...
Series.AddXY(j,strtoint (StringGrid1.Cells[1,j]),'',clBlack); -Series.Title:= 2006
...
Series.AddXY(j,strtoint (StringGrid1.Cells[2,j]),'',clBlack); -Series.Title:= 2007
...
Series.AddXY(j,strtoint (StringGrid1.Cells[3,j]),'',clBlack); -Series.Title:= 2008
....
т.е есть смысл перед ...with Chart1 do... организовать for по i - столбам и вместо 1,2,3 писать i (2005+i не забыть у названия серий).Короче это моё предположения,а дальше думай сам.
GennadijZotov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение графика kzmd Общие вопросы Delphi 1 19.01.2009 09:36
построение графика deadh5n1 Помощь студентам 2 13.09.2008 19:06
(С++) Построение графика tg(x)=y. Panterka Помощь студентам 2 13.12.2007 09:32
Построение графика KARSH Общие вопросы Delphi 3 28.05.2007 17:05
Построение Графика Боня Помощь студентам 3 20.01.2007 19:32