Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с определением кол-ва компонентов владельца

21K
15 февраля 2007 года
EvilMind
2 / / 22.09.2006
Разрабатываю компонент, который берёт на себя отрисовку меню по заданным параметрам. По задумке, компонент автоматически пробегает все компоненты владельца(формы), являющиеся TMainMenu. Столкнулся на этом этапе с проблемой следующего характера:
Если мой компонент добавляется на форму после MainMenu, он корректно его определяет и выставляет требуемые значения. Но если сначала добавить на форму компонент, а затем MainMenu, то тогда компонент его просто "не видит", и более того свойство ComponentCount владельца(то есть количество всех компонентов на форме) будет равно количеству компонентов-количество меню(то есть если кнопку кинуть, он ее посчитает, а вот меню-нет). Хотя я задаю, что проверка должна проводиться не в Design-time. Возможно ли исправить это и сделать так чтобы компонент "видел" меню?? Вот упрощённый код, которым я определяю видит компонент меню или нет:
1)Меню "видно", если компонент на форму добавлять после него
Код:
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;


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;


Вот не могу понять, почему это происходит!
ComponenCount-1 в цикле потому что отсчёт компонентов начинается с нуля, а ComponentCount всегда выдаёт значение больше нуля, если есть хотя бы 1 компонент
25K
18 февраля 2007 года
Cерый
10 / / 18.02.2007
Возможно, свойство Owner компонента TMainMenu не является указателем на TForm. Попробуйте вычислить выражение:
MyMainMenu.Owner = TComponent(MyForm)
Скорее всего, результат будет равен True.
Попробуйте выполнить просмотр всех компонент: т.к. каждый компонент может являться владельцем, готовьтесь анализировать структуру
древесного типа (связного графа без циклов).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог