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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.06.2010, 21:16
Aksanka2004 Aksanka2004 вне форума
Прохожий
 
Регистрация: 31.05.2010
Сообщения: 16
Репутация: 10
По умолчанию График по точкам

Есть некоторые числа, выводящиеся в Edit-ах. Необходимо по этим числам (точкам) построить график(как в Экселе). Нашла только как сделать график по формуле. Подскажите пожалуйста как это реализовать!
Ответить с цитированием
  #2  
Старый 11.06.2010, 21:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Загнать точки в массив и дальше так же, как и по формуле - формула у тебя будет "получение I-го элемента массива".
Ответить с цитированием
  #3  
Старый 11.06.2010, 21:58
Aksanka2004 Aksanka2004 вне форума
Прохожий
 
Регистрация: 31.05.2010
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Загнать точки в массив и дальше так же, как и по формуле - формула у тебя будет "получение I-го элемента массива".

Как загнать?)) При слове массив я сразу с ужасом вспоминаю первый курс))) И как получить?
З.Ы. Я недавно из блондинки перекрасилась, так что не судите строго. А если возможно, дайте плз ссылочку на подробное описание того КАК это делается или более или менее пошагово распишите здесь как это) Заранее мерси)
Ответить с цитированием
  #4  
Старый 11.06.2010, 22:33
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Простой пример рис по точкам из массива:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 Massiv: Array [0..5] of Integer;
 X,Y: Integer;
begin
 Massiv[0]:= 1;
 Massiv[1]:= 50;
 Massiv[2]:= 100;
 Massiv[3]:= 200;
 Massiv[4]:= 220;   
 Massiv[5]:= 250;    
 For X:= 0 To 5 Do
  begin
   Y:= Massiv[X];  
   Image1.Canvas.LineTo(X*50,Image1.Height-Y);
  end;
end;
Ответить с цитированием
  #5  
Старый 11.06.2010, 22:57
Aksanka2004 Aksanka2004 вне форума
Прохожий
 
Регистрация: 31.05.2010
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Сообщение от AND_REY
Простой пример рис по точкам из массива:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 Massiv: Array [0..5] of Integer;
 X,Y: Integer;
begin
 Massiv[0]:= 1;
 Massiv[1]:= 50;
 Massiv[2]:= 100;
 Massiv[3]:= 200;
 Massiv[4]:= 220;   
 Massiv[5]:= 250;    
 For X:= 0 To 5 Do
  begin
   Y:= Massiv[X];  
   Image1.Canvas.LineTo(X*50,Image1.Height-Y);
  end;
end;

Имеется ввиду, что я помещаю комп. Image и кнопку "Построить график" и по клику вписываю процедуру? Т.е. по этому примеру получается что Х от 0 до 5, а У от 1 до 250?
Еще не совсем понятно что значит строчка
Код:
Image1.Canvas.LineTo(X*50,Image1.Height-Y);
Ответить с цитированием
  #6  
Старый 12.06.2010, 10:42
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Да рисовать на Image1 по нажатию на кнопку - это я так предложил как лёгкий вариант реализации. Можно и др. способами но они сложнее.
X от 0 до 5 а У берёться с массива 1,50,100...и т.д. любые числа необезательно в порядке возрастания.
Image1.Canvas.LineTo(X,Y) - рисует линию с координатами Х, У начиная с предыдущей точки (если такой ещё нет то с 0,0)
X*50 - просто увеличил масштаб т.к 5 пикселей будет плохо видно
Image1.Height-Y = (Высота Image1) - У для того чтоб начало координат было в левом нижнем углу. (по умолчанию начало в левом верхнем углу)

Может вам нада из массива брать и Х и У и рисовать график с осями координат? Откуда берёться массив с координатами у вас? Напишите подробно я набросаю код.
Ответить с цитированием
  #7  
Старый 12.06.2010, 13:17
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

Когда-то я занимался этой проблемой. Поищу исходник и скину.
__________________
APPLICATION.TERMINATOR
Ответить с цитированием
  #8  
Старый 12.06.2010, 13:18
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

Когда-то я занимался этой проблемой. Поищу исходник и скину свой вариант
__________________
APPLICATION.TERMINATOR
Ответить с цитированием
  #9  
Старый 12.06.2010, 14:31
Aksanka2004 Aksanka2004 вне форума
Прохожий
 
Регистрация: 31.05.2010
Сообщения: 16
Репутация: 10
По умолчанию

Так-с... По Y идут месяца от 0 до 6, в 0 соответственно и Х равен 0. Изменения начинаются с 1-го месяца. Иксы берутся из Эдит1, Эдит2...Эдит6. Числа в этих эдитах появляются не при вводе с клавы, а при выислении других эдитов, введенных уже с клавы) Прошу прощения за сумбур, но по другому никак))
О! Еще один способ объяснения: представьте, что в эдиты вводится ЗП для каждого сотрудника в течение 6 месяцев. А потом в Эдит1-Эдит6 подсчитывается общий фонд ЗП. Нужен график изменения этого общего фонда ЗП по месяцам.
Уффф Заранее благодарю))
Ответить с цитированием
  #10  
Старый 12.06.2010, 14:53
Аватар для timeless
timeless timeless вне форума
Прохожий
 
Регистрация: 27.06.2008
Сообщения: 36
Репутация: 12
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  sl: tstringlist;
begin
  sl:=tstringlist.Create;
  sl.Add(edit1.Text);
  sl.Add(edit2.Text);
  sl.Add(edit3.Text);
  sl.Add(edit4.Text);
  sl.Add(edit5.Text);
  sl.Add(edit6.Text);
  image1.Canvas.MoveTo(0,Image1.Height-strtoint(edit1.Text));
  for i:=0 to sl.Count-1 do begin
    image1.Canvas.LineTo(i*50, Image1.Height-strtoint(sl[i]))
  end;
  sl.Free;
end;
Ответить с цитированием
  #11  
Старый 13.06.2010, 00:30
Aksanka2004 Aksanka2004 вне форума
Прохожий
 
Регистрация: 31.05.2010
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Сообщение от timeless
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  sl: tstringlist;
begin
  sl:=tstringlist.Create;
  sl.Add(edit1.Text);
  sl.Add(edit2.Text);
  sl.Add(edit3.Text);
  sl.Add(edit4.Text);
  sl.Add(edit5.Text);
  sl.Add(edit6.Text);
  image1.Canvas.MoveTo(0,Image1.Height-strtoint(edit1.Text));
  for i:=0 to sl.Count-1 do begin
    image1.Canvas.LineTo(i*50, Image1.Height-strtoint(sl[i]))
  end;
  sl.Free;
end;

У меня ошибочка) В эдитах значение дробное, поэтому сразу пишет EConvertError и 'value is not integer'=(
Меняю i на real и strtoint на strtofloat и ничего( сразу пишет ошибку в строке
Код:
image1.Canvas.MoveTo(0,Image1.Height-strtoint(edit1.Text));
Ошибка:
[Error] Unit9.pas(253): Incompatible types: 'Integer' and 'Extended'

Как решить?
Ответить с цитированием
  #12  
Старый 13.06.2010, 00:45
Аватар для timeless
timeless timeless вне форума
Прохожий
 
Регистрация: 27.06.2008
Сообщения: 36
Репутация: 12
По умолчанию

Код:
...
  image1.Canvas.MoveTo(0,Image1.Height-round(strtofloat(edit1.Text)));
  for i:=0 to sl.Count-1 do begin
    image1.Canvas.LineTo(i*50, Image1.Height-round(strtofloat(sl[i])));
  end;
  sl.Free;
end;
Ответить с цитированием
  #13  
Старый 13.06.2010, 15:28
Aksanka2004 Aksanka2004 вне форума
Прохожий
 
Регистрация: 31.05.2010
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Сообщение от timeless
Код:
...
  image1.Canvas.MoveTo(0,Image1.Height-round(strtofloat(edit1.Text)));
  for i:=0 to sl.Count-1 do begin
    image1.Canvas.LineTo(i*50, Image1.Height-round(strtofloat(sl[i])));
  end;
  sl.Free;
end;

Пасиб) Работает. Но при больших числах графика совсем не видно.Чтоб видно было, может не умножать на 50? Или это не так исправляется?
Ответить с цитированием
  #14  
Старый 13.06.2010, 15:55
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
По умолчанию

масштабируй по размеру формы
Код:
px,py,qx,qy:double; // масшабные множетели
...

    x1; // минимальный X
    y1; // максимальный Y
    x2; // максимальный X
    y2; // минимальный Y

    left:=0; top:=0; right:=myForm.ClientWidth; bottom:=myForm.ClientHeight; // твоя форма
    px:=(right-left)/(x2-x1); qx:=left-px*x1;
    py:=(bottom-top)/(y2-y1); qy:=top-y1*py  // здесь вычисляем масштабные множетели

...

function xs(x:double):integer;
begin                                // вычисляем экранные координаты
  result:=round(px*x+qx);
end;
function ys(y:double):integer;
begin
  result:=round(py*y+qy);
end;

...

//рисуем:
LineTo(xs(твой x),ys(твой y);
__________________
знаете почему внизу эскалатора бабка в будке сидит?
она там педальки крутит и лесенка едет!

Последний раз редактировалось SerginhoLD, 13.06.2010 в 16:00.
Ответить с цитированием
  #15  
Старый 13.06.2010, 16:03
Aksanka2004 Aksanka2004 вне форума
Прохожий
 
Регистрация: 31.05.2010
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Сообщение от SerginhoLD
масштабируй по размеру формы
Код:
px,py,qx,qy:double; // масшабные множетели
...

    x1; // минимальный X
    y1; // максимальный Y
    x2; // максимальный X
    y2; // минимальный Y

    left:=0; top:=0; right:=myForm.ClientWidth; bottom:=myForm.ClientHeight; // твоя форма
    px:=(right-left)/(x2-x1); qx:=left-px*x1;
    py:=(bottom-top)/(y2-y1); qy:=top-y1*py  // здесь вычисляем масштабные множетели

...

function xs(x:double):integer;
begin                                // вычисляем экранные координаты
  result:=round(px*x+qx);
end;
function ys(y:double):integer;
begin
  result:=round(py*y+qy);
end;

...

//рисуем:
LineTo(xs(твой x),ys(твой y);

Уффф))) Щас будем разбираться))) а мин.х и мин.у я лапками прописываю? Я ж типа не знаю какой эдит будет минимальным, а какой максимальным! Таким образом не очень понятен кусок:
Код:
x1; // минимальный X
    y1; // максимальный Y
    x2; // максимальный X
    y2; // минимальный Y
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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