Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 25.07.2012, 17:27   #1 (permalink)
vladis222
Новичок
 
Регистрация: 25.07.2012
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Проблема с рисованием треугольников 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.
vladis222 вне форума   Ответить с цитированием

Старый 25.07.2012, 17:27
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Если воспользоваться поиском, то можно найти много полезного по вашему запросу

DELPHI
Помощь в Delphi

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.