Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como trabajar con los ensamblados en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=41176)

rydem 08-03-2007 21:56:11

Como trabajar con los ensamblados en Delphi
 
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

Solucion a ensamblados en Delphi, una de ellas
 
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;


La franja horaria es GMT +2. Ahora son las 17:52:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi