Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-03-2004
bitERROR bitERROR is offline
No confirmado
 
Registrado: may 2003
Posts: 33
Poder: 0
bitERROR Va por buen camino
Mensaje WM_DRAWITEM

Buenas, intento hacer que todos los controles de un formulario aparezcan de forma diferente, mediante el mensaje WM_DRAWITEM. He leído la ayuda de windows sobre este mensaje pero no logro aclararme.

No estoy muy al tanto de la captura de mensajes, pero tras hacer pruebas (no muy satisfactorias) con el mensaje WM_PAINT, descubrí el WM_DRAWITEM. Con WM_DRAWITEM puedo, por ejemplo, pintar un TBitBtn a mis anchas, algo bastante complicado utilizando WM_PAINT.

El caso es que funciona perfectamente cuando el padre del TBitBtn es el propio formulario, pero si el padre es un TPanel ya no se ejecuta. ¿Qué es lo que pasa, cómo lo hago?

Gracias de antemano y saludox
Responder Con Cita
  #2  
Antiguo 04-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por win32 sdk help
The WM_DRAWITEM message is sent to the owner window of an owner-drawn button
Yo digo que los BitBtn no son owner-drawn, aunque no tengo delphi a mano para probarlo. En general lo serán solo los items de un menú, de una lista desplegable, de un TreeView... es decir, aquellos objecots que son dibujados por su padre, y no por si mismos. En el caso de un Botón, o un Edit, un panel, etc. cada objeto es responsable de representarse en pantalla

Supongo que otra posibilidad es que estes capturando el mensaje desde el formulario, que al ser el parent del boton, puede recibirlo. Al ser el panel el parent, el formulario ya no recibirá el mensaje, sino el panel, por lo que el manejador del mismo debiera estar en el panel, y no en el formulario.

Esto podria funcionar, pero por supuesto no desmiente lo dicho al inicio.

Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 04-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Revisando por encima el código de TBitBtn parece ser que el control padre, al recibir el mensaje WM_DRAWITEM, manda el mensaje CN_DRAWITEM al control adecuado. En el caso de un BitBtn, al recibir CN_DRAWITEM simplemente llama a su método DrawItem que, desafortunadamente, no es virtual.

De cualquier forma quizá lo más adecuado sería heredar de TBitBtn una nueva componente y crearle un manejador de CN_DRAWITEM. De esta manera ya no importará en dónde se inserte el botón.

// Saludos
Responder Con Cita
  #4  
Antiguo 04-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Pero para que tanta vuelta.... Simplemente redefiní el método paint, que será llamado cada vez que tenga que dibujarse el botón, y listo.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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


La franja horaria es GMT +2. Ahora son las 11:12:25.


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