Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   nombre de variables de una clase (https://www.clubdelphi.com/foros/showthread.php?t=26505)

Mariana 25-10-2005 14:52:46

nombre de variables de una clase
 
Hola a todos, mi pregunta de hoy es la siguiente, tengo una clase que define algunas variables por ejemplo FNombre, Nombre lo tengo en una variable del tipo string, y lo que necesito hacer es poder formar 'F' + Nombre y que lo tome como la variable, para poder asignarle un valor. Es posible hacer esto?
Gracias a todos.

Neftali [Germán.Estévez] 25-10-2005 15:59:42

Si en lugar de variable lo defines comno una propiedad published podrás hacerlo utilizando RTTI.
En la Unit TypInfo (al menos en Delphi6) tienes unas cuantas rutinas, entre ellas ésta que te pueden ser útiles:

procedure SetStrProp(Instance: TObject; const PropName: string; const Value: string); overload;

Revisa éste hilo:
http://www.clubdelphi.com/foros/show...highlight=rtti

Mariana 25-10-2005 16:21:21

Gracias Neftali por tu ayuda, el hilo que me recomendas es lo que me habias contestado en otra oportunidad y me sirvio. pero este no es el caso.
Lo que necesito, y tal vez no lo detalle bien, es formar el nombre de una variable en un string, y luego que ese string sea entendido como la variable a la cual le puedo asignar un valor.
por ejemplo:

tengo una varible: FXX

d:='XX';
'F'+d ---> que sea la variable

se entiende?

roman 25-10-2005 16:26:17

Convendría que explicaras un poco más lo que deseas hacer, dar un poco de contexto. Hay que recordar que Delphi, a diferencia de VB, no es un lenguaje interpretado por lo que, normalmente, cosas como la que buscas no se pueden hacer. En algunas situaciones se puede usar RTTI tal como te sugiere Neftali, pero en general no es algo que se pueda. El nombre de una variable es sólo válido para la escritura del código. El compilador cambiará todos esos nombres por referencias numéricas o direcciones de memoria.

Pero si contextualizas tu duda, es muy posible que alguien te pueda indicar alguna alternativa viable.

// Saludos

dec 25-10-2005 16:39:06

Hola,

A mí se me ocurre a bote pronto que podría hacerse, pero, tal como te han comentado Neftali y roman. Lo que me intriga es saber el por qué es necesario... quiero cómo has llegado a la conclusión de que tienes que logar algo así, qué sentido tiene, bueno, que me harías muy feliz. :p

Neftali [Germán.Estévez] 25-10-2005 16:44:40

Sí lo he entendido, pero sólo se puede hacer con propiedades Published o con componentes, pero no con variables.
Otra opción es usar algun sistema de Scripts en Delphi, pero no estoy seguro de que sea eso lo que necesitas.

¿Exactamente qué tienes que hacer luego con esa variable?

elcigarra 25-10-2005 17:19:08

Yo una vez tuve que hacerlo
 
recuerdo hace como quince años utilizaba FoxPro y si mal no recuerdo ponías algún caracter que interpretaba el string como un nombre de variable. En mi experiencia en Delphi he pasado por algunas veces en que me ha parecido útil (por lo menos me ahorraría mucho código) y siempre pensé que no se podía hacer.

X ej. en mi caso (usando Delphi), hace un tiempo hice un software de instrumentación donde se mantenían y modificaban (en memoria) unas 20 actividades (variables activ1,activ2...etc.) sobre un instrumento físico, en las que uno podia actualizar el valor independientemente de cada una (es medio complejo de explicar). Finalmente esos datos terminaban en una base de datos. El caso era que si la actividad que cambiaba era activ1, todas las demas tomaban también su valor. En ese caso hubiera sido útil modificarlas todas juntas con un for... next. Como esto además se reiteraba con varios "asuntos" en el programa. Al final opté por trabajar directamente sobre tablas de la base de datos, que es lo que yo recomendaría.

Lo que le puedo decir a Mariana es que si trabaja cobre campos de una tabla sí se puede hacer ya que utilizando:
Tabla1.FieldValues['campo1'] los campos se ponen como un String y se aceptan variables de tipo string entre los paréntesis.

Mariana 25-10-2005 17:28:37

Gracias a todos, es como dice Neftali son variables privadas de la clase y no se puede formar el nombre, la intención era esa ya que en la BD tengo el nombre sin la F, y luego poder asignarles valor.
Nuevamente gracias a todos

dec 25-10-2005 17:48:34

Hola,

Entonces esto que he estado haciendo no tenía nada que ver...

Código Delphi [-]
 // Estamos en un formulario
 // de nombre frmPrincipal.
 //
 var
   frmPrincipal: TfrmPrincipal;
 
 // Una clase de componente.
 //
 type
   TUnaClase = class(TComponent)
   private
     FPropiedad: string;
   published
     property Propiedad: string read FPropiedad write FPropiedad;
   end;
 
 implementation
 
 {$R *.DFM}
 
 uses
   TypInfo;
 
 var
   FUnaClase: TUnaClase;
 
 procedure TfrmPrincipal.FormCreate(Sender: TObject);
 begin
   FUnaClase := TUnaClase.Create(Self);
   FUnaClase.FPropiedad := 'Probando.';
 end;
 
 procedure TfrmPrincipal.FormClose(Sender: TObject;
   var Action: TCloseAction);
 begin
   FUnaClase.Free;
 end;
 
 function PropiedadString(const nombrePropiedad: string;
   const componente: TComponent) : string;
 var
   propInfo: PPropInfo;
 begin
   Result := '';
   propInfo := GetPropInfo(componente.ClassInfo, nombrePropiedad);
   if Assigned(propInfo) then
     Result := GetStrProp(componente, propInfo);
 end;
 
 procedure TfrmPrincipal.Button1Click(Sender: TObject);
 begin
   // Obtenemos el valor de una propiedad
   // de un componente mediante una cadena.
   ShowMessage(PropiedadString('Propiedad', FUnaClase));
 end;
 
 end.


La franja horaria es GMT +2. Ahora son las 09:44:29.

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