 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Comodin Cdt

Registrado: 07 Mar 2011Mensajes: 21
|
Publicado: Mie 27 Abr, 2011 10:10 am Asunto: Repintar componente |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 30 Abr, 2011 11:54 pm Asunto: |
|
|
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.
//
} |
_________________
 |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mie 04 May, 2011 4:51 pm Asunto: |
|
|
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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Lun 09 May, 2011 5:01 pm Asunto: |
|
|
| Gracias por contestarme a los dos.... |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|