Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   [AYUDA]De Object.ClassName a Objeto (https://www.clubdelphi.com/foros/showthread.php?t=68516)

kdemia 17-06-2010 22:01:14

[AYUDA]De Object.ClassName a Objeto
 
que tal lo que quiero hacer (si se puede) es convertir un string en un objeto.. una variable TObject como saben, tiene la propiedad ClassName que devuelve un string con la clase, yo lo que quiero es convertir esa clase en el Objeto en tiempo de ejecucion algo como


procedure TForm1.Button1Click(Sender: TObject);
begin
Sender.ClassName(Sender).Tag
end;


entienden?

muchas gracias

Neftali [Germán.Estévez] 18-06-2010 10:05:38

No se si te he entendido bien,...

A partir del nombre de una clase, puedes crear un objeto de esa clase (con algunas restricciones) si la clase está registrada. Pare ello puedes buscar ayuda sobre GetClass; En los foros encontrarás mensajes y ejemplos.
Esto te puede servir, por ejemplo, para crear un formulario a partir del nombre de su clase.

Lo otro que puedes hacer es, a partir del nombre (prop. Name) de un objeto buscar ese objeto y acceder a sus propedades. Pare ello puedes utilizar FindComponent. Si buscas ejemplos en los foros también encontrarás muchos.

Creo que lo que tú necesitras no es ni lo uno, ni lo otro. Si lo que quieres es acceder al objeto que se envía como parámetro de un evento (como se hace en el código de ejemplo) sólo te queda realizar el CAST de ese objeto con su clase. Es decir algo así:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (Sender is TEdit) then begin
    TEdit(Sender).Tag := 1;
  end
  else if (Sender is TDBEdit) then begin
    ....
  end;
end;

En el caso de la propiedad Tag, por ejemplo, como pertenece a TComponent, podrías hacer algo como esto:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
 begin
  if (Sender is TComponent) then begin
    TComponent(Sender).Tag := 1;
  end
  else if  ....
  end;
 end;

Funcionaría para todos los componentes derivados de TComponent.

Esto no es muy "académico" por decirlo así, sobre todo si la variedad de los componentes es grande. Para solventarlo puedes utilizar RTTI. Te dejo este link, donde está explicado con detalle y con el código necesario modificar propiedades utilizando RTTI.

Un saludo.


La franja horaria es GMT +2. Ahora son las 15:18:22.

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