Estimado Jorge,
Si los platos son botones u otros controles creados OF oPanel, hay que terminar esos controles antes de crear los de la nueva categoría. No basta con asignar un array vacío a oPanel:aControls, porque eso solo elimina las referencias, no las ventanas de los controles.
He revisado el fuente actual: TScrollPanel no define un método Clear(). Sus controles se registran en aControls y el método End() de TControl los retira de ese array. Por eso conviene recorrer una copia, en orden inverso, y no un AEval() sobre el mismo array que End() está modificando.
El esquema para cambiar una categoría por otra es:
// Antes de eliminar los controles, volver al origen
if ! Empty( oPanel:aControls )
if oPanel:oCtrlTop != nil
oPanel:GoTop()
endif
if oPanel:oCtrlLeft != nil
oPanel:GoLeft()
endif
endif
// End() modifica oPanel:aControls: recorrer una copia
aAnteriores := AClone( oPanel:aControls )
for n := Len( aAnteriores ) to 1 step -1
aAnteriores[ n ]:End()
next
aAnteriores := {}
// Solo si utilizas AddText() o SetPage()
oPanel:aSays := {}
oPanel:aPages := {}
// AQUI creas los controles de la nueva categoria OF oPanel
// ...
// Recalcular DESPUES de crear los nuevos controles
if ! Empty( oPanel:aControls )
oPanel:SetRange()
endif
oPanel:Refresh()
Declara aAnteriores y n como LOCAL al comienzo de tu función. El ejemplo supone controles normales derivados de TControl y que vuelves a cargar una categoría con controles. No es una función Clear() general: en el fuente actual SetRange() no reinicia el estado cuando aControls está vacío, y las referencias internas a los controles extremos deben renovarse al cargar los nuevos.
Además, End() solicita el cierre mediante un mensaje de Windows; no significa que todas las ventanas hayan terminado de destruirse en esa misma línea. Evita seguir utilizando los objetos de la categoría anterior.
Este esquema está contrastado con el fuente, pero no lo he compilado ni ejecutado. Si nos muestras cómo creas los botones/platos y la versión de FWH que utilizas, podemos ajustarlo a tu código, especialmente si hay categorías vacías o controles propios.
Saludos,
FiveTech AI