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 28-03-2007
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question matriz de controles

Tengo una duda, estoy haciendo unas ventanas que tienen una cantidad considerable de componentes. ¿Cómo hago una matriz de controles? Sería algo como:
Tengo 100 Edits y quiero ponerles el mismo nombre y diferenciarlos por algún número... a ver..
caja(1)
caja(2)
...
caja(100)

y poder poner los valores correspondientes en sus propiedades text solamente localizandolos por el número en la matriz.
No quiero ser comparativo pero en Visual Basic los componentes tienen una propiedad index la cual me permite armar esa matriz de controles y luego puedo encontrarlos a través de ese índice. Bien, supongo que delphi tiene algo similar pero por desgracia aún no lo encontré. Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 29-03-2007
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
Hola,

Cita:
Empezado por santiago14
No quiero ser comparativo pero en Visual Basic los componentes tienen una propiedad index la cual me permite armar esa matriz de controles
De cuando alguna vez programé en VB, recuerdo que esa es una de las pocas cosas que se extrañan en Delphi. No obstante, no es difícil ingeniárselas para hacer algo similar.

Declara un arreglo de TEdit en tu formulario:

Código Delphi [-]
type
  TForm1 = class(TForm)
    (* Panel contenedor de los edits *)
    Panel1: TPanel;

    (* Edits insertados en el formulario *)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    ...

    private
      Edits: array of TEdit;
  end;

Coloca todos los Edit dentro de un mismo Panel que no contenga ningún otro control. Esto no es estrictamente necesario pero facilita el llenado del arreglo.

En el constructor del formulario pon:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;

begin
  (* Asignas memoria para el arreglo *)
  SetLength(Edits, Panel1.ControlCount);

  (* Asignas los Edits del formulario al arreglo *)
  for I := 0 to Panel1.ControlCount - 1 do
    Edits[i] := TEdit(Panel1.Controls[i]);
end;

Con esto ya puedes manipular las propiedades de los edits del formulario através del arreglo Edits, por ejemplo:

Código Delphi [-]
var
  I: Integer;

begin
  for I := 0 to Panel1.ControlCount - 1 do
    Edits[i].Text := Format('Cuadro de edición %d', [i]);
end;

// Saludos
Responder Con Cita
  #3  
Antiguo 29-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
si, me pasa casi igual, tengo 4 edits que meti en un panel, imagino que los otros edits que estan fuera del panel tambien estan en el array.

la pregunta es, tengo esos 4 edits dentro del panel pero tambien tengo otros edits qu eno me interesa que esten fuera, hasta ahi es correcto la procedure que pusiste, pero a la hora de editar cada uno de esos edit, me usa el edit[i].text o edit1.text, porque en pantalla me sigue usando los edit originales y tampoco se como usar los edit[i] para ir cambiando de uno a otro sin usar un for y que valgan los onexit.

Perdon si no me explique bien.....
Responder Con Cita
  #4  
Antiguo 29-04-2007
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
Cita:
Empezado por anubis
Perdon si no me explique bien
Estás perdonado. Ahora por favor explícate bien , que al menos yo, no entiendo lo que quieres hacer.

// Saludos
Responder Con Cita
  #5  
Antiguo 29-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
si gracias. A ver. Tengo un formulario con varios controles, entre ellos tedit, labels etc.
tal y como sugerias, genere un array con los tedit, y luego agrupe en un panel algunos edit, porque me interesa hacer calculos con ellos. los edit se siguen llamando precio, debe, y haber, y se siguen llamando asi aunque haya creado el array porque en las propiedades del objeto no puedo poner en el nombre edit[1]. Como manipulo entonces los eventos onexit, onkeypressed o simplemente cambio de un edit a otro para que se este usando el edit[i] en vez del edit precio, debe o haber?.

es un poco enrevesada la pregunta...

gracias
Responder Con Cita
  #6  
Antiguo 30-04-2007
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
La verdad es que sigo sin entender lo que buscas pero vamos a aclarar algunos puntos, y quizá de ahí puedas partir.

El colocar los edits dentro de un panel es nada más para facilitar la inicialización del arreglo mediante un ciclo for, pero si tienes varios controles mezclados y no todos ellos han de formar parte del arreglo, siempre puedes optar por hacer la asignación directa:

Código Delphi [-]
Edits[0] := UnEdit;
Edits[1] := OtroEdit;
Edits[2] := UnEditMas;

Ahora, para efectos de eventos asociados a estos edits, te conviene, además, asignar a cada edit el índice que ocupa en el arreglo. Esto puedes hacerlo en la propiedad Tag del edit.

Código Delphi [-]
(* Este ciclo se hace después de inicializar el arreglo *)
for J := 0 to Length(Edits) - 1 do
begin
  Edit[J].Tag := J;

  Edit[J].OnExit := EditExit;
  Edit[J].OnKeyPressed := EditKeyPressed;
  ...
end;

EditExit y EditKeyPressed son métodos que declaras manualmente con los mismos parámetros que los eventos normales:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    procedure EditExit(Sender: TObject);
    procedure EditKeyPressed(Sender: TObject; var Key: Char);
  end;

Nota que los pones en la sección private, porque no los genera el IDE sino tú mismo.

Entonces, todos los edits del arreglo comparten los mismos manejadores de eventos, así que en éstos, debes distinguir cuál es el que está generando el evento, y para ello usas el Tag que asignaste:

Código Delphi [-]
procedure TForm1.EditExit(Sender: TObject);
var
  Edit: TEdit;

begin
  Edit := Sender as TEdit;
  case Edit.Tag of
    0: ...;
    1: ...;
    2: ...;
    ...
  end;
end;

// Saludos
Responder Con Cita
  #7  
Antiguo 30-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por anubis
si gracias. A ver. Tengo un formulario con varios controles, entre ellos tedit, labels etc.
tal y como sugerias, genere un array con los tedit, y luego agrupe en un panel algunos edit, porque me interesa hacer calculos con ellos. los edit se siguen llamando precio, debe, y haber, y se siguen llamando asi aunque haya creado el array porque en las propiedades del objeto no puedo poner en el nombre edit[1]. Como manipulo entonces los eventos onexit, onkeypressed o simplemente cambio de un edit a otro para que se este usando el edit[i] en vez del edit precio, debe o haber?.

es un poco enrevesada la pregunta...

gracias
Perdón que me entrometa, pero esto no seria mejor hacerlo con un StringGrid, digo, como si fuera una hoja de excel.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 30-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
se agradece roman por la explicacion, voy aprobar. Gracias de nuevo.

egostar, aqui vale todo tipo de comentarios, asi aprendemos todos, tambien voy aprobar como funciona el stringGrid a ver como funciona.

voy a intentar buscar un manual donde vengan explicados los componentes asi no doy tanto la lata .
Responder Con Cita
  #9  
Antiguo 30-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias roman, la cosa funciona.
egostar, de momento el tstringgrid no lo uso porque me lia un poco, tengo que investigar mas a ver como funciona.

gracias de nuevo
Responder Con Cita
  #10  
Antiguo 30-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias roman, la cosa funciona.
egostar, de momento el tstringgrid no lo uso porque me lia un poco, tengo que investigar mas a ver como funciona.

gracias de nuevo
Responder Con Cita
  #11  
Antiguo 30-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias roman, la cosa funciona.
egostar, de momento el tstringgrid no lo uso porque me lia un poco, tengo que investigar mas a ver como funciona.

gracias de nuevo
Responder Con Cita
  #12  
Antiguo 30-04-2007
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


¿Piensas que no lo hemos visto o tu pc manda mensajes por su cuenta



// Saludos
Responder Con Cita
  #13  
Antiguo 01-05-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Inconscientemente le he dado una ostia al pc, pensando que estaba 'rayao' - es que vamos para mayores -

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #14  
Antiguo 01-05-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias roman, la cosa funciona.
egostar, de momento el tstringgrid no lo uso porque me lia un poco, tengo que investigar mas a ver como funciona.

gracias de nuevo
Responder Con Cita
  #15  
Antiguo 01-05-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
mil disculpas, al enviar le di y me dio error, asi que le di a actualizar, normalmente me suelo fijar por si se envio.

Sorry.
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
matriz editable jsanchez OOP 11 20-01-2006 15:28:41
matriz 3 dimensiones Lidia SQL 2 12-12-2005 18:59:58
inverza de una matriz gulder Varios 7 15-11-2005 23:40:29
Imprimir matriz NuncaMas Impresión 6 19-11-2003 19:05:23
Guardar matriz? danytorres Varios 1 27-10-2003 04:10:23


La franja horaria es GMT +2. Ahora son las 16:50:02.


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