Как обратиться к объекту за его строковым именем?
Например:
OName:='MenuItem12';
...
Что нужно сделать, чтобы получить эквивалент MenuItem12.Enabled:=False;
Кроме как использовать кучу if ничего не приходит в голову.
Добавлено спустя 1 час 24 минуты 30 секунд:
Сам же и нашел:
(FindComponent(OName) as TMenuItem).Enabled:=True;
Как обратиться к объекту за его строковым именем?
Модератор: Модераторы
- dunin
- энтузиаст
- Сообщения: 634
- Зарегистрирован: 02.05.2007 13:18:11
- Откуда: Тољя††и
- Контактная информация:
GAMER писал(а):...
(FindComponent(OName) as TMenuItem).Enabled:=True;
Опять на грабли наступил. Делюсь опытом...
FindComponent возвращает tComponent;
Application.FindComponent всегда возвращает nil - то ли работает не правильно, то ли так задумано - непонятно.
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.
- dunin
- энтузиаст
- Сообщения: 634
- Зарегистрирован: 02.05.2007 13:18:11
- Откуда: Тољя††и
- Контактная информация:
Climber писал(а):А в чем вопрос-то?
Какой вопрос?
dunin писал(а):Делюсь опытом...
Или на форуме только вопросы пишут?
В Дельфи завсегда искал компоненты через Application. В Лазарусе такой номер не прошел. Убил время на поиск ошибки. Не сразу понял в чем дело, подумал даже, что баг. Дабы меньше людей мигрирующих с Дельфи на Лазарус тратили время впустую делюсь опытом.
