Создайте наследника от одного из стандартных классов и будет у вас сразу инкапсуляция и наследование. Для демонстрации полиморфизма нужно перекрыть один из виртуальных методов класса-предка.
Вот пример наследника TLabel, который по щелчку мыши открывает заданную страницу в браузере:
Код:
unit Unit2;
interface
uses
Windows, Classes, StdCtrls, ShellAPI;
Type
TLinkLabel = class(TLabel)
private
FLink: String;
protected
public
constructor Create(AOwner: TComponent; ALink: String);
procedure Click; override;
property Link: String read FLink write FLink;
end;
implementation
{ TLinkLabel }
procedure TLinkLabel.Click;
begin
inherited;
if FLink <> '' then
ShellExecute(Parent.Handle, 'open', PChar(FLink), nil, nil, SW_SHOW);
end;
constructor TLinkLabel.Create(AOwner: TComponent; ALink: String);
begin
inherited Create(AOwner);
FLink := ALink;
end;
end.
Потом в главной форме пишем, например, так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
L: TLabel;
begin
// Создаем объект
L := TLinkLabel.Create(Self, 'http://www.delphisources.ru');
L.Top := 10;
L.Left := 10;
L.Caption := 'DelphiSources';
L.Parent := Self;
end
Полиморфизм здесь в том, что переменная L объявлена как TLabel, тем не менее после присвоения ей значения типа TLinkLabel, она корректно вызывает переопределенный метод Click.
Пример, конечно, абсолютно высосанный из пальца и не жызненный.