|
|
Регистрация | << Правила форума >> | 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. Пример, конечно, абсолютно высосанный из пальца и не жызненный. |