Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Наследование TFrame  (Прочитано 1294 раз)
0 Пользователей и 1 Гость смотрят эту тему.
NeferSky
Участник

ru
Offline Offline
Бессмертный


« : 20-02-2017 07:45 » 

Добрый день.
Возник вопрос по поводу наследования фреймов... Нигде не нашел толкового ответа.
Ситуация примерно такая: есть проект. В проекте описан TBaseFrame, у него есть конструктор, и есть событие OnCreate. Типа так:
Код:
...ля-ля-ля...

type
  TBaseFrame = class(TFrame)
  private
    FOnCreate: TNotifyEvent;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
  end;

...ля-ля-ля...

constructor TBaseForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  if Assigned(FOnCreate) then
    FOnCreate(Self);
end;

...ля-ля-ля...

С этого фрейма создаются наследники. Создаются правильно - File/New/Other/MyProject/BaseFrame. Но. В них почему-то недоступно свойство OnCreate. То есть, в инспекторе объектов оно не отображается, и присвоить свойству процедуру не удается.
Конструктор базового фрейма при этом выполняется.

Код:
...ля-ля-ля...

type
  TInheritorFrame = class(TBaseFrame)
    procedure OnCreateFrame(Sender: TObject);
  end;

...ля-ля-ля...

procedure TInheritorFrame.OnCreateFrame(Sender: TObject); // не выполняется
begin
  // что-то там
end;

...ля-ля-ля...

Прописывать отдельный конструктор для каждого фрейма как-то неохота - много их будет... Да и не ООПшно это совсем. У каждого фрейма дописывать в DFM "OnCreate = OnCreateFrame" - тоже то еще решение. Есть еще вариант попробовать установить TBaseFrame в палитру компонентов - удастся ли? Фрейм, как-никак - для него репозиторий есть.

Как дальше жить? С этим что-нибудь можно сделать?

ЗЫ: В принципе, это же все касается любого добавленного свойства.
Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #1 : 20-02-2017 08:19 » 

Чтобы published-свойства отображались в инспекторе объектов компонента, он должен быть зарегистрирован.
Записан
NeferSky
Участник

ru
Offline Offline
Бессмертный


« Ответ #2 : 20-02-2017 11:37 » 

Да. Ну, как и ожидалось. Спасибо.
Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines