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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 23:39   #1
Eglath
 
Регистрация: 11.10.2009
Сообщений: 9
По умолчанию (Delphi) Реализовать иерархии объектов и заданные методы для них

Реализовать следующие иерархии объектов и заданные методы для них. На примере этих объектов продемонстрировать позднее связывание и полиморфизм.

Точка – дуга окружности – сектор.
Методы: движение, растяжение, сжатие.

Собственно необходимо реализовать это всё в графическом виде, неважно на Form или image
Eglath вне форума Ответить с цитированием
Старый 02.06.2011, 00:16   #2
Eglath
 
Регистрация: 11.10.2009
Сообщений: 9
По умолчанию Можа каму патрэбна будзе...

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus,mclass,ExtCtrls, ComCtrls, StdCtrls,ImgList;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    point: TMenuItem;
    Siektar: TMenuItem;
    Circle: TMenuItem;
    procedure pointClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
    procedure circleClick(Sender: TObject);
    procedure siektarClick(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure A(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    procedure B(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);

  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  siektar1:     Tsiektar;
  Form1:        TForm1;
  Point1:       TMyPoint;
  FlagPoint:    Boolean;
  ObjectType:integer;
  ObjType:integer;
implementation


{$R *.dfm}


// кропка
procedure TForm1.pointClick(Sender: TObject);
begin
 ObjectType:=1;
 Point1:=TMyPoint.Create((form1.Width div 2)-10,(form1.Height div 2)-20,clblack);
 Point1.Show;
 FlagPoint:=True;
end;

//клавіятура
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
  if(FlagPoint) then begin
   case Key of
    Vk_Right:   begin
                 Point1.Hide;
                 Point1.X:= (Point1.X+1) mod Form1.Width;
                 Point1.Show;
                end;
    Vk_Left:    begin
                 Point1.Hide;
                 Point1.X:= (Point1.X-1) mod Form1.Width;
                 if(Point1.X<0) then Point1.X:= Point1.X+Form1.Width;
                 Point1.Show;
                end;
    Vk_Up:      begin
                 Point1.Hide;
                 Point1.Y:= (Point1.Y-1) mod Form1.Height;
                 if(Point1.Y<0) then Point1.Y:= Point1.X+Form1.Height;
                 Point1.Show;
                end;
    VK_Down:    begin
                 Point1.Hide;
                 Point1.Y:= (Point1.Y+1) mod Form1.Height;
                 Point1.Show;
                end;
    VK_space:  begin
                 Point1.Hide;
                 Point1.Free;
                 FlagPoint:=False;
                 ObjectType:=0;
                end;
  end;{case}
 end; {if}

end;

//акружнасьць
procedure TForm1.circleClick(Sender: TObject);
begin
 Point1:=TCircle.Create((form1.Width div 2)-10,(form1.Height div 2)-20,100,clblack);
 ObjectType:=2;
 Point1.Show;
 FlagPoint:=True;
end;

//мэню "сэктар"
procedure TForm1.siektarClick(Sender: TObject);
begin
 Point1:=TSiektar.Create((form1.Width div 2)-10,(form1.Height div 2)-

20,100,50,80,500,1100,clblack);
 ObjectType:=3;
 Point1.Show;
 FlagPoint:=True;
end;

//замалёўка
procedure TForm1.FormPaint(Sender: TObject);
begin
 if (FlagPoint=True) and (ObjectType=3) then begin
  (Point1 as TSiektar).Show;
 end;
end;

procedure TForm1.A(Sender: TObject; Shift: TShiftState; MousePos: TPoint;
  var Handled: Boolean);
begin
   if ObjectType>1 then
   begin
   (Point1 as Tcircle).Expand(4);
   end;
end;

procedure TForm1.B(Sender: TObject; Shift: TShiftState; MousePos: TPoint;
  var Handled: Boolean);
begin
     if ObjectType>1 then
   begin
  (Point1 as Tcircle).Contract(4);
end;
end;

end.

Последний раз редактировалось Eglath; 02.06.2011 в 00:23. Причина: памылкі
Eglath вне форума Ответить с цитированием
Старый 02.06.2011, 00:17   #3
Eglath
 
Регистрация: 11.10.2009
Сообщений: 9
По умолчанию Дадатковы юніт з рэалізацыяй клясаў

Код:
unit mclass;  //Графічныя аб'екты

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus,ExtCtrls;

type
  //кропка
  TMyPoint = class
   public
   X,Y:         Integer;
   Visible:     Boolean;
   Color:       TColor;
   function GetX: Integer;
   function GetY: Integer;
   constructor Create(InitX, InitY: Integer;IColor:TColor);
   destructor Free;virtual;
   procedure Show;virtual;
   procedure Hide;virtual;
   function  IsVisible: Boolean;
   procedure MoveTo(NewX, NewY: Integer);
  end;

  //круг
  TCircle = class (TMyPoint)
    R: Integer;
    constructor Create(InitX, InitY: Integer; InitRadius: Integer;IColor:TColor);
    destructor Free;override;
    procedure Show; override;
    procedure Hide; override;
    procedure Expand(ExpandBy: Integer);
    procedure Contract(ContractBy: Integer);
  end;

  //siektar
  TSiektar = class (TCircle)
    constructor Create(InitX, InitY: Integer; InitRadius,k,l,m,n: Integer; IColor:TColor);
    destructor Free;override;
    procedure Show; override;
    procedure Hide; override;
    procedure Expand(ExpandBy: Integer);
    procedure Contract(ContractBy: Integer);  
  end;


  implementation


   uses unit1;

// кляса кропка
constructor TMyPoint.Create(InitX, InitY: Integer;
                          IColor:TColor);
begin
 X:=InitX;
 Y:=InitY;
 Visible := False;
 Color:=Icolor;
end;

destructor TMyPoint.Free;
begin
end;

function TMyPoint.GetX: Integer;
begin
 GetX := X;
end;

function TMyPoint.GetY: Integer;
begin
 GetY := Y;
end;

procedure TMyPoint.Show;
begin
 Visible := True;
 with Form1.Canvas do begin
  Pixels[X,Y]:=Color;
  Pixels[X+1,Y]:=Color;
  Pixels[X-1,Y]:=Color;
  Pixels[X,Y+1]:=Color;
  Pixels[X,Y-1]:=Color;
 end;
end;

procedure TMyPoint.Hide;
begin
 Visible := False;
 with Form1.Canvas do begin
  Pixels[X,Y]:=clBtnFace;
  Pixels[X+1,Y]:=clBtnFace;
  Pixels[X-1,Y]:=clBtnFace;
  Pixels[X,Y+1]:=clBtnFace;
  Pixels[X,Y-1]:=clBtnFace;
 end;
end;

function TMyPoint.IsVisible: Boolean;
begin
 IsVisible := Visible;
end; 

procedure TMyPoint.MoveTo(NewX, NewY: Integer);
begin
 Hide;
 X := NewX;
 Y := NewY;
 Show;
end;

//кляса Circle:

constructor TCircle.Create(InitX, InitY: Integer; InitRadius: Integer;IColor:TColor);
begin
 inherited Create(InitX, InitY,IColor);
 R := InitRadius;
end;

destructor TCircle.Free;
begin
 inherited Free;
end;

procedure TCircle.Show;
var
 tmpcolor:TColor;
begin
 tmpColor:=Form1.Canvas.Pen.Color;
 Form1.Canvas.Pen.Color:=Color;
 Form1.Canvas.Ellipse(X-(R div 2),Y-(R div 2),X+(R div 2),Y+(R div 2));
 Form1.Canvas.Pen.Color:=tmpColor;
 Visible := True;
end;

procedure TCircle.Hide;
var
 TmpColor: TColor;
begin
 tmpColor:=Form1.Canvas.Pen.Color;
 Form1.Canvas.Pen.Color:=clBtnFace;
 Form1.Canvas.Ellipse(X-(R div 2),Y-(R div 2),X+(R div 2),Y+(R div 2));
 Form1.Canvas.Pen.Color:=tmpColor;
 Visible := False;
end;

procedure TCircle.Expand(ExpandBy: Integer);
begin
 Hide;
 R := R + ExpandBy;
 if R < 0 then R := 0;
 Show;
end;

procedure TCircle.Contract(ContractBy: Integer);
begin
  Expand(-ContractBy);
end;



// сэктар

constructor TSiektar.Create(InitX, InitY: Integer; InitRadius,k,l,m,n: Integer; IColor:TColor);

begin
 inherited Create(InitX, InitY,initradius,IColor);
 R := InitRadius;
end;

destructor TSiektar.Free;
begin
 inherited Free;
end;

procedure TSiektar.Show;
var
 tmpcolor:TColor;
begin
 tmpColor:=Form1.Canvas.Pen.Color;
 Form1.Canvas.Pen.Color:=Color;
 Form1.Canvas.Pie(X-r,Y-r,X+r,Y+r,x-500,y+800,x+500,y+100);
 Form1.Canvas.Pen.Color:=tmpColor;
 Visible := True;
end;

procedure TSiektar.Hide;
var
 TmpColor: TColor;
begin
 tmpColor:=Form1.Canvas.Pen.Color;
 Form1.Canvas.Pen.Color:=clBtnFace;
 Form1.Canvas.Pie(X-r,Y-r,X+r,Y+r,x-500,y+800,x+500,y+100);
 Form1.Canvas.Pen.Color:=tmpColor;
 Visible := False;
end;

procedure TSiektar.Expand(ExpandBy: Integer);
begin
 Hide;
 R := R + ExpandBy;
 if R < 0 then R := 0;
 Show;
end;

procedure TSiektar.Contract(ContractBy: Integer);
begin
  Expand(-ContractBy);
end;

end.
Eglath вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с объектами типа вектор, в каждом классе должны быть методы сохранения и загрузки объектов mavar Помощь студентам 0 03.05.2011 16:35
Кто может написать коды для Delphi или ссылку на них? kotaina Общие вопросы Delphi 1 03.04.2011 15:27
как реализовать общий счётчик объектов класса? ZigaZaga Общие вопросы по Java, Java SE, Kotlin 7 18.06.2010 10:51
Delphi. Консоль. Массивы. Сдвиги в них. Saka Помощь студентам 2 10.12.2009 20:25
Создание иерархии классов (Delphi) Dawystrik Помощь студентам 1 22.03.2009 16:32