PDA

Ver la Versión Completa : Como trabajar con los ensamblados en Delphi


rydem
08-03-2007, 21:56:11
Mi objetivo es dado un objeto(cualquiera), obtener sus properties(o métodos, o atributos), tomar la que deseo y extraer el valor, también en algún momento setearle un valor, se como hacerlo en .NET, pero en Delphi ni de cerca le he picado a la solución del problema.

using System.Reflection;
Persona p=new Persona();
p.Nombre="lolo";
p.Edad=100;
//Esta entidad podría ser cualquier objeto que pase como parámetro,
//puse esta como ejemplo
Type typeInfo = p.GetType();
foreach (PropertyInfo meto in typeInfo.GetProperties())
{
if (meto.Name=="Nombre")
{
string nombre=meto.GetValue(p,null).ToString();
//le pregunto el nombre
meto.SetValue(p,"lili",null);
//le seteo un nuevo nombre
}
}

Help, alguien sabe como hacer lo antes expuesto en Delphi???

Al González
11-03-2007, 19:39:48
¡Hola a todos!

En Delphi para Win32 puedes utilizar las funciones GetPropList, GetPropInfo, GetPropValue y SetPropValue de la unidad TypInfo (Delphi 7 y otras versiones).

Considera que estas funciones sólo trabajan con las propiedades publicadas (published). Si te surgen más dudas, no dejes de externarlas. He trabajado con la unidad TypInfo en algunas ocasiones.

Un abrazo seteado.

Al González. :)

rydem
12-03-2007, 18:01:48
Esta fue la que use, la que me haz indicado la voy a probar en pocos minutos.
Gracias.

procedure ActivateControls(SetTo: string; const ControlsToChange: array of
TComponent);
var
I: integer;
PropInfo: PPropInfo;
begin
for I := Low(ControlsToChange) to High(ControlsToChange) do
//recorro el array de componentes
begin
PropInfo := GetPropInfo(ControlsToChange[I].ClassInfo, 'Text');
//obtengo el property info de la propiedad 'Text'
if Assigned(PropInfo) then
//devuelve nil en caso de que no exista
begin
form1.caption:=GetStrProp(ControlsToChange[I], PropInfo);
//obtengo el valor de la propiedad 'Text'
SetStrProp(ControlsToChange[I], PropInfo, SetTo);
//seteo el nuevo valor
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ActivateControls('Deac', [Edit1, Edit2, Edit3]);
//setear el texto 'Deac' a los 3 edit
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ActivateControls('Act', [Edit1, Edit2, Edit3]);
//setear el texto 'Act' a los 3 edit
end;