![]() |
|
#1
|
|||
|
|||
![]() Есть некоторые числа, выводящиеся в Edit-ах. Необходимо по этим числам (точкам) построить график(как в Экселе). Нашла только как сделать график по формуле. Подскажите пожалуйста как это реализовать!
|
#2
|
|||
|
|||
![]() Загнать точки в массив и дальше так же, как и по формуле - формула у тебя будет "получение I-го элемента массива".
|
#3
|
|||
|
|||
![]() Цитата:
Как загнать?)) При слове массив я сразу с ужасом вспоминаю первый курс))) И как получить? З.Ы. Я недавно из блондинки перекрасилась, так что не судите строго. А если возможно, дайте плз ссылочку на подробное описание того КАК это делается или более или менее пошагово распишите здесь как это) Заранее мерси) |
#4
|
||||
|
||||
![]() Простой пример рис по точкам из массива:
Код:
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
|
|||
|
|||
![]() Цитата:
Имеется ввиду, что я помещаю комп. Image и кнопку "Построить график" и по клику вписываю процедуру? Т.е. по этому примеру получается что Х от 0 до 5, а У от 1 до 250? Еще не совсем понятно что значит строчка Код:
Image1.Canvas.LineTo(X*50,Image1.Height-Y); |
#6
|
||||
|
||||
![]() Да рисовать на Image1 по нажатию на кнопку - это я так предложил как лёгкий вариант реализации. Можно и др. способами но они сложнее.
X от 0 до 5 а У берёться с массива 1,50,100...и т.д. любые числа необезательно в порядке возрастания. Image1.Canvas.LineTo(X,Y) - рисует линию с координатами Х, У начиная с предыдущей точки (если такой ещё нет то с 0,0) X*50 - просто увеличил масштаб т.к 5 пикселей будет плохо видно ![]() Image1.Height-Y = (Высота Image1) - У для того чтоб начало координат было в левом нижнем углу. (по умолчанию начало в левом верхнем углу) Может вам нада из массива брать и Х и У и рисовать график с осями координат? Откуда берёться массив с координатами у вас? Напишите подробно я набросаю код. |
#7
|
|||
|
|||
![]() Когда-то я занимался этой проблемой. Поищу исходник и скину.
APPLICATION.TERMINATOR |
#8
|
|||
|
|||
![]() Когда-то я занимался этой проблемой. Поищу исходник и скину свой вариант
APPLICATION.TERMINATOR |
#9
|
|||
|
|||
![]() Так-с... По Y идут месяца от 0 до 6, в 0 соответственно и Х равен 0. Изменения начинаются с 1-го месяца. Иксы берутся из Эдит1, Эдит2...Эдит6. Числа в этих эдитах появляются не при вводе с клавы, а при выислении других эдитов, введенных уже с клавы) Прошу прощения за сумбур, но по другому никак))
О! Еще один способ объяснения: представьте, что в эдиты вводится ЗП для каждого сотрудника в течение 6 месяцев. А потом в Эдит1-Эдит6 подсчитывается общий фонд ЗП. Нужен график изменения этого общего фонда ЗП по месяцам. Уффф ![]() |
#10
|
||||
|
||||
![]() Код:
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
|
|||
|
|||
![]() Цитата:
У меня ошибочка) В эдитах значение дробное, поэтому сразу пишет 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
|
||||
|
||||
![]() Код:
... 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
|
|||
|
|||
![]() Цитата:
Пасиб) Работает. Но при больших числах графика совсем не видно.Чтоб видно было, может не умножать на 50? Или это не так исправляется? |
#14
|
||||
|
||||
![]() масштабируй по размеру формы
Код:
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
|
|||
|
|||
![]() Цитата:
Уффф))) Щас будем разбираться))) а мин.х и мин.у я лапками прописываю? Я ж типа не знаю какой эдит будет минимальным, а какой максимальным! Таким образом не очень понятен кусок: Код:
x1; // минимальный X y1; // максимальный Y x2; // максимальный X y2; // минимальный Y |