Ver Mensaje Individual
  #2  
Antiguo 17-10-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - Espańa
Posts: 18.286
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo que para eso puedes utilizar RTTI.
Te acnsejo que busques entre los fuentes de Delphi la unit llamada TypInfo.pas y le eches un vistazo (normalmente en el directorio ...\sources\rtl\common de Delphi)
Verás que puedes encontrar procedimientos interesantes.

Yo utilizo el siguiente:

Código Delphi [-]
 {:Asigna valor a una propiedad a través del Nombre (RTTI). }
   function SetPropAsString(AObj: TObject; const PropName, Value: String):Boolean;
   var
     PInfo: PPropInfo;
   Begin
     // Intentamos acceder (con un puntero) a la info. de la propiedad
     PInfo := GetPropInfo(AObj.ClassInfo, PropName);
     Result := PInfo <> nil;
 
     // Se ha obtenido la información...
     if (Result) then begin
       // Se ha encontrado la propiedad con éste nombre; Chequear el tipo...
       if (PInfo^.Proptype^.Kind = tkString) or
          (PInfo^.Proptype^.Kind = tkLString) then begin
         // Asignar el valor de tipo String
         SetStrProp(AObj, PInfo, Value);
       end
       else if (PInfo^.Proptype^.Kind = tkInteger) then begin
         // Asignar el valor...
         if (PInfo^.PropType^.Name = 'TColor') then begin
           SetOrdProp(AObj, PInfo, StringToColor(Value));
         end
         else if (PInfo^.PropType^.Name = 'TCursor') then begin
           SetOrdProp(AObj, PInfo, StringToCursor(Value));
         end
         else begin
           SetOrdProp(AObj, PInfo, StrToInt(Value));
         end;
       end
       else if (PInfo^.Proptype^.Kind = tkEnumeration) then begin
         // Bloque de proteccion
         try
           if (PInfo^.PropType^ = TypeInfo(System.Boolean)) then begin
             SetOrdProp(AObj, PInfo, StrToInt(Value));
           end
           else begin
             SetOrdProp(AObj, PInfo, StrToInt(Value));
           end;
         except
           raise;;
         end;
       end
       else begin
         Result := False;
       end;
     end
     else begin
       // No se ha encontrado la propiedad con ese nombre
       Result := False;
     end;
   end;

Para usarlo puedes utilizar:

Código Delphi [-]
   SetPropAsString(Edit1, 'Color', 'clRed');
   SetPropAsString(Label1, 'Color', 'clRed');
   ...
   // Ańade al uses TypInfo   (D6)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita