Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Componentes en un TTabSheet (https://www.clubdelphi.com/foros/showthread.php?t=96587)

Angel.Matilla 05-02-2024 12:14:36

Componentes en un TTabSheet
 
Me estoy volviendo loco. Tengo esta pantalla:

que es un TPageControl con tres pestañas, cada una con sus TEdit, TImage, etc., y quiero recorrer los elementos de cada pestaña buscando exclusivamente los TImage. Para ello uso este código:
Código:

Source = this->FindComponent(PageControl1->ActivePage->Name);
TTabSheet *Sheet = static_cast<TTabSheet *>(Source);
for (nItem = 0; nItem < Sheet->ComponentCount; nItem ++)
{
    Source = Sheet->Components[nCount];
    if (!Source->ClassNameIs("TImage"))
          continue;
}

Las dos primeras líneas las ejecuta sin ningún problema pero al llegar al inicio del bucle me encuentro que Sheet->ComponentCount vale 0 cuando debería vale 12 ó 13. También he comprobado que mientras la pestaña seleccionada tiene, por ejemplo, de dirección de memoria :00B0A758, esa variable Sheet tiene :00B0A19C, con lo cual es evidente que no es el mismo elemento, pero Source sí tiene el mismo valor de la pestaña. ¿Qué estoy haciendo mal?

Angel.Matilla 05-02-2024 12:48:14

Como sigo probando, voy un paso más allá: En esa pantalla el primer TEdit se llama Titulo_cine y la pestaña Cine; he comprobado con el depurador esto:
Cita:

Titulo_cine->Parent: :00B3A758
Cine: :00B3A758
Cine->ComponentCount: 0

Casimiro Notevi 05-02-2024 12:50:41

Creo que no es componentcount, sino controlcount.

Neftali [Germán.Estévez] 05-02-2024 12:56:43

Prueba a usar ControlsCount y Controls[i] en lugar de ComponentsCount y Components[i].
Ten en cuenta que si el Image está dentrro de un TPanel, deberás repetir el proceso para los controles que sean contenedores (de forma recursiva)

Angel.Matilla 05-02-2024 19:01:52

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 554330)
Prueba a usar ControlsCount y Controls[i] en lugar de ComponentsCount y Components[i].
Ten en cuenta que si el Image está dentrro de un TPanel, deberás repetir el proceso para los controles que sean contenedores (de forma recursiva)

Es el caso: los TImage están dentro de paneles. Gracias por la inidicación

Angel.Matilla 05-02-2024 19:04:44

Gracias a los dos. Efectivamente es ControlCount. Estaba usando ComponentCount porque en otra función que tengo lo uso así y va bien.

Angel.Matilla 05-02-2024 19:30:23

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 554330)
Prueba a usar ControlsCount y Controls[i] en lugar de ComponentsCount y Components[i].
Ten en cuenta que si el Image está dentrro de un TPanel, deberás repetir el proceso para los controles que sean contenedores (de forma recursiva)

He reemplazado los TPanel por TBevel y listo. ^\||/

Neftali [Germán.Estévez] 06-02-2024 08:13:32

Cita:

Empezado por Angel.Matilla (Mensaje 554339)
He reemplazado los TPanel por TBevel y listo. ^\||/


Es otra opción para simplificar. :D
Aunque si el TPanel es necesario, tampoco se complica mucho la cosa...

Angel.Matilla 06-02-2024 10:11:51

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 554344)
Es otra opción para simplificar. :D
Aunque si el TPanel es necesario, tampoco se complica mucho la cosa...

Básicamente es para que en la pantalla se vea que ahí hay algo cuando esté vacío.


La franja horaria es GMT +2. Ahora son las 16:14:09.

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