Вопрос № 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