![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#3
|
|||
|
|||
|
Создайте наследника от одного из стандартных классов и будет у вас сразу инкапсуляция и наследование. Для демонстрации полиморфизма нужно перекрыть один из виртуальных методов класса-предка.
Вот пример наследника 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. Пример, конечно, абсолютно высосанный из пальца и не жызненный. |