смысл ООП во многом в том, чтобы не писать уже существующий код. Код, который реализовывает сходный описанному функционал - есть, например, есть класс TShape, который "лёгким движением руки" превращается в "кружочеГ".
делаем новый юнит, и в нём описываем унаследованный класс:
unit Unit2;
interface
uses
Classes, ExtCtrls, Graphics;
type
TfAlarm = class (TShape)
public
constructor Create (AOwner: TComponent); override;
end;
implementation
{ TfAlarm }
constructor TfAlarm.Create(AOwner: TComponent);
begin
// Здесь пишется любой код, который будет связан с инициализацией "кружочеГа", например, стиль заливки и цвет.
inherited;
Shape := stCircle;
end;
end.
теперь в основной форме заюзам новый класс:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons;
type
TForm2 = class(TForm)
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure OnAlarmClick (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
end;
var
Form2: TForm2;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm2.BitBtn1Click(Sender: TObject);
var
i: integer;
begin
for i := 1 to 5 do
with TfAlarm.Create(Self) do begin
Name := 'Alarm' + IntToStr (i);
Parent := Self;
Left := 100 * i;
Top := 100;
OnMouseUp := OnAlarmClick;
end;
end;
procedure TForm2.OnAlarmClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ShowMessage ((Sender as TfAlarm).Name + ' clicked!');
end;
end.
как видно, на форме находится одна единственная кнопка. при нажатии на эту кнопку будет создано 5 "кружочеГов", на событие мыши присваивается обработчик.
этот пример использует создание компонентов в runtime, т.е. компонент на форме создаётся только тогда, когда пользователь нажимает на кнопку. путём нехитрых добавлений ко второму модулю можно заставить компонент "жить" в палитре Дельфей и создавать его в design-time, т.е. также, как создаётся кнопка. но для приведённого примера в этом нет особого смысла, потому что стандартный класс TShape от нового класса почти не отличаются.