FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
BitBtl vs Draw
¿Por que los 2 códigos del TTimmer trabajan de diferente forma?
Opción 1 :
Opción 2 : En un principio cuando no había que transparentar el BitMap cualquier opción valía (BitBtl o Draw) pero cuando intenté transparentar en TForm1.FormCreate, BitBtl no hace nada, y Draw INTENTA transparentar, pero ocurre un efecto especial (adjunto el Archivo) al evento OnMouseMove: al principio transparenta su parte izquierda y luego se completa como era el BitMap originalmente (solo la izquierda) y la derecha está transparentado. 1.- ¿A que se debe todo este efecto con Draw? 2.- ¿Como hacer funcionar el transparente con BitBtl? Última edición por Deiv fecha: 26-08-2007 a las 00:58:33. |
#2
|
||||
|
||||
Creo que en parte puede ser problema de que el fondo de la imagen no es uniforme.
Prueba con esta imagen y esta línea:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
Ok, en este momento no tengo Delphi lo revisaré en casa, pero que hay con:
Cita:
en la opción 2? |
#4
|
||||
|
||||
Respuesta 1
El efecto se produce porque al dibujar una imagen lo haces sobre la anterior, y las partes transparentes dejan ver los restos de la anterior, de esta manera al ir moviendo la imagen los restos de las imágenes anteriores terminan llenando toda la parte izquierda de la imagen. Respuesta 2 La función Bitblt es una api que copia un bloque de pixeles de un Device Context a otro, le trae sin cuidado las propiedades del objeto TBitmap. Por eso no hace caso de la propiedad Transparent. Posible solución: La solución pasa por usar el método Draw y borrar los restos de la imagen anterior antes de dibujar la actual, además de usar un buffer para evitar el parpadeo. Nos quedaría algo así en el evento del timer:
|
#5
|
|||
|
|||
He aplicado la nueva imagen de Neftali, su código, y el BitBtl ahora si trabaja bien con el transparente.
Y tal como mencioné un post anterior: Con el Draw (y esta nueva imagen inclusive) no pasa nada, ahora me pareciera que recorriera un "Cometa" al dibujar, inclusive he intentado con DoubleBuffered:=true; y nada Estoy en un Cafe Internet en este momento y voy leyendo el Post de Seoane (no tengo Delphi a mano), me parece algo sólido lo que explica, lo probaré mas un rato, de todas maneras quería que compartieran "mi cometa"... es decir mi aplicación en la cual se ve ese efecto, es interesante, lo pueden observar. |
#6
|
|||
|
|||
Adjunto en este post para los que no tienen Delphi a mano un archivo BMP capturado de mi aplicación cuando se mueve "mi cometa"
Cita:
Como dije anteriormente trabaja el BitBtl y transparenta. ¿Como explicar eso??? Última edición por Deiv fecha: 26-08-2007 a las 00:55:58. |
#7
|
||||
|
||||
Cita:
|
#8
|
||||
|
||||
Como bien te han dicho el código que te pasé no transparenta, simplemente que usando el color adecuado, evita los problemas.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#9
|
|||
|
|||
Gracias muchachos, aunque no crean de tiempo sali de duda (casi un año) cuando en un hilo pregunté de otra forma: Evitar parpadeo de imagen Aquí ahora está mas claro, gracias a los Genios como Uds. los novatos salimos de dudas.
|
#10
|
|||
|
|||
Hola amigos!
Con motivos de dar estética a mi Aplicación en cuanto a seleccionar una opción, necesito mostrar unas 15 imágenes en un Área de mi Form (superior) en constante movimiento de derecha a izquierda y viceversa, las imágenes tendrán un único tamaño de 100 x 150 pixels, dicha Área tendrá la dimensión de 600 x 200 pixels (donde quepan 5 imágenes separadas). Definiendo que el área será dividida por el medio (300 pixels) de un "Contenedor" deseo al evento OnMouseMove que si el puntero del Mouse se encuentra en la izquierda de este "contenedor" las imágenes deben moverse en sentido contrario (a la derecha), que si el puntero del Mouse se encuentra en la derecha las imágenes deben moverse a la izquierda, y finalmente que si el puntero del Mouse sale del área contenedora las imágenes deben dejar de moverse. Mis preguntas: - ¿Cuál "contenedor" (Área) para las imágenes sugieren?: TForm, TPanel, TPaintBox? otro? - ¿Cómo mostrar las imágenes en ese "contenedor"?: Por código con TImageList, en varias TImage? otro? En este hilo me enseñaron a mover UNA imagen, lo que no me doy cuenta es como cargar ahora VARIAS imágenes y lograr ese mismo efecto. Gracias anticipadas. |
#11
|
|||
|
|||
Hola amigos,
¿No me encuentran alguna sugerencia? no me doy cuenta cómo cargar varias imágenes, con una era fácil como dije, pero con varias?? Deiv |
|
|
|