Показать сообщение отдельно
  #3  
Старый 05.12.2007, 16:23
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Создайте наследника от одного из стандартных классов и будет у вас сразу инкапсуляция и наследование. Для демонстрации полиморфизма нужно перекрыть один из виртуальных методов класса-предка.

Вот пример наследника 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.

Пример, конечно, абсолютно высосанный из пальца и не жызненный.
Ответить с цитированием