Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como saber que objetos tiene Cierto Objeto (https://www.clubdelphi.com/foros/showthread.php?t=70770)

adeszeus 09-11-2010 23:54:22

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

adeszeus 10-11-2010 00:55:15

Cita:

Empezado por adeszeus (Mensaje 381874)
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?

ecfisa 10-11-2010 05:16:58

Cita:

Empezado por adeszeus (Mensaje 381879)
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. :)

adeszeus 10-11-2010 05:41:14

gracias !!!
 
he revisado tu mensaje, sin embargo encontre una solucion precisamente usando la propiedad tag del objeto :) gracias por el apoyo

Caro 10-11-2010 05:50:25

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

adeszeus 10-11-2010 05:54:52

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;

ecfisa 10-11-2010 07:55:56

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. :)

adeszeus 10-11-2010 08:18:40

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:cool:

ecfisa 10-11-2010 08:34:19

Cita:

Empezado por adeszeus (Mensaje 381907)
sin embargo jamas supe que opinaron de la mia

Aunque básicamente hacen lo mismo, me gusta más que la mia... ;)

Saludos. :)

adeszeus 10-11-2010 08:38:37

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.:D


La franja horaria es GMT +2. Ahora son las 05:09:53.

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