Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-11-2010
Avatar de adeszeus
adeszeus adeszeus is offline
Miembro
 
Registrado: abr 2010
Ubicación: San Mateo, Mexico (aun lado de Santa Maria y pasando el campo de futbol)
Posts: 47
Poder: 0
adeszeus Va por buen camino
Lightbulb Como saber que objetos tiene Cierto Objeto

Bueno ando creando objetos en tiempo de ejecucion, y de manera dinamica cambian ciertas cantidades de objetos, en fin mi duda es la siguiente

Creo un GroupBox, dentro del mismo groupbox creo toolbars y ttoolbutton, hasta hay todo bien, pero dentro de cada groupox creo un objeto Memo,
pero quiero que el toolbutton mande un showmessage del objeto memo incluido dentro del mismo groupbox, y como cada groupbox es independe de si mismo pero contienen los mismo componentes, quisiera saber como identificar por ejemplo memo1, memo2, memo3 y asi de manera automatica, sin tener que escribir por ejemplo

showmessage(memo1.text);

si no de manera automatica solo llamar el evento y el mismo boton identifique que memo es el que se encuentra dentro del groupbox... espero haberme explicado
Responder Con Cita
  #2  
Antiguo 10-11-2010
Avatar de adeszeus
adeszeus adeszeus is offline
Miembro
 
Registrado: abr 2010
Ubicación: San Mateo, Mexico (aun lado de Santa Maria y pasando el campo de futbol)
Posts: 47
Poder: 0
adeszeus Va por buen camino
Cita:
Empezado por adeszeus Ver Mensaje
Bueno ando creando objetos en tiempo de ejecucion, y de manera dinamica cambian ciertas cantidades de objetos, en fin mi duda es la siguiente

Creo un GroupBox, dentro del mismo groupbox creo toolbars y ttoolbutton, hasta hay todo bien, pero dentro de cada groupox creo un objeto Memo,
pero quiero que el toolbutton mande un showmessage del objeto memo incluido dentro del mismo groupbox, y como cada groupbox es independe de si mismo pero contienen los mismo componentes, quisiera saber como identificar por ejemplo memo1, memo2, memo3 y asi de manera automatica, sin tener que escribir por ejemplo

showmessage(memo1.text);

si no de manera automatica solo llamar el evento y el mismo boton identifique que memo es el que se encuentra dentro del groupbox... espero haberme explicado
Agregando supongamos creo el groupbox1, y este contiene el memo1, y quiero que el toolbutton1 muestre un mensaje con el contenido memo1, pero supongamos creo el groupbox16 y por logica el memo16 y el toolbutton es el toolbutton50, como hacer que me llame el contenido del memo16?
Responder Con Cita
  #3  
Antiguo 10-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por adeszeus Ver Mensaje
Agregando supongamos creo el groupbox1, y este contiene el memo1, y quiero que el toolbutton1 muestre un mensaje con el contenido memo1, pero supongamos creo el groupbox16 y por logica el memo16 y el toolbutton es el toolbutton50, como hacer que me llame el contenido del memo16?
Hola adeszeus.

Una posible solución es utilizar una variable, que voy a llamar FGrupCont, que se incremente por cada grupo de componentes que hayas creado. Considerando como grupo todo lo que esté dentro del del GroupBox: ToolBar, ToolButton, Memo, etc.

Todos ellos reciben el valor de esa variable en su propiedad Tag que va a actuar como identificador único del grupo.
Luego de creado el último componente del grupo, la variable FGrupCont incrementa su valor.

Habiendo asignado en la creación al evento OnClick de los TToolButton, el procedimiento ToolButtonClick, entonces ya es sencillo:
Código Delphi [-]
procedure TForm1.ToolButtonClick(Sender: TObject);
var
  i: Integer;
begin
  for i:= ComponentCount - 1 downto 0 do
   if (Components[i] is TMemo) and (Components[i].Tag = (Sender as TToolButton).Tag) then
    ShowMessage((Components[i] as TMemo).Text);
end;

Saludos.

Última edición por ecfisa fecha: 10-11-2010 a las 05:25:06.
Responder Con Cita
  #4  
Antiguo 10-11-2010
Avatar de adeszeus
adeszeus adeszeus is offline
Miembro
 
Registrado: abr 2010
Ubicación: San Mateo, Mexico (aun lado de Santa Maria y pasando el campo de futbol)
Posts: 47
Poder: 0
adeszeus Va por buen camino
gracias !!!

he revisado tu mensaje, sin embargo encontre una solucion precisamente usando la propiedad tag del objeto gracias por el apoyo
Responder Con Cita
  #5  
Antiguo 10-11-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola adeszeus, también puedes hacerlo recorriendo solo los componentes del GroupBox respectivo, utilizando el Parent de tu ToolButton:

Código Delphi [-]
   for i:=0 to TGroupBox(ToolButton1.Parent).ControlCount-1 do
    if TGroupBox(ToolButton1.Parent).Controls[i] is TMemo then
      ShowMessage(TMemo(TGroupBox(ToolButton1.Parent).Controls[i]).Text);

Si asocias el mismo evento a los demas ToolButton de los otros GroupBox, entonces en ves de ToolButton1 utilizas el parámetro Sender.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 10-11-2010
Avatar de adeszeus
adeszeus adeszeus is offline
Miembro
 
Registrado: abr 2010
Ubicación: San Mateo, Mexico (aun lado de Santa Maria y pasando el campo de futbol)
Posts: 47
Poder: 0
adeszeus Va por buen camino
Buen punto =)

en si mi aplicacion de inicio solo tiene un imagelist un boton y un listbox, apartir de el llenado de este listbox ( de una base de datos ) sera la cantidad de objetos a crear entonces no tengo numeros de objetos definidos, sin embargo ciertos patrones que puedo continuar y pues solo juego con objetos que segun mis calculos pueden ser llamados, les dare la respuesta de como solucione

Código Delphi [-]
procedure TForm1.mensaje(Sender: TObject);
var
  mm: TMemo;
begin
mm:=TMemo(FindComponent('memo'+inttostr(TToolButton(Sender).Tag)));
if Assigned(mm) then
ShowMessage(mm.Text);
end;
Responder Con Cita
  #7  
Antiguo 10-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Realmente me gustó mucho la propuesta de Caro. Sabía que era más elegante y eficiente, pero no podía conseguir el TGroupBox directamente del TToolButton, ya que en la creación, hice que el parent de los TToolButtons fuera el TToolBar.
Así que que sin ser una corrección del código original, hice un pequeño ajuste para que funcione en mi caso.

Código Delphi [-]
procedure TForm1.ToolButtonClick(Sender: TObject);
var
  i : Integer;
begin
  with TGroupBox(TToolBar(TButton(Sender).Parent).Parent) do
   for i:= ComponentCount-1 downto 0 do
     if (Components[i] is TMemo) then
       ShowMessage(TMemo(Components[i]).Text);
end;

Saludos.

Última edición por ecfisa fecha: 10-11-2010 a las 08:07:50.
Responder Con Cita
  #8  
Antiguo 10-11-2010
Avatar de adeszeus
adeszeus adeszeus is offline
Miembro
 
Registrado: abr 2010
Ubicación: San Mateo, Mexico (aun lado de Santa Maria y pasando el campo de futbol)
Posts: 47
Poder: 0
adeszeus Va por buen camino
Smile Buenas soluciones !!!

Muy buenas soluciones hahahaha, sin embargo jamas supe que opinaron de la mia y espero hechar mano de las suyas en un futuro muy proximo ( al amanecer) hahahaha muchas gracias por su apoyo
Responder Con Cita
  #9  
Antiguo 10-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por adeszeus Ver Mensaje
sin embargo jamas supe que opinaron de la mia
Aunque básicamente hacen lo mismo, me gusta más que la mia...

Saludos.
Responder Con Cita
  #10  
Antiguo 10-11-2010
Avatar de adeszeus
adeszeus adeszeus is offline
Miembro
 
Registrado: abr 2010
Ubicación: San Mateo, Mexico (aun lado de Santa Maria y pasando el campo de futbol)
Posts: 47
Poder: 0
adeszeus Va por buen camino
limpieza y experiencia

Pues creo que todo es cuestion de experiencia propia y pues mas que nada el pensar e imaginar las cosas de una perspectiva diferente, ustedes recorren los objetos uno a uno dentro de cada contenedor y al final resolvieron mi duda y me dieron apertura a mas opciones. Yo pues leyendo y buscando encontre esa opcion que es similar, busca el objeto, lo localiza y simplemente lo llamo por nombre.... en fin un problema y como es visto 3 soluciones diferentes..

Gracias a ambos por su atención y apoyo.
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
¿Cómo saber si un objeto está ya creado? noob OOP 6 14-02-2009 14:11:56
Como saber si me frame esta creado en cierto evento? Albano OOP 2 15-03-2007 23:13:44
¿Como saber que base de datos usa cierto programa? rmenor Conexión con bases de datos 4 20-10-2006 17:45:04
Como saber los dias que tiene un mes?? alfredosg19 Varios 3 06-03-2005 12:56:12
Como saber que letra tiene asignada la unidad de CD pampitasnowman Varios 1 22-09-2003 19:29:14


La franja horaria es GMT +2. Ahora son las 12:40:21.


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