FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
crear un tcheckbox con un skin
SALUDOS
resulta ser que desde hace algun tiempo estoy programando componentes basandome en los estandars para aplicarles una especie de skin, la cual es simple practicamente, consiste en pintar mi propio estilo usando el canvas de los mismos, hace ya unos dias se me presentaron dudas para conformar mi nuevo TButton y las hice publicas aqui en los foros, el problema con el TButton ya fue resuelto, pero ahora se me presenta un problema similar con el TCheckbox, sucede que cuando doy click o presiono barra espaciadora sobre el nuevo componente con "skin" para cambiar su estado de chequeo se pinta como es normalmente y luego se efectuan los cambios sobre el canvas del mismo para "skinearlo" a mi manera, esto provoca un efecto algo desagradable como si fuera un parpadeo, quisiera que alguien me ayude a solucionar esto porque hasta el momento no hallo solucion alguna, posteriormente muestro la implementación de lo que he hecho hasta ahora, ojalá me puedan ayudar:
bueno, a esto le falta un mundo aún, solo quiero solucionar el problema del parpadeo por el momento. mil gracias de antemano colegas saludos!! aeff!! |
#2
|
||||
|
||||
hola, espero que me puedan ayudar en esto colegas, en verdad aún no doy con la solución, al menos me pueden dar una idea, no se, usar otra clase para heredar?????!! qué me pueden decir????!, se los voy a agradecer enormemente hermanos.
mil gracias de antemano, saludos! aeff! |
#3
|
||||
|
||||
Vale, según veo estás de suerte . La clase TCheckBox sólo publica las propiedades, no implementa nada.
Según "las normas de creación de componentes", la clase TCustomCheckBox es la correcta para heredar de ella. Código:
TcustomCheckBox TXCustomCheckBox TXCheckbox El TXCustomCheckBox es el que implementa todas las características y después TXCheckBox sería quien publica las propiedades en el inspector de objetos. De esta forma podrías incluir nuevas propiedades en el inspector de objeto e incluso ocultar algunas que tiene TCheckBox y que tú no quieras. Me parece que el parpadeo viene porque usas
cuando veo que TWincontrol lo implementa así:
No me cuadra que tú uses el mensaje TWMDrawItem y Borland use TWMPaint Por otro lado, creo que aquí tienes algo más: Cuando le das un clic al checkbox tuyo, primero se ejecuta ese código, que hará que se pinte al completo y supongo que después se ejecutará tu método Paint, de ahí el parpadeo. SetState no lo puedes modificar porque es un método estático, pero CreateWnd y CreateParams sí lo puedes sobreescribir. Creo que por ahí van los tiros, aunque habría que mirarlo mejor. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 22-11-2008 a las 13:28:47. |
#4
|
||||
|
||||
bueno, tengo una propuesta para que me la rectifiquen, es una prueba mi objetivo era eliminar el parpadeo, de la forma siguiente ya no ocurre pero necesito saber si esta forma es optimizada o no es conveniente,
espero que me den sus criterios colegas, mil gracias de antemano, saludos! aeff! |
#5
|
||||
|
||||
Wow!! no sólo has tomado la idea sino que además lo has mejorado.
Sólo te falta el "override" en CreateParams, el compilador te avisará de todas formas . En principio no veo nada más, bueno sí, para ser un poco tikis-mikis , ¿no tiene la opción Grayed?? (el estado intermedio entre check y uncheck). Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
||||
|
||||
precisamente creo que ahora me está dando bateo la implementación de esta opción, o mejor dicho, como no la he implementado aún por no saber como las cosas me están saliendo complicadas, lo que sucede es que si coloco mi opción Checked en true en tiempo de diseño y luego intento desmarcarlo en tiempo de ejecución no funciona, mira a ver si me puedes dar una mano colega:
y para que no tengas que gastar tiempo prueba con lo siguiente para que crees uno y me diga como solucionar el problema, se puedes claro está hermano:
*** aún me falta por implementar opciones para cambiar los colores del estilo, pero primero lo primero*** 1000 gracias de antemano, saludos! aeff1 |
#7
|
||||
|
||||
espera! espera!, el problema del que te hablé lo acabo de erradicar, mira me parece que como la TButtonControl tiene un método SetChecked y una property Checked ya, parece que lo que yo estaba jodiendo las cosas, lo que hice ahora fue lo siguiente:
y además eliminar el método SetChecked de la implementación, pero ahora, como puedo hacer algo para la opción Grayed, ??? alguna idea?? 2000 gracias de antemano colegas! saludos! aeff! |
#8
|
||||
|
||||
Haz published la propiedad AllowGrayed (igual que Checked) y en el wm_paint ten en cuenta que puede tener 3 valores.
El truco parece estar al tiempo de "crear" El tcheckbox:
Fstate puede tener los valores TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed); cuando dice Integer(Fstate), está cogiendo el primer valor que es cero, es decir, cbUnchecked. En el procedimiento Toggle, es donde se usa AllowGrayed: Si está Unchecked y permite tener 3 estados, se pone a cbGrayed. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 24-11-2008 a las 14:13:39. Razón: correción código |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Crear un TButton con un skin | aeff | Varios | 9 | 12-11-2008 02:38:02 |
Activar un TComboBox con un TCheckBox | nolo | SQL | 4 | 02-11-2008 02:39:23 |
Selección multiple con TCheckBox | Nelly | Varios | 1 | 09-08-2007 00:28:06 |
Propiedad Checked de TCheckBox | FunBit | OOP | 4 | 05-09-2005 10:53:06 |
TCheckbox no acepta el OnClick | atirado | OOP | 2 | 30-09-2004 00:52:25 |
|