Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-04-2006
edusus edusus is offline
Miembro
 
Registrado: ene 2006
Posts: 47
Poder: 0
edusus Va por buen camino
Nombre de Tedits creados en ejecución

Hola a todos.
Con el siguiente código creo TEdits en tiempo de ejecución, pero ¿cómo puedo saber el nombre de cada edit para trabajar con ellos?
He probado con MiEdit1, MiEdit2... ya que se supone que tiene que ser TEdit más el valor de N pero no funciona.
Gracias por la ayuda.
Responder Con Cita
  #2  
Antiguo 23-04-2006
edusus edusus is offline
Miembro
 
Registrado: ene 2006
Posts: 47
Poder: 0
edusus Va por buen camino
olvido

Perdón me había olvidado de mandar el código:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  N: integer; 
  MiEdit: array[1..10] of TEdit;
begin
  N:= 1;
  X:=20;
  Repeat
  begin
    MiEdit[N] := TEdit.Create(Self);
    MiEdit[N].Parent := Self;
    MiEdit[N].Width:= 150;
    miedit[N].Left:= 60;
    miedit[N].Top:= X;
    N:= N + 1;
    X:= X + 25;
  end;
  until N = 10;
end;

Última edición por dec fecha: 23-04-2006 a las 14:12:12.
Responder Con Cita
  #3  
Antiguo 23-04-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Mira este ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
n: integer;
x: Integer;
MiEdit:  TEdit;
begin
N:= 1;
X:=20;
  Repeat
  begin
  MiEdit := TEdit.Create(Self);
  MiEdit.Parent := Self;
  MiEdit.Width:= 150;
  miedit.Left:= 60;
  miedit.Top:= X;
  miedit.Name:='Miedit'+IntToSTr(n);

  N:= N + 1;
  X:= X + 25;
  end;
  until
N = 10;
end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 23-04-2006
edusus edusus is offline
Miembro
 
Registrado: ene 2006
Posts: 47
Poder: 0
edusus Va por buen camino
TEdits en t.de ejecución

Gracias Marcos, pero mira hay un error.
Con el código que mandas se crean TEdits con el texto escrito por defecto: Miedit1, Miedit2.... pero estos tedits no responden a ese nombre, por ejemplo, si añado un botón con el código: Miedit2.text:= 'Hola'; verás que te da error.
Gracias por tu respuesta
Responder Con Cita
  #5  
Antiguo 23-04-2006
Avatar de German
German German is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 133
Poder: 21
German Va por buen camino
Te dará error por que el nombre del control no existe hasta haber ejecutado el código. Si en vez de lo que propones, escribes el siguiente código, veras que no da error:

(FindComponent('MiEdit2') as tEdit).text := 'Hola';

Salu2.
__________________
Tengo las manos llenas de dedos... Tengo los dedos llenos de teclas...
Tengo las teclas desordenadas... Tengo el desorden muy controlado...
Tengo el control en mis manos.
Responder Con Cita
  #6  
Antiguo 23-04-2006
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
No existe MiEdit2

Hola edusus, claro que al tratar de asignale 'Hola' a la propiedad text te indica error puesto que la componente, al querer ejecutar el procedimiento con el botón dos, no existe. MiEdit2 solo existe después que has ejecutado el procediento con el botón uno y entonces tienes que buscar la componente para poder asignarle el texto o leer el que tenga escrito.
Prueba el siguiente código, tienes que incluir dentro del bucle del botón uno una asignación de un valor a la propiedad Tag, en este caso lo mejor es el mismo valor de la variable N, de Tag, sería agregar en el ejemplo de marcoszorrilla.
Código Delphi [-]
  miedit.Name:='Miedit'+IntToSTr(n);
  MiEdit.Tag:=N; //línea agregada
  N:= N + 1;

Ahora coloca dentro de del botón 2 lo siguiente
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var m:integer;
    Casilla: TComponent;
begin
   for m:=0 to ComponentCount-1 do begin
   Casilla:= Components[m];
   if (Casilla is TEdit) then
      case TEdit(Casilla).Tag of
        1:TEdit(Casilla).text:='Hola';
        2:TEdit(Casilla).text:='Mi';
        3:TEdit(Casilla).text:='Amigo';
        4:TEdit(Casilla).text:='Miguel Angel';
        5:TEdit(Casilla).text:='es un';
        6:TEdit(Casilla).text:='placer';
        7:TEdit(Casilla).text:='saludarte';
        8:TEdit(Casilla).text:='este';
        9:TEdit(Casilla).text:='domingo.';
        end;
   end;
end;
Al ejucutarlo se logra asignar texto a cada uno de los edit creados, en lugar del Case se pudiera utilizar If..Then y tambien crear una función a la que llamar para leer o escribir en un edit en específico a partir del Tag asignado.
Esto puede ser una solución, esta fue la que se me ocurrió de seguro deben haber otras. El inveniente de esta es que hay que recorrer las componentes del formulario, que si tiene muchas retarda en algo la respuesta.
Espero te sirva para ilustrar el caso y lo aprovecho para mandar un saludo a un amigo.
Saludos
Responder Con Cita
  #7  
Antiguo 23-04-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Tú mismo tienes la solución a tu problema. Si ya has visto que puedes manipular los controles creados mediante el arreglo MiEdit no veo para qué insistir en asignarles un nombre. A fin de cuentas, no hay gran diferencia entre escribir MiEdit2 y MiEdit[2].

El nombre de un control realmente sólo tiene sentido cuando se añade directamente al formulario durante el diseño.

Lo único que necesitas es "promover" la variable local

MiEdit: array[1..10] of TEdit;

a nivel del formulario:

Código Delphi [-]
TForm1 = class(TForm)
private
  MiEdit: array[1..10] of TEdit;
end;

Así, aún después de creados los controles, podrás acceder a ellos con el arreglo.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Eventos en componentes creados en tiempo de ejecucion joumont OOP 3 27-12-2005 14:48:23
tRABAJO CON CONTROLES CREADOS EN EJECUCION bustio OOP 4 08-02-2005 17:52:23
Campos creados dinámicamente vs creados estáticamente Jose_Pérez Conexión con bases de datos 2 14-04-2004 11:34:03
Ayuda con Ejecución de programas creados con Kylix 3 Enterprise Trial darkone2k3 Lazarus, FreePascal, Kylix, etc. 0 18-11-2003 15:58:56
Objetos creados en tiempo de ejecución Scocc OOP 4 13-06-2003 20:55:29


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


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
Copyright 1996-2007 Club Delphi