Delphi - Instanciar Objetos a partir de su nombre

 
Vista:

Instanciar Objetos a partir de su nombre

Publicado por Irreal (69 intervenciones) el 25/05/2006 12:22:23
Mi problema es el siguiente. Poseo un TStringList donde guardo el nombre de una serie de controles que existe en el mismo formulario; lo que pretendo es que dependiendo del valor de un Edit asociar valores a otros Edit que existen en mismo form.

Lo que no consigo es establecer la conexión entre el nombre, que es un String y el Control que es un Edit. Básicamente lo que pretendo es lo siguiente:

TEdit( ' NOMBRE_DEL_EDIT ').Text := ' VALOR A ASOCIAR ';

Alguién puede echarme una mano.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Instanciar Objetos a partir de su nombre

Publicado por Dr Juzam (821 intervenciones) el 25/05/2006 16:21:01
Prueba sin las comillas simples:

TEdit(Edit1).Text:='Hola';

Saludos.

PD: No sé si he entenedido bien. Si no es lo que pides sé un poco más explicito :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Instanciar Objetos a partir de su nombre

Publicado por Irreal (69 intervenciones) el 25/05/2006 17:16:45
El problema es que nombre del control se gestiona desde una variable.

Var vCampo : String;

vCampo := 'Edit1';
TEdit(vCampo ).Text:='Hola';
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Instanciar Objetos a partir de su nombre

Publicado por Dr Juzam (821 intervenciones) el 25/05/2006 19:49:44
He estado dándole algunas vueltas (y obteniendo algunos mensajes de violación de memoria). Por de pronto se me ocurre esto para solucionarlo:

var
i: integer;
begin
for i:=0 to ComponentCount-1 do
if Components[i].Name='Edit1' then
TEdit(Components[i]).Text:='Hola';

Pero voy a seguir buscando una fórmula como la que pides.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Instanciar Objetos a partir de su nombre

Publicado por Irreal (69 intervenciones) el 27/05/2006 11:39:34
La solución , en principio es valida. Estoy tratando unos 100 controles y no se aprecia el recorrido del bucle en cuanto a velocidad de procesamiento.

El siguiente problema es que si creo el control en tiempo de ejecución :

vControl := TEdit.Create(Panel);

Asignandole el nombre a continuación:

vControl.Name := 'NOMBRE';

No se reconoce en el bucle. Tratandolo direntamente el control vControl no da problemas.

Como puedo hacer para referirme al control a traves del string : 'NOMBRE'.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Instanciar Objetos a partir de su nombre

Publicado por Dr Juzam (821 intervenciones) el 27/05/2006 13:43:43
Creo que problema radica en que el propietario del objeto que has creado es un Panel y no el Form. El bucle que te comenté recorre los componentes del Form, pero no los componentes pertenecientes al Panel (que no en el panel, que si los recorre). Para evitar esto, puedes crear los componentes así:

var
NuevoEdit: TEdit;
begin
NuevoEdit:=TEdit.Create(Self);
NuevoEdit.Parent:=Panel1;
{...}

Te lo mostrará dentro del Panel, pero será un componente del Form.

Otro método, a mi juicio innecesario, sería recorrer con otro bucle los componentes del Panel.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Instanciar Objetos a partir de su nombre

Publicado por Irreal (69 intervenciones) el 27/05/2006 15:35:37
Ha funcionado a la perfección.

Te agradezco tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar