vladis222 |
25.07.2012 17:27 |
Проблема с рисованием треугольников Delphi
Здравствуйте,обращаюсь к вам по такому поводу- у меня в программе-при нажатии на какое-то меню, должна отображаться фигура,должен меняться цвет, и также при увеличении окна формы или уменьшении фигура должна увеличиваться или уменьшаться пропорционально в размерах. Я это выполнил все, все работает,за исключением треугольников.Там такая проблема-треугольник,безусловно рисуется и при уменьшении или увеличении главного окна,при уменьшении главного окна,увеличивается или уменьшается, но когда его сузить,то изобр. треуг. начинает искажаться.Рисовал все фиг. в paint box . Из-за этой неурядки наш козел руководитель лабораторных лаб, не принял ее,хотя она полностью работает. Что нужно изменить в коде, чтобы треугольник не искажался. Вот код программы:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ExtCtrls;
type
TFigure = (None,Line, Square, Tri, Ell, Circle);
TForm1 = class(TForm)
MainMenu1: TMainMenu;
D1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
N8: TMenuItem;
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure CheckBox3Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PaintBox1Paint(Sender: TObject);
procedure PaintBox1Click(Sender: TObject);
private
{ Private declarations }
Heig,Wid:Integer;
public
Figure: TFigure;
Red, Green, Blue: Integer;
{ Public declarations }
end;
TSizeAndPos = Record
Width_,
Left_,
Height_,
Top_ : Integer
End;
var
Form1: TForm1;
HResize_ : Integer;
WResize_ : Integer;
WdivH : Extended;
ArrSize : Array Of TSizeAndPos;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
Var
i : Integer;
begin
Figure := None;
Red := 0;
Green := 0;
Blue := 0;
Checkbox1.Enabled := false;
Checkbox2.Enabled := false;
Checkbox3.Enabled := false;
Form1.Refresh;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Finalize(ArrSize);
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Figure := Ell;
Form1.Refresh;
Checkbox1.Enabled := true;
Checkbox2.Enabled := true;
Checkbox3.Enabled := true;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Figure := Circle;
Form1.Refresh;
Checkbox1.Enabled := true;
Checkbox2.Enabled := true;
Checkbox3.Enabled := true;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
Figure := Line;
Form1.Refresh;
Checkbox1.Enabled := true;
Checkbox2.Enabled := true;
Checkbox3.Enabled := true;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
Figure := Square;
Form1.Refresh;
Checkbox1.Enabled := true;
Checkbox2.Enabled := true;
Checkbox3.Enabled := true;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
Figure := Tri;
Form1.Refresh;
Checkbox1.Enabled := true;
Checkbox2.Enabled := true;
Checkbox3.Enabled := true;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if Red = 0 then
Red := 255
else
Red := 0;
Form1.Refresh;
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if Blue = 0 then
Blue := 255
else
Blue := 0;
Form1.Refresh;
end;
procedure TForm1.CheckBox3Click(Sender: TObject);
begin
if Green = 0 then
Green := 255
else
Green := 0;
Form1.Refresh;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Figure := None;
Checkbox1.Enabled := false;
Checkbox2.Enabled := false;
Checkbox3.Enabled := false;
Form1.Refresh;
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
with Form1.Canvas do
begin
Brush.Color:=RGB(Red, Green, Blue);
Pen.Color:=RGB(Red, Green, Blue);
if (Figure = Circle) and (paintbox1.height<paintbox1.width) then
Ellipse(10, 10, paintbox1.height,paintbox1.height);
if (Figure = Circle) and (paintbox1.width<paintbox1.height) then
Ellipse(10, 10, paintbox1.width,paintbox1.width);
if Figure = Ell then
Ellipse(10, 10, paintbox1.width, paintbox1.height);
if Figure = Line then
begin
MoveTo(10,10);
LineTo(paintbox1.width,paintbox1.height);
end;
if (Figure = Square) and (paintbox1.height<paintbox1.width) then
FillRect(Bounds(10, 10, paintbox1.height-10, paintbox1.height-10));
if(Figure=Square) and (paintbox1.width<paintbox1.height) then
FillRect(Bounds(10, 10, paintbox1.width-10, paintbox1.width-10));
end;
if (Figure = Tri) then
Canvas.Polygon([Point(30, 10),Point(paintbox1.height,paintbox1.height), Point(paintbox1.width,paintbox1.width)]);
end;
procedure TForm1.PaintBox1Click(Sender: TObject);
begin
end;
end.
|