Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Crear evento a un componente creado en ejecución (https://www.clubdelphi.com/foros/showthread.php?t=60507)

Lepe 05-10-2008 00:34:59

Si están dentro del Scrollbox, creo que seria Scrollbox.Controls[i].Free (obviamente el bucle es sobre scrollbox.controls.count -1)

Destroy se usa cuando diseñas el componente, pero no se debe llamar nunca, hay que usar Free.

Saludos

enecumene 05-10-2008 00:41:40

¿Sin importar que están dentro a través del parent?.

enecumene 05-10-2008 01:02:13

Bueno haciendo la modificación con tu consejo Lepe:
Código Delphi [-]
var I: Integer;
begin
for I := 0 to FMain.ScrollBox1.ControlCount do begin
//destruye los componentes creados
if FMain.ScrollBox1.Controls[i] is TFrame then
    TFrame(FMain.ScrollBox1.Controls[i]).Free;
//

Error:
Cita:

---------------------------
Debugger Exception Notification
---------------------------
Project Vellonera.exe raised exception class EListError with message 'List index out of bounds (3)'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
En el Scrollbox tenía seis frame y sólo destruyó 3 intercalados y no completó el código.

Saludos.

Delphius 05-10-2008 01:04:43

Cita:

Empezado por enecumene (Mensaje 318238)
Bueno haciendo la modificación con tu consejo Lepe:
Código Delphi [-]var I: Integer; begin for I := 0 to FMain.ScrollBox1.ControlCount do begin //destruye los componentes creados if FMain.ScrollBox1.Controls[i] is TFrame then TFrame(FMain.ScrollBox1.Controls[i]).Free; //


Error:


En el Scrollbox tenía seis frame y sólo destruyó 3 intercalados y no completó el código.

Saludos.

Hola enecumene, Por la descripción del error y el código intuyo que se debe a que te faltó restar 1 a ControlCount.;)

Saludos,

enecumene 05-10-2008 01:08:13

Cita:

Empezado por Delphius (Mensaje 318239)
Hola enecumene, Por la descripción del error y el código intuyo que se debe a que te faltó restar 1 a ControlCount.;)

Saludos,

Pues no, sigue con el mismo error :)

Delphius 05-10-2008 01:15:15

Cita:

Empezado por enecumene (Mensaje 318240)
Pues no, sigue con el mismo error :)

Ummmm que raro.

Ahora que veo el código... yo diría que debería ser downto. Es decir que el for debe ir desde ControlCount - 1 hasta 0:

Código Delphi [-]
for i := ScrollBox1.ControlCount - 1 donwto 0 do...

Saludos,

enecumene 05-10-2008 01:18:51

Cita:

Empezado por Delphius (Mensaje 318241)
Ummmm que raro.

Ahora que veo el código... yo diría que debería ser downto. Es decir que el for debe ir desde ControlCount - 1 hasta 0:

Código Delphi [-]for i := ScrollBox1.ControlCount - 1 donwto 0 do...


Saludos,

Pues efectivamente mi amigo salteño, me resolvió ese problema, le estoy agradecido. ;)

Saludos.

Delphius 05-10-2008 01:23:37

Cita:

Empezado por enecumene (Mensaje 318242)
Pues efectivamente mi amigo salteño, me resolvió ese problema, le estoy agradecido. ;)

Saludos.

Un gusto en poder ayudarte Fernando.
Para mi no hay mejor recompensa que el haber ayudado a buen amigo.

Saludos,

rgstuamigo 09-10-2008 19:57:40

Hola enecumene prueba con esto:
Código Delphi [-]
for I := 0 to FMain.ComponentCount - 1 do begin
//destruye los componentes creados
if FMain.Components[i] is TFrame1 then
    TFrame1(FMain.Components[i]).Free;
//

Saludos....;)

enecumene 09-10-2008 20:22:36

Gracias rgstuamigo, la solución de Delphius me resolvió el problema, de todos modos te agradezco tu ayuda ;)

Saludos.

enecumene 09-10-2008 23:31:37

Ahora se me presenta otra duda, en los frames que se crean y se eliminan en tiempo de ejecución tienen una imagen con su propiedad visible en False, que sólo se presentará al darle click a otra imagen, ¿qué sucede?, al darle click a las demás imágenes se presenta esa imagen sin lograr que las demás vuelvan al estado de visibilidad a False. Para mejor apreciación adjunto una imagen:



como pueden ver las figuras 1, 2 y 3, al dar click una imagen aparece la figura 1, pero al dar la siguiente imagen aparece la figura 2 pero no desaparece la figura1 y así sucesivamente, como se trata de un ciclo y hay dos TImage en el frame no sabría cómo llegarle al asunto.

Saludos.

Lepe 10-10-2008 11:02:10

Al final vas a necesitar una lista. Es como un Listbox, que al poner su propiedad Seletected := 3, deselecciona el anterior y selecciona el nuevo.

Puedes heredar de un TObjectList e implementarlo, te será fácil y muy cómodo de mantener el código. Podrías tener una variable global que indique el elemento seleccionado, pero con el tiempo se te complicará.

La lista, también te permitiría liberar todos los componentes sin tener que recorrer los controles del scrollbox.

Busca en el foro, hay mucho sobre TObjectList, así como en la propia ayuda de windows.

Saludos

enecumene 10-10-2008 19:01:29

Muchas gracias Lepe, ahora mismo lo verifico :)

Saludos.


La franja horaria es GMT +2. Ahora son las 01:07:41.

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