Выяснить наследование

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Выяснить наследование

Сообщение sign » 29.03.2010 14:14:08

Есть один объект
Код: Выделить всё
TPanelBase = class(TPanel)

И несколько наследуемых
Код: Выделить всё
  TPanelLeft = class(TPanelBase)

  TPanelMain = class(TPanelBase)

  TPanelEnd = class(TPanelBase)   


В обработчике мне нужно выловить только те компоненты формы, которые от TPanelBase.
Как непосредственно проверить, это ясно
Код: Выделить всё
procedure TStart.TabSheet1Show(Sender: TObject);
var i: Integer;
begin
  // Нарисовать схему
  if Sender is TTabSheet then
    for i := 0 to TTabSheet(Sender).ComponentCount-1 do begin
      if (TTabSheet(Sender).Components[i] is TPanelLeft) or
         (TTabSheet(Sender).Components[i] is TPanelMain) or
         (TTabSheet(Sender).Components[i] is TPanelEnd) then begin
...
      end;
    end;
end;

А есть ли способ, чтобы проверить компонент, что он от базового типа?
В данном случае от TPanelBase.
Чтобы обойтись одной проверкой?
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Выяснить наследование

Сообщение Brainenjii » 29.03.2010 14:16:00

А
Код: Выделить всё
If Components[i] Is TPanelBase Then Profit;

не работает?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Выяснить наследование

Сообщение sign » 29.03.2010 14:28:59

Щас проверю...

Добавлено спустя 2 минуты 5 секунд:
Ну дак и работает!
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Выяснить наследование

Сообщение Inferno » 29.03.2010 14:33:31

вроде бы так было if Components[i].InheritsFrom(TPanelBase) then ....
Аватара пользователя
Inferno
новенький
 
Сообщения: 78
Зарегистрирован: 20.03.2009 14:40:20
Откуда: Тюмень

Re: Выяснить наследование

Сообщение sign » 29.03.2010 14:53:00

Не, так не работает.
Вот что сработало
Код: Выделить всё
if TTabSheet(Sender).Components[i] is TPanelBase then ...

Вызываются все наследуемые.

Добавлено спустя 4 минуты 36 секунд:
Тьфу, блин, вы меня с панталыку сбили.
Конечно, и ваш пример работает, только правильно его записать нужно
Код: Выделить всё
for i := 0 to TTabSheet(Sender).ComponentCount-1 do begin
      if TTabSheet(Sender).Components[i].InheritsFrom(TPanelBase) then begin 
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 24

Рейтинг@Mail.ru