begin
inherited; //метод предка
if not(csDesigning in ComponentState) and (aOwner is TForm) then
with TForm(aOwner) do
begin
for i:=0 to ComponentCount-1 do
if Components is TMainMenu then
MessageBox(0, 'MainMenu', '123', 0);
end;
end;
Проблема с определением кол-ва компонентов владельца
Если мой компонент добавляется на форму после MainMenu, он корректно его определяет и выставляет требуемые значения. Но если сначала добавить на форму компонент, а затем MainMenu, то тогда компонент его просто "не видит", и более того свойство ComponentCount владельца(то есть количество всех компонентов на форме) будет равно количеству компонентов-количество меню(то есть если кнопку кинуть, он ее посчитает, а вот меню-нет). Хотя я задаю, что проверка должна проводиться не в Design-time. Возможно ли исправить это и сделать так чтобы компонент "видел" меню?? Вот упрощённый код, которым я определяю видит компонент меню или нет:
1)Меню "видно", если компонент на форму добавлять после него
Код:
2)А с метками например нет такой проблемы
Код:
begin
inherited; //метод предка
if not(csDesigning in ComponentState) and (aOwner is TForm) then
with TForm(aOwner) do
begin
for i:=0 to ComponentCount-1 do
if Components is TLabel then
MessageBox(0, 'MainMenu', '123', 0);
end;
end;
inherited; //метод предка
if not(csDesigning in ComponentState) and (aOwner is TForm) then
with TForm(aOwner) do
begin
for i:=0 to ComponentCount-1 do
if Components is TLabel then
MessageBox(0, 'MainMenu', '123', 0);
end;
end;
Вот не могу понять, почему это происходит!
ComponenCount-1 в цикле потому что отсчёт компонентов начинается с нуля, а ComponentCount всегда выдаёт значение больше нуля, если есть хотя бы 1 компонент
MyMainMenu.Owner = TComponent(MyForm)
Скорее всего, результат будет равен True.
Попробуйте выполнить просмотр всех компонент: т.к. каждый компонент может являться владельцем, готовьтесь анализировать структуру
древесного типа (связного графа без циклов).