Delphi OpenTools API получает свойство компонента
Я реализую пакет для преобразования и автоматической генерации компонентов в Delphi IDE. Я знаю, что GExperts имеет аналогичную функцию, но мне нужно настроить некоторые конкретные свойства.
Прямо сейчас я застрял на доступ к TADOQuery.SQL
свойство, которое является экземпляром TStrings:
var
aVal : TValue;
aSqlS : TStrings;
begin
[...]
if (mycomp.GetComponentType = 'TADOQuery') then
if mycomp.GetPropValueByName('SQL', aVal) then
begin
aSqlS := TStrings(aVal.AsClass);
if Assigned(aSqlS) then <----- problem is here
ShowMessage(aSqlS.Text); <----- problem is here
end;
end;
Я не совсем уверен, правильно ли использовать TValue из RTTI.
Спасибо
1 ответ
Если предположить, GetPropValueByName()
возвращает действительный TValue
(вы не показали этот код), затем с помощью aVal.AsClass
неправильно, так как SQL
Получатель свойства не возвращает тип метакласса. Он возвращает указатель на объект, поэтому используйте aVal.AsObject
вместо или даже aVal.AsType<TStrings>
,
Обновить, если comp
на самом деле IOTAComponent
чем TValue
определенно неправильно использовать вообще. Выход из IOTAComponent.GetPropValueByName()
нетипизированный var
который получает необработанные данные о значении свойства или IOTAComponent
за TPersistent
объекты:
var
aVal: IOTAComponent;
aSqlS : TStrings;
begin
[...]
if (mycomp.GetComponentType = 'TADOQuery') then
if mycomp.PropValueByName('SQL', aVal) then
ShowMessage(TStrings(aVal.GetComponentHandle).Text);
end;
Тем не менее, лучшим вариантом будет доступ к фактическому TADOQuery
объект вместо:
if (mycomp.GetComponentType = 'TADOQuery') then
ShowMessage(TADOQuery(comp.GetComponentHandle).SQL.Text);