Добрый день! Необходимо написать графический редактор следующего вида: Окно разбито на 2 части, в левой вводятся параметры фигуры, в правой она отрисовывается. Например: для начала задан прямоугольник высотой 50 и шириной 100. Указываем высоту - 25, на ней ширина 50 и фигура должна преобразоваться, приняв форму песочных часов и далее в этом духе. Надеюсь нормально объяснил...
Программу еще не начал, код писать не прошу, необходима консультация в том, какие элементы выбрать для разработки, TPaintBox или TImage и т.д. и как лучше всё это отрисовывать, может кто может дать совет?
Действительно, ошибок не выдает, но это не значит, что работает... думаю я не в том месте его указываю(хотя пробовал в разных) или аргументы не те, посмотрите, пожалуйста, может какие замечания будут по стилю или применению функций, новичок в этом деле, готов учиться на своих ошибках...
procedure TForm1.BitBtn1Click(Sender: TObject); var i,j:integer; a1,a2,buf1,buf2:real; MyRect:TRect; begin //ar1 и ar2-содержат точки фигуры(1-левая грань,2-правая) img.Canvas.Pen.Color:=clBlack; l:=StrtoInt(edit1.text); h:=StrtoInt(edit2.text); //Начальная фигура -прямоугольник(зададим углы) ar1[1,1]:=10; ar1[2,1]:=10; ar1[1,100]:=10; ar1[2,100]:=10+h; ar2[1,1]:=10+l; ar2[2,1]:=10; ar2[1,100]:=10+l; ar2[2,100]:=10+h; //заполним массивы точками из таблицы for i:=1 to 100 do begin if (StringGrid1.Cells[0, i]<>'') and (StringGrid1.Cells[1, i]<>'') then begin a1:=StrToInt(StringGrid1.Cells[0, i]); a2:=StrToInt(StringGrid1.Cells[1, i]); ar1[1,i+1]:=10+Round((l-a1)/2); ar1[2,i+1]:=10+a2; ar2[1,i+1]:=10+Round((l-a1)/2)+a1; ar2[2,i+1]:=10+a2; end; end; //Сортируем массивы по высоте for i:=1 to 100 do for j:=1 to 100 do if ar1[2,i]<ar1[2,j] then begin buf1:=ar1[1,j]; buf2:=ar1[2,j]; ar1[1,j]:=ar1[1,i]; ar1[2,j]:=ar1[2,i]; ar1[1,i]:=buf1; ar1[2,i]:=buf2; end; for i:=1 to 100 do for j:=1 to 100 do if ar2[2,i]<ar2[2,j] then begin buf1:=ar2[1,j]; buf2:=ar2[2,j]; ar2[1,j]:=ar2[1,i]; ar2[2,j]:=ar2[2,i]; ar2[1,i]:=buf1; ar2[2,i]:=buf2; end; //Печать того, что получилось img.Canvas.MoveTo(10,10); for i:=1 to 100 do begin if (ar1[1, i]<>0) and (ar1[2, i]<>0) then begin img.Canvas.LineTo(Round(ar1[1,i]),Round(ar1[2,i])); end; end; img.Canvas.MoveTo(10+l,10); for i:=1 to 100 do begin if (ar2[1, i]<>0) and (ar2[2, i]<>0) then begin img.Canvas.LineTo(Round(ar2[1,i]),Round(ar2[2,i])); end; end; //Отрисовка верхней и нижней граней img.Canvas.MoveTo(10,10); img.Canvas.LineTo(10+l,10); img.Canvas.MoveTo(10,10+h); img.Canvas.LineTo(10+l,10+h); //Перевод изображения из буфера MyRect := Rect(0,0,Image1.ClientWidth,Image1.ClientHeight); Image1.Canvas.StretchDraw(MyRect, Image1.Picture.Graphic); Image1.Canvas.CopyRect(bounds(0,0,img.Width,img.Height), img.Canvas,bounds(0,0,img.Width,img.Height)); end;