Добрый день! Необходимо написать графический редактор следующего вида: Окно разбито на 2 части, в левой вводятся параметры фигуры, в правой она отрисовывается. Например: для начала задан прямоугольник высотой 50 и шириной 100. Указываем высоту - 25, на ней ширина 50 и фигура должна преобразоваться, приняв форму песочных часов и далее в этом духе. Надеюсь нормально объяснил...
Программу еще не начал, код писать не прошу, необходима консультация в том, какие элементы выбрать для разработки, TPaintBox или TImage и т.д. и как лучше всё это отрисовывать, может кто может дать совет?
Извините, придется заходить не под собой, мой профиль исчез куда-то)))) Навоял что-то, но работает оно совсем не так... Отрисовывается что-то непонятное, а из-за того, что изображение строю в буфере, отследить по шагам не удается... Может я что не так делаю? Подскажите, пожалуйста... Код:
procedure TForm1.BitBtn1Click(Sender: TObject); var i:integer; a1,a2:real; 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:=2 to 100 do begin if (StringGrid1.Cells[1, i]<>'') and (StringGrid1.Cells[2, i]<>'') then begin a1:=StrToInt(StringGrid1.Cells[1, i]); a2:=StrToInt(StringGrid1.Cells[2, i]); ar1[1,i]:=10+Round((h-a1)/2); ar1[2,i]:=10+a2; ar2[1,i]:=10+Round((h-a1)/2)+a1; ar2[2,i]:=10+a2; end; end; //Тут надо отсортировать массивы ar1 и ar2 по высоте
//Печать того, что получилось 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,10+l); 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+l); img.Canvas.LineTo(10+h,10+l); //Перевод изображения из буфера paintbox1.Canvas.CopyRect(bounds(0,0,img.Width,img.Height), img.Canvas,bounds(0,0,img.Width,img.Height)); end;
end.
Массивы ar1 и ar2 из StringGrid по-моему он не заполняет... или потом не считывает....