Собственно вопрос в теме: Как узнать, что мой контрол назначили Parent'om? если нужно: есть 2 панели (одна - наследник TPanel (1), вторая просто TPanel (2) лежит на 1й). Нужно сделать так, чтобы при назначении Parent'ом (1) им становился (2)
Может кому интересно будет, расскажу как решил проблему, хотя ИМХО решение кривовато, но обо всем по порядку. И так нужно переопределить 3 метода TPanel это: Code: protected procedure ValidateInsert(AComponent: TComponent); override; procedure AfterConstruction;override; Переопределение AfterConstruction позволит нам включить валидацию только тех компонент, которые будут добавлены после завершения конструктора. Иначе валидация была бы включена до того, как конструктор закончит свою работу и пыталась бы назначить Parent'ом компонент, которого еще не существует Code: procedure TMyPanel.AfterConstruction; begin inherited; Created:=True; end; с валидацией сложнее т.к. ValidateInsert(AComponent: TComponent); вызывается в 2 случаях: кто-то указывает наш компонент как Owner или как Parent и т.к. Owner присваивается еще в конструкторе, то попытка назначить Parent приводит к access violation. Поэтому вот: Code: procedure TMyPanel.ValidateInsert(AComponent: TComponent); begin inherited; if Created then if TWinControl(AComponent).Owner<>nil then TWinControl(AComponent).Parent:=ComponentsContainer; end; Вот тут и слабое место т.к. если кто-то создаст свой компонент при помощи конструктора с параметром nil, а потом назначит мой компонент Parent'ом, то получит совсем неблаговидную картину, когда его компонент будет лежать на панели (1). Если кто знает, как обойти это, или вообще другое решение сей задачи, поделитесь мыслями пожалуйста