Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Проблема с рисованием треугольников Delphi (http://www.tehnari.ru/f43/t76588/)

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.



Часовой пояс GMT +4, время: 10:21.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.