FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Repintado de un objeto grafico
Hola amigos
Estoy trabajando con un PaintBox sobre el cual dibujo un texto en forma vertical creado con LOGFON y CreateFontIndirect, utilizando el canvas del objeto (en el hilo "orientacion del texto", esta explicado). Mi problema radica en que cada vez que el objeto se repinta se borra el texto creado sobre el, intente colocar la funcion que crea el texto en el evento onpaint del objeto, para que asi cada vez que se repintara el objeto se volviera a crear el texto, el cual efectivamente se vuelve a crear, pero perdiendo el efecto de vertivalidad perseguido. Esto mismo lo he realizado en VB, en el cual existe la propiedad AutoRedraw en los objetos graficos, propiedad que cualdo se coloca en true activa el redibujado automático de estos objetos, repintando imagenes y texto en la pantalla, en relacion a la imagen almacenada en memoria. El objeto no recibe eventos Paint; se vuelve a dibujar cuando es necesario, usando la imagen almacenada en memoria. Esto quiere decir que cuando se pinta algun texto o imagen en el objeto, este se vuelve a repintar con la imagen o el texto creado por nosotros y no con la apariencia original del objeto utilizado. Mi pregunta es ¿existe alguna propiedad en el canvas de los objetos graficos, como el PaintBox, que permita hacer lo mismo que el AutoRedraw en VB?. De antemano gracias por cualquier ayuda. |
#2
|
||||
|
||||
¿En qué momento usas CreateFontIndirect? Yo supongo que debes usarlo en el evento OnPaint, es decir, cada vez que se requiere dibujar el texto.
// Saludos |
#3
|
||||
|
||||
Acabo de copiar el código que vic_ia te puso en el hilo http://www.clubdelphi.com/foros/showthread.php?t=11878 y lo pegué tal cuál en el evento OnPaint de un PaintBox y funcionó perfecto.
// Saludos |
#4
|
||||
|
||||
hola...
tal vez el problema radica que dibujas o asignas las propiedades del FONT antes de dibujar el resto de tu imagen o grafico, he probado colocar en el evento OnPaint del PaintBox el codigo de esta forma y funciona..
saludos... Última edición por vic_ia fecha: 30-06-2004 a las 23:18:47. |
#5
|
|||
|
|||
Desde el eveto onpaint llamo a la funcion que crea el texto vertical de esta forma:
Respecto al crear un rectangulo donde dibujar el texto no me sirve, ya que el efecto que pretendo dar con el texto vertical es crear primero un gradian sobre el objeto (PaintBox) y despues crear el texto en forma vertical, estilo barra de inicio de win. Por esto que la creacion de un rectangulo haria que el efecto que pretendo lograr no se viera bien. Y les vuelvo a repetir cuando se genera el efecto onpaint en efecto del texto desaparece mostrandome el texto en forma horizontal y no vertical. quizas puedo estar realizando algo mal...ademas para completar tambien les muestro el codigo utilizado para gererar el gradian:
|
#6
|
||||
|
||||
hola...
respecto a lo que muestras de tu codigo ... Cita:
quiero entender que el procedimiento GradianPain es el asignado al evento OnPaint de tu PaintBox, si es asi, esto hace que cada vez que pides que se dibuje (por algun evento, este cambia sus dimensiones varias veces, lo que posiblemente haga que otros objetos vuelvan a llamar a ese evento, y esto puede hacer que al solicitar la creación del font no tenga los recursos necesarios; por otro lado dentro del procedimiento llamas a Refresh lo que hara que se vuelva a solicitar el repintado, lo cual no necesariamente se hara de manera inmediata, tal vez esto ultimo sea lo que hace que se pierda la transformación... yo cambiaria el enfoque, pienso que cada vez que cambias las dimensiones del control este llama a su evento OnPain, por lo que dentro de este solo debiera estar lo concerniente al dibujado interior del el, nada mas, creo que el cambio de las dimensiones lo debieras llevar a cabo desde.. no se por ejemplo desde donde lo llamas para que aparezca... en cuanto tenga tiempo tratare de checarlo con detenimiento... saludos... |
#7
|
|||
|
|||
vic_ia, ya encontre el problema....como en mi aplicacion creo algunos formularios de la forma:
antes de crear en formulario principal, ya que bien sabras que en primer formulario que se crea, sera el que tambien cerrara la aplicacion al monento de cerrarse este tambien. Como necesito cargar algunos formularios antes de crear el form principal, los creo pero no los cargo en memoria hasta mostrarlos, debido a esto algunos eventos como onpaint del objeto PaintBox actuaban en forma irregular, causando que el efecto del texto vertical se perdiera.... Mi problema es ahora que cuando se crea el texto a su alrrededor tambien se crea un rectangulo de color oscuro, el cual daña la apariencia del gradian sobre el que esta creado el texto, ¿este rectangulo es parte de la creacion del texto sobre el objeto? , ¿ es posible crear el texto sin ese molesto rectangulo a su alrrededor?... De antemano gracias por cualquier ayuda.... |
#8
|
|||
|
|||
Ya solucione el problema del rectangulo que se generaba al crear el texto sobre el gradian, utilizando la propiedad Brush.Style del canvas del objeto en donde se genera el texto, a continuación muestro el codigo por si a alguien le pudiera servir:
Gracias a todos por su ayuda..... Última edición por senpiterno fecha: 01-07-2004 a las 19:29:15. |
|
|
|