Вопрос № 108441: Доброго времени!
Вопрос следующий:
Есть база данных с таблицей в которой 2 текстовых поля в 1-ом хранится Класс компонента во 2-ом его свойство.
в итоге получается что я имею 2 переменные типа стринг.
допустим:
str1:='TLabel...
Вопрос № 108.441
Доброго времени!
Вопрос следующий:
Есть база данных с таблицей в которой 2 текстовых поля в 1-ом хранится Класс компонента во 2-ом его свойство.
в итоге получается что я имею 2 переменные типа стринг.
допустим:
str1:='TLabel';
str2:='Caption';
На форме Label на клик которого мне надо изменить его свойство
Caption:='ooops';
(Типа вариант Label.caption:='ooops'; сразу в мусорку это и так понятно)
Нужен вариант используя переменные str1 и str2. т.е. решать через
(sender as TLabel).caption
или правильней (sender as str1).str2:='oops';
из строки str1 класс то я выдернул, а вот как к свойству обратиться ни как не получается!
вот:
var t,p:string;
cv:TClass;
begin
t:='TLabel';
p:='Caption';
RegisterClasses([TLabel]);
cv:=GetClass(t);
if cv=nil then showmessage('no')
else showmessage((cv.classname));
т.е. получается (sender as cv) а дальше?
Это вам нужен модуль TypInfo в uses. Делается дальше так (используя класс, который вы нашли) PropInfo := PropType(cv, str2). Затем анализируем какого типа свойство и работаем с ним в зависимости от типа. Например для строковых: SetStrProp(Sender, str2, 'ooops') (Если уверены можно и не анализировать)
P.S. Можно даже работать с Sender не зная его класса (главное чтобы от TComponent был, там интерфейс нужен IProperty, кажется) и находя в нем нужное свойство.
Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 07.11.2007, 20:49 Оценка за ответ: 5
Отправить вопрос экспертам этой рассылки
Приложение (если необходимо):
* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.
Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!
Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.
Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.