|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вложенные компоненты
Проблема в следующем. Имеется два класса (компоненты) потомки от TGraphicControl:
Код:
TComponentA = class(TGraphicControl) .... protected procedure Paint(); override; ... end; TComponentB = class(TGraphicControl) .... protected procedure Paint(); override; ... end; процедуры рисования полностью перекрыты, т.е. не вызываются inherited процедуры предка. Эти компоненты вставлены во внутрь трьетьего: Код:
TComponentС = class(TPanel) .... private FCompA:TComponentA; FCompB:TComponentB; ... public constructor Create(AOwner: TComponent); override; ... end; constructor TComponentС.Create(AOwner: TComponent); begin FCompA = TCompA.Create(self); FCompA.Parent = self; FCompA.SubComponent(true); ... FCompB = TCompB.Create(self); FCompB.Parent = self; FCompB.SubComponent(true); end; Получается какая-то мистика в ДФМ-файле. Один компонент пишется нормально, т.е. как СабКомпонент. А вот второй почему-то пишется аж 2 раза - первый раз как субкомпонент, а второй - как объекту внутри TPanel. Какие будут соображения? |
#2
|
|||
|
|||
Вообщем вродь разобрался. Решилась проблема с помощью перекрытия метода
Код:
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override; реализовал ее таким образом: Код:
procedure TComponentC.GetChildren(Proc: TGetChildProc; Root: TComponent); var i: Integer; begin for i:= 0 to ControlCount - 1 do if (not (Controls[i] is TComponentA)) and (not (Controls[i] is TComponentB)) then Proc(TComponent(Controls[i])); end; |