PDA

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

dec
05-11-2007, 20:57:40
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

Lepe
06-11-2007, 10:08:19
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

Ary
06-11-2007, 10:43:09
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)