Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2021, 20:03   #1
red_d
Новичок
Джуниор
 
Регистрация: 19.03.2015
Сообщений: 2
По умолчанию (Delphi) Не могу доделать задачку! нужно соединить линией

Задача такая:

Родитель – класс, позволяющий рисовать окружность некоторого размера с центром в точке,
определенной нажатием левой клавиши мыши.
Потомок – класс, позволяющий рисовать окружность того же размера с центром в точке,
определенной нажатием правой клавиши мыши, и соединять ее с предыдущей окружностью линией.
Радиус и цвет окружностей задавать с использованием интерфейсных элементов.

Только вот пунктик где их нужно соединять линией,немогу понять как сделать правильно,всё какие-то ошибки выдаёт
Помогите пожалуйста ,дополните программу,кто знает как.

Основная программа
Код:
program dz1_1;
uses
  Forms,
  Main in 'Main.pas' {MainForm},
  Figure in 'Figure.pas';
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.
Главный модуль
Код:
 
unit Main;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtCtrls;
type
  TMainForm = class(TForm)
    Image: TImage;
    ColorButton: TButton;
    ExitButton: TButton;
    rLabel: TLabel;
    rEdit: TEdit;
    UpDown: TUpDown;
    ColorDialog: TColorDialog;
    procedure FormActivate(Sender: TObject);
    procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure UpDownClick(Sender: TObject; Button: TUDBtnType);
    procedure ColorButtonClick(Sender: TObject);
    procedure ExitButtonClick(Sender: TObject);
  end;
var
  MainForm: TMainForm;
implementation
uses Figure;
Var C:TMyFigure;
{$R *.dfm}
procedure TMainForm.FormActivate(Sender: TObject);
begin
    Image.Canvas.Brush.Color:=clWhite;
    Image.Canvas.Pen.Color:=clBlack;
end;
procedure TMainForm.ImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then
    begin
        C.Free;
        C:=TMyCircle.Create(Image,X,Y,strtoint(rEdit.Text),Image.Canvas.Pen.Color);
    end;
  if Button=mbright then
    begin
        C.Free;
        C:=TMySquare.Create(Image,X,Y,strtoint(rEdit.Text),Image.Canvas.Pen.Color);
       end;
    end;
procedure TMainForm.UpDownClick(Sender: TObject; Button: TUDBtnType);
begin
  if C<>nil then C.Radius:=strtoint(rEdit.Text);
end;
procedure TMainForm.ColorButtonClick(Sender: TObject);
begin
  if ColorDialog.Execute then Image.Canvas.Pen.Color:=ColorDialog.Color;
  if C<>nil then C.Color:=Image.Canvas.Pen.Color;
end;
procedure TMainForm.ExitButtonClick(Sender: TObject);
begin
  Close;
end;
initialization
finalization C.Free;
end.
Модуль фигура
Код:
 
Unit Figure;
 Interface
  Uses  extctrls,Graphics;
  Type TMyFigure=class
       private    x,y,FRadius:Word;
          FColor:TColor;
          Image:TImage;
          procedure Clear;
          procedure SetSize(ar:word);
          procedure SetColor(aColor:TColor);
       public
          Constructor Create(aImage:TImage;ax,ay,ar:Word;aColor:TColor);
          Procedure Draw; virtual; abstract;
          Property Radius:Word write SetSize;
          Property Color:TColor write SetColor;
        end;
    TMyCircle=class(TMyFigure)
         public        Procedure Draw; override;
     end;
     TMySquare=class(TMyFigure)
         public        Procedure Draw; override;
     end;
Implementation
   Constructor TMyFigure.Create;
      Begin
            inherited Create;
            Image:=aImage;
            x:=ax;    y:=ay;
            FRadius:=ar;   FColor:=aColor;
            Draw;
      End;
Procedure TMyFigure.Clear;
  Var TempColor:TColor;
  Begin     TempColor:=FColor;
            FColor:=Image.Canvas.Brush.Color;
            Draw;
            FColor:=TempColor;
  End;
Procedure TMyFigure.SetSize;
        Begin     Clear;     FRadius:=ar;     Draw;    End;
Procedure TMyFigure.SetColor;
        Begin      Clear;      FColor:=aColor;      Draw;  End;
Procedure TMyCircle.Draw;
     Begin     Image.Canvas.pen.Color:=FColor;
               Image.Canvas.Ellipse(x-FRadius,y-FRadius,x+FRadius,y+FRadius);
     End;
Procedure TMySquare.Draw;
      Begin     Image.Canvas.Pen.Color:=FColor;
                Image.Canvas.Rectangle(x-FRadius,y-FRadius,x+FRadius,y+FRadius);
      End;
End.
red_d вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Соединить линией объекты с возможностью перемещения Azamat_92 Общие вопросы Delphi 8 27.04.2014 03:22
Соединить линией 2 объекта с возможностью перемещения Azamat_92 Общие вопросы Delphi 8 23.04.2014 13:56
Срочно!!!Помогите с условным оператором, учусь на первом курсе спо, не могу сообразить, как нужно сделать задачку! Jhon_Smith Помощь студентам 0 18.10.2013 22:36
Задали задачку, совсем не могу понять как нужно наполнять третий массив StoneGod Паскаль, Turbo Pascal, PascalABC.NET 4 22.09.2011 07:52
Как соединить 2 image ломаной линией, обходящей препятствия (другие визуальные компоненты) Zerofill Помощь студентам 0 08.03.2010 00:15