![]() |
|
|
#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
|
|||
|
|||
|
Когда-то я занимался этой проблемой. Поищу исходник и скину.
|
|
#8
|
|||
|
|||
|
Когда-то я занимался этой проблемой. Поищу исходник и скину свой вариант
|
|
#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 |