Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Repintar componente

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Repintar componente Responder citando

Hola...

He creado un componente en el que pinto una serie de figuras (mediante el procedimiento OnPaint).
El caso es que cuando ejecuto mi proyecto el componente funciona perfectamente..el problema surge cuando habro otra ventana y esta tapa al formulario que contiene el componente, al volver acceder al formulario este se refresca todo excepto mi componente en el que ya no se ven las figuras que he dibujado.
Una solucion es volver a "crear" el componente desde la funcion OnPaint del formulario contenedor...pero no me convence (crea el Componente en momentos que no me conviene).
¿Es posible otra solucion?... por ejemplo saber cuando el formulario Contenedor vuelve ha estar en primer plano y solo en ese momento crear el componente denuevo.


Gracias..
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Un poco de codigo nos puede indicar el fallo de tu problema.

Bien, para que el componente se dibuje cada vez que se sea necesario, establece el siguiente codigo en los respectivos archivos de tu proyecto.


En la parte privada de tu clase, inserta el siguiente código, el objetivo es que Windows solicita que el control sea dibujado, para ello es necesario hacer uso del mensaje CN_DRAWITEM

Archivo .h
Código:

class ccsgMiComponente : public TButton  // nombre y herencia del componente.
{
private:
      // Mensaje de Windows solicitando que el control sea dibujado
    void __fastcall ccsgDrawItem(TWMDrawItem& Mensaje);
   BEGIN_MESSAGE_MAP
     MESSAGE_HANDLER(CN_DRAWITEM, TWMDrawItem, ccsgDrawItem);
   END_MESSAGE_MAP(TButton);
protected:

public:
__published:
};


Dentro del archivo de código .cpp, debes crear el codigo que dibuja los elementos de tu componente, cada vez que Windows le pida al componente que se deba dibujar, dicho de otro modo, cuando sobre pones otra ventana y posteriormente la eliminas, Windows le dice a la ventana de abajo y a todos sus componentes que se vuelvan a dibujar, enviando el mensaje CN_DRAWITEM a todos los elementos (formularios, paneles, botones, etc etc), lo que se hace es capturar este mensaje y posteriormente dibujar de nuevo.

Archivo .cpp
Código:
void __fastcall ccsgMiComponente::ccsgDrawItem(TWMDrawItem& Mensaje)
{
  // aqui escribes el codigo que dibuja tu componente.
 //
}

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Te servira esto:

Código:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
   DoubleBuffered = true;
}

_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Gracias por contestarme a los dos....
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.