Esta función permite acceder al objeto (componente) asociado a una propiedad published de un componente vía RTTI.
Al utilizar RTTI es necesario añadir la unit
TypInfo al uses.
Código Delphi
[-]
function GetPropAsObject(AObj: TObject; const PropName:String):TObject;
const
EBLOCK = 'GetPropAsString';
var
PInfo: PPropInfo;
LObject: TObject;
Begin
Result := nil;
if not ExistProp(AObj, PropName) then begin
Exit;
end;
PInfo := GetPropInfo(AObj.ClassInfo, PropName);
if (PInfo^.PropType^.Kind = tkClass) then begin
LObject := GetObjectProp(AObj, PInfo);
if (LObject <> nil) then begin
Result := LObject;
end;
end
else begin
Result := nil;
end;
end;
NOTA: Usa la función
ExistProp del
truco 405.
Un ejemplo de utilización se muestra a continuación; Aquí se busca en todos los componentes del formulario los que tienen la propiedad DataSource; Para los que la tienen asignada se muestra el nombre del DataSourde asignado.
Código Delphi
[-]
for I := 0 to (Self.ComponentCount - 1) do begin
comp := Self.Components[i];
obj := GetPropAsObject(comp, 'DataSource');
Memo1.Lines.Add('Componente: ' + comp.Name);
if not Assigned(Obj) then begin
Memo1.Lines.Add(' -> no Asignado');
end
else begin
if (obj is TDataSource) then begin
Memo1.Lines.Add(' DataSource: ' + TDataSource(obj).Name);
end
else begin
Memo1.Lines.Add(' -> Asignación incorrecta');
end;
end;
end;