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 04-10-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Question Borrar lo que esta dentro de un scrollbox

De qué manera se podría borrar los TLabel, Button, CheckBox que se encuentran dentro de un scrollbox en tiempo de ejecución?
Responder Con Cita
  #2  
Antiguo 04-10-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Puedes recorrer todos los componentes del formulario utilizando los métodos componentCount y Componentes[i].
Una vez que hagas el recorrido, se trata de preguntar cuales están dentro del scrollbox para borrarlos; Para ello puedes utilizar la propiedad Parent. Algo así:

Código Delphi [-]
 var
   i:Integer;
   ctrl:TControl;
 begin
 
   // recorrer la lista de componentes (al revés)
   for i := (Self.ComponentCount - 1) downto 0 do begin
     // Es un TControl ?
     if (Self.Components[i] is tControl) then begin
       ctrl := TControl(Self.Components[i]);
       // Está en el Scrolll?
       if (ctrl.Parent = ScrollBox1) then begin
         MessageDlg('Se va a borrar: ' + ctrl.Name, mtWarning, [mbOK], 0);
         FreeAndNil(ctrl);
       end;
     end;
   end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 04-10-2005
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Otra salución

Hola, por qué no usar las propiedades controls y controlcount del propio TScrollBox, de esta forma solo recorremos los elementos que nos interesa (controles del ScrollBox1) y simplemente los destruimos.

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
   i : integer;
begin
  for i := ScrollBox1.ControlCount -1  downto 0 do
      ScrollBox1.Controls[i].Free;
end;

Bueno pues ahora tienes dos vías

Saludos Yusnerqui
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #4  
Antiguo 04-10-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por yusnerqui
...por qué no usar las propiedades controls y controlcount del propio TScrollBox?
Efectívamente, porqué no usarlas... (se me pasó...)

Cita:
Empezado por yusnerqui
...Bueno pues ahora tienes dos vías...
A usar preferiblemente la de yusnerqui, ya que es más clara y eficiente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 05-10-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
ok Probaré apenas llegue a casa. Muchas gracias.....
Responder Con Cita
  #6  
Antiguo 05-10-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Una pregunta: ¿Por qué se hace el recorrido al revés?. Gracias....
Responder Con Cita
  #7  
Antiguo 05-10-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por sierraja
¿Por qué se hace el recorrido al revés?
Como los vas borrando, si empiezas por el principio te dará error (antes o después).
Por ejempo, si la lista tiene 20 elementos, al eliminar el 0, el que antes era el 1 pasa al 0 y al intentar eliminar el 1, realmente has borrado el dos.

Espero haberme explicado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 05-10-2005
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 Neftali
Como los vas borrando, si empiezas por el principio te dará error (antes o después).
¡Ahh! Entonces podemos ahorrarnos una variable:

Código Delphi [-]
while ScrollBox1.ControlCount > 0 do
  ScrollBox1.Controls[0].Free;

// Saludos
Responder Con Cita
  #9  
Antiguo 05-10-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por roman
¡Ahh! Entonces podemos ahorrarnos una variable:

Código Delphi [-]
while ScrollBox1.ControlCount > 0 do
  ScrollBox1.Controls[0].Free;
Wow Muy acertada y eficiente tu técnica
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #10  
Antiguo 05-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por vtdeleon
Wow Muy acertada y eficiente tu técnica
¡Eso no es nada! Dale a roman cinco minutos más y hasta el bucle se hará innecesario...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #11  
Antiguo 05-10-2005
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 dec
y hasta el bucle se hará innecesario...
Eso es fácil:

Application.Terminate;



// Saludos
Responder Con Cita
  #12  
Antiguo 05-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Talking

Cita:
Empezado por vtdeleon
SaludosWow Muy acertada y eficiente tu técnica
Voy a buscar un poquito de pelea contradiciendo esto , en lo que refiere a optimización de código, es mucho mas eficiente la opción del for, ya que consulta solo una vez la propiedad ControlCount, en cambio el while ejecutará el código de la propiedad para cada iteración.
Sería muy fino evaluar según el tamaño de la lista que código nos conviene.

PD: Siempre suponiendo que la ejecución es lineal, que solo "nosotros" eliminamos estos componentes.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 05-10-2005 a las 19:57:20. Razón: Post Data
Responder Con Cita
  #13  
Antiguo 05-10-2005
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
En un ciclo for también hay una comparación en cada vuelta. Aunque no escrita explícitamente en el código, sí en el código ensamblado.



// Saludos
Responder Con Cita
  #14  
Antiguo 05-10-2005
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
Ya entendí a lo que te refieres. Sí tienes razón.

// Saludos
Responder Con Cita
  #15  
Antiguo 05-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
En un ciclo for también hay una comparación en cada vuelta. Aunque no escrita explícitamente en el código, sí en el código ensamblado.
Noo.. pero sabes a lo que me refiero!... la comparación siempre esta, pero en el caso de la propiedad se ejecuta el código propio de la propiedad (en este caso TWinControl.GetControlCount). Sin lugar a dudas va a ser mucho mas "económico" un entero mas en memoria, a no ser que solo tengas un ítem en la lista .
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #16  
Antiguo 06-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Nunca te acostarás... etc.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #17  
Antiguo 06-10-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Talking Mi exposición:

A todos mi agradecimiento, muchisimas gracias, me gusta sentirme parte de este maravilloso equipo, cada vez siempre, pero siempre se aprende más. De nuevo muchas gracias.
Responder Con Cita
  #18  
Antiguo 07-10-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Question Ahora la pregunta es:

Tengo varios TImage, TLabel, TdxButton y TdxCheckBox dentro del ScrollBox1, ahora ¿ Cómo hago para chequear la propiedad Checked del TdxCheckBox y ejecutar otro proceso?. Gracias.
Responder Con Cita
  #19  
Antiguo 07-10-2005
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 sierraja
¿ Cómo hago para chequear la propiedad Checked del TdxCheckBox y ejecutar otro proceso?
¿Qué tiene que ver esto con el tema del hilo?

// Saludos
Responder Con Cita
  #20  
Antiguo 07-10-2005
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Question

EL tema inicial era como eliminar los componentes que se encuentran dentro del scrollbox, pero tengo la necesidad de que dentro del scrolbox tengo varios componentes y uno de ellos son checkbox del tipo tdxcheckbox y quiero verificar si la propiedad checked está true y depende de ello ejecutar un proceso xxxx, por eso la pregunta ¿ cómo se accede a las propiedades de los componentes dentro del scrollbox creados en tiempo de ejecución?
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


La franja horaria es GMT +2. Ahora son las 22:19:31.


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