Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-11-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
Problema destruyendo controles

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
Responder Con Cita
  #2  
Antiguo 05-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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:

Código Delphi [-]
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:

Código Delphi [-]
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 06-11-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 06-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 06-11-2007
Ary Ary is offline
Registrado
 
Registrado: nov 2007
Posts: 1
Poder: 0
Ary Va por buen camino
Question Seguramente sencillo

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
Responder Con Cita
  #6  
Antiguo 06-11-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 06-11-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
@Ary: La función que buscas es IntToHex

Formato: IntToHex(Valor,Dígitos)

ejemplo: IntToHex(VariableEntera,2)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Controles ActiveX senpiterno Varios 12 27-09-2004 20:14:47
controles bd o no? walrus Conexión con bases de datos 1 04-08-2004 18:01:33
Parpadeo de controles roman Varios 11 03-04-2004 07:56:59
Controles de un boton... Tanix Varios 6 03-06-2003 09:56:08
Coleccion de Controles... craven OOP 2 02-06-2003 17:09:33


La franja horaria es GMT +2. Ahora son las 23:53:18.


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
Copyright 1996-2007 Club Delphi