Как обратиться к объекту за его строковым именем?

Общие вопросы программирования, алгоритмы и т.п.

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

Как обратиться к объекту за его строковым именем?

Сообщение GAMER » 09.09.2009 14:41:48

Как обратиться к объекту за его строковым именем?
Например:
OName:='MenuItem12';
...
Что нужно сделать, чтобы получить эквивалент MenuItem12.Enabled:=False;

Кроме как использовать кучу if ничего не приходит в голову.

Добавлено спустя 1 час 24 минуты 30 секунд:
Сам же и нашел:

(FindComponent(OName) as TMenuItem).Enabled:=True;
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Как обратиться к объекту за его строковым именем?

Сообщение dunin » 28.01.2010 10:15:12

GAMER писал(а):...
(FindComponent(OName) as TMenuItem).Enabled:=True;

Опять на грабли наступил. Делюсь опытом...

FindComponent возвращает tComponent;
Application.FindComponent всегда возвращает nil - то ли работает не правильно, то ли так задумано - непонятно.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Как обратиться к объекту за его строковым именем?

Сообщение Climber » 28.01.2010 11:27:47

dunin писал(а):
GAMER писал(а):...
(FindComponent(OName) as TMenuItem).Enabled:=True;

Опять на грабли наступил. Делюсь опытом...

FindComponent возвращает tComponent;
Application.FindComponent всегда возвращает nil - то ли работает не правильно, то ли так задумано - непонятно.

А в чем вопрос-то?
На счет Application.FindComponent точно не скажу, не пользовался, но есть подозрение, что Application.FindComponent вернет ссылку на объект - потомок TComponent, который был создан через TComponent.Create(Application), с вероятностью 99,99% это будeт только потомки от TForm. Все компоненты, расположенные на форме, надо искать через Form.FindComponent.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Как обратиться к объекту за его строковым именем?

Сообщение dunin » 28.01.2010 13:19:53

Climber писал(а):А в чем вопрос-то?

Какой вопрос?
dunin писал(а):Делюсь опытом...

Или на форуме только вопросы пишут?
В Дельфи завсегда искал компоненты через Application. В Лазарусе такой номер не прошел. Убил время на поиск ошибки. Не сразу понял в чем дело, подумал даже, что баг. Дабы меньше людей мигрирующих с Дельфи на Лазарус тратили время впустую делюсь опытом.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и


Вернуться в Общее

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru