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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2009, 09:19   #1
Kolhan
 
Регистрация: 16.04.2009
Сообщений: 8
По умолчанию [Delphi]: Создание нового класса с наследованием

Здравствуйте, нужна помощь.

1 Нужно создать новый класс TCar наследуемый от TShape. У класса TCar есть дополнительные свойства полоса, скорость, действие, направление, но при этом нужно иметь доступ ещё и к основным свойствам TShape(в частности к координатам размещения TShape).

2 Также нужно периписать свойство Create. Нужно чтобы при Create создавался сам Shape на форме и ещё заполнялись дополнительные свойсва класса TCar(полоса, скорость, действие, направление). Координаты TShape заранее определены и записаны в Case конструктора Create и от того какое число будет указано при создании (например Create(1)) выбираются определнные координаты.
Kolhan вне форума Ответить с цитированием
Старый 16.04.2009, 09:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Типа такого, шаблон:
Код:
unit Unit1;

interface

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

type
  TCar=class(TShape)
  Public
    Skorost,Polosa:Integer;
    Constructor Create(i:integer);
  end;
  TForm1 = class(TForm)
    Shape1: TShape;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var t:TCar;
  Form1: TForm1;

implementation

{$R *.dfm}


{ TCar }

constructor TCar.Create;
begin
 Skorost:=1;Polosa:=3;
 if i=.......
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.04.2009, 09:59   #3
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Код:
unit Unit1;

interface

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

type
  TCar = class(TShape)
  private
    fStripe: integer;
    fSpeed: integer;
    fAction: integer;
    fDirection: integer;
  public
    property Stripe: integer read fStripe write fStripe;
    property Speed: integer read fSpeed write fSpeed;
    property Action: integer read fAction write fAction;
    property Direction: integer read fDirection write fDirection;
    constructor CreateCar(AOwner: TComponent; const Param, iStripe, iSpeed, iAction, iDirection: integer);
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    Car: TCar;
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TCar }

constructor TCar.CreateCar(AOwner: TComponent; const Param, iStripe, iSpeed, iAction, iDirection: integer);
begin
  inherited Create(AOwner);
  Parent := Form1;
  Visible := true;
  Name := 'Car1';
  Stripe := iStripe;
  Speed := iSpeed;
  Action := iAction;
  Direction := iDirection;
  //далее можно реализовать это: " Координаты TShape заранее определены и записаны в Case конструктора Create и от того какое число будет указано при создании (например Create(1)) выбираются определнные координаты.", используя Param.
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Car := TCar.CreateCar(Self, 1, 12, 34, 54, 2);
end;

end.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 16.04.2009, 15:52   #4
Kolhan
 
Регистрация: 16.04.2009
Сообщений: 8
По умолчанию

VVM всё вроде хорошо только нужно будет создавать этот обьект много раз, так что имя нужно порядковое. Я понимаю что нужно счётчик, но как его пред определить не при создании формы не пойму.

Последний раз редактировалось Kolhan; 16.04.2009 в 16:21.
Kolhan вне форума Ответить с цитированием
Старый 16.04.2009, 16:44   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я понимаю что нужно счётчик, но как его пред определить не при создании формы не пойму.
Опиши динамический массив:
Код:
var Cars:array of TCar
.........
// И создавай так:
SetLength(cars,length(cars)+1);
cars[high(cars)]:=TCar.CreateCar(Self, 1, 12, 34, 54, 2);
А далее обращайся к нужному обьекту как к массиву
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.04.2009, 22:50   #6
Kolhan
 
Регистрация: 16.04.2009
Сообщений: 8
По умолчанию

Stilet спасибо а как порядковое имя обьекту задавать
ведь в описаном пирмере там 'Car1'. Я думаю что должно быть что то типа
i:=i+1;
Name :='Car'+inttostr(i);
но так как i не определна он может выдаать число в самом начале типа 14758 что разумеется приведёт к ошибке.

Или порядковые намера обьектам присваиваются как то по другому
Kolhan вне форума Ответить с цитированием
Старый 17.04.2009, 00:03   #7
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Цитата:
Или порядковые намера обьектам присваиваются как то по другому
Можно использовать индекс массива:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var 
  Cars: array of TCar;
begin
  SetLength(cars, length(cars) + 1);
  cars[high(cars)]:=TCar.CreateCar(Self, 1, 12, 34, 54, 2);
  cars[high(cars)].Name := 'Car' + IntToStr(high(cars));
end;
Тогда из конструктора можно убрать строку с Name:
Код:
constructor TCar.CreateCar(AOwner: TComponent; const Param, iStripe, iSpeed, iAction, iDirection: integer);
begin
  inherited Create(AOwner);
  Parent := Form1;
  Visible := true;
  //отсюда
  Stripe := iStripe;
  Speed := iSpeed;
  Action := iAction;
  Direction := iDirection;  
end;
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.

Последний раз редактировалось VVM; 17.04.2009 в 00:06.
VVM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание своего класса в Delphi 7 - фигуры для шахматной доски electric Компоненты Delphi 18 24.10.2013 15:06
Заполнение и вывод переменной нового класса или же структуру Alar Общие вопросы C/C++ 10 09.02.2009 22:17
Создание нового класса на базе существующего SpiritSm Общие вопросы Delphi 1 19.07.2007 10:11
Создание нового класса на базе существующего SpiritSm Помощь студентам 1 19.07.2007 01:05