Ver la Versión Completa : Problema destruyendo controles
waremovil
05-11-2007, 20:50:16
Hola, tengo una aplicación en bcb6 que en un momento dado crea una serie de de controles tlabel y tcombobox dinamicamente, pero necesito también destruirlos dinamicamente, sin embargo el siguiente codigo no los destruye
(Los controles están metidos en un TPanel llamado PanelCustom)
NumControles = PanelCustom->ControlCount;
for(int i=0;i < NumControles ; i++){
PanelCustom->Controls[i]->Destroying();
}
No hay manera, los controles no se destruyen. Necesito saber como se eliminan del todo controles a través del vector Controls[indice] o de que otra manera sería posible
muchas gracias por adelantado
un saludo
Hola,
No conozco prácticamente nada de C++ Builder, pero, en Delphi, el método que suele usarse para liberar objetos es "Free()", no "Destroying()", que, ahora mismo, es la primera vez que lo veo. Existe "Destroy", pero, no parece el mismo. Pero tal vez no puedas hacerme mucho caso, ya digo que de C++ Builder sé más bien poco.
Otra cosa que sí que puede ser importante, es que cuando liberamos controles de un determinado contenedor, suele usarse un bucle "al revés", es decir, en Delphi, en lugar de:
var
i, total: integer;
begin
total := GetTotal();
for i := 0 to total - 1 do
begin
{...}
end;
end;
... es menester utilizar este otro tipo de bucle:
var
i, total: integer;
begin
total := GetTotal();
for i := total downto 0 do
begin
{...}
end;
end;
Tal vez lo dicho pueda servirte de ayuda. O tal vez no. Veremos a ver. :)
waremovil
06-11-2007, 08:26:06
Hola dec, gracias por contestar. Conozco el método free() pero cuando lo miro en la documentación del builder me pone que no lo invoque directamente.
Cuando lo intento con free() funciona pero me elimina un par de controles y entonces me da error como si no existiera el índice al que me refiero... voy a probar a eliiminar al revés, tal y como dices tu
gracias, un saludo
Al menos en Delphi, Destroying es una propiedad Boolean que indica si el control se está destruyendo o no (en ningún caso destruye el control). La propiedad se usa normalmente en el desarrollo de componentes.
En la ayuda habrás visto que no se debe usar "Destroy", lo que debes usar es "free" (supongo ha sido un error de tecleo).
El error de índices es lo comentado por dec.
Saludos
Ya se que no tiene nada que ver, xo como no sabía donde meterme...hay alguna funcion en la libreria de C para pasar de alfanumerico,etc. a hexadecima?
l:confused:
waremovil
06-11-2007, 23:48:41
Muchas gracias, teneis toda la razón del mundo
funciona perfectamente usando free()... el error me lo daba porque eliminaba ascendentemente en vez de al revés
no caía en que al eliminar el primero de la lista (index 0) el index 1 pasa a ser el cero y así sucesivamente... al hacerlo descendente va de maravilla
muchas gracias de nuevo
un saludo
waremovil
06-11-2007, 23:52:28
@Ary: La función que buscas es IntToHex
Formato: IntToHex(Valor,Dígitos)
ejemplo: IntToHex(VariableEntera,2)
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.