Page 1 of 2

Problemas de pintado

Posted: Sun Jul 29, 2007 8:45 pm
by Carlos Mora
Antonio,

he estado haciendo unas pruebas con la clase outlook, usando el ejemplo de samples (testoutl.prg) y cuando esta ejecutándose, le superpongo alguna ventana y hago varios movimientos arrastrando la ventana, y empieza a pintarse mal la barra, y a veces tambien el interior de toutlook.
Image

http://img295.imageshack.us/img295/1549 ... adofg3.jpg

Que puede ser ese problema? Estoy aprendiendo algo respecto de crear controles y este problema no se a que se le puede atribuir.

Image
Shot at 2007-07-29
Primero me paso al cambiar el tipo de botones de toutlook y pensé que seria algo que hacia mal, pero volví al ejemplo sin modificar y tiene el mismo problema. Algun consejo?

Un saludo,

Carlos,

Posted: Sun Jul 29, 2007 10:40 pm
by Antonio Linares
Carlos,

Prueba a cambiar estos dos métodos en la clase TWindow de esta manera:

METHOD DispBegin() VIRTUAL
METHOD DispEnd() VIRTUAL

Posted: Tue Jul 31, 2007 10:46 am
by Carlos Mora
Lo hice, de hecho es una de las primeras cosas que probé, lo acabo de repetir para ver si se corrige, pero no, sigo teniendo problemas.
Ojo que es un problema solo con Fivewin, ya que no he tenido el mismo inconveniente co notros programas, como para descartar cuastiones de drivers o gráfica.
Ya puestos en el tema, aprovecho para preguntar: ¿Que se supone que debe hacer una window/control al recibir el método ERASEBKGND, o mejor dicho, que parte del pintado pongo en uno u otro lugar? Es que estoy haciendo unos botones con el fondo degradado (el background, se supone), un texto y eventualmente un icono ( los datos del boton propiamente dicho ). Hay algún criterio para separar el pintado entre los dos mensajes?
Un saludo,

Carlos.

Posted: Fri Aug 24, 2007 7:40 pm
by Carlos Mora
Perdona Antonio que insista, pero no se ha resuelto con quitar el buffer de pintado. Es de destacar que ocurre cuando las ventanas superpuestas son de otra aplicación. Siendo de la misma no hay problemas. Alguna pista?

Posted: Fri Aug 24, 2007 7:53 pm
by Antonio Linares
Carlos,

Que versión de FWH estás usando ?

>
¿Que se supone que debe hacer una window/control al recibir el método ERASEBKGND, o mejor dicho, que parte del pintado pongo en uno u otro lugar? Es que estoy haciendo unos botones con el fondo degradado (el background, se supone), un texto y eventualmente un icono ( los datos del boton propiamente dicho ). Hay algún criterio para separar el pintado entre los dos mensajes?
>

Lo ideal es no hacer nada en EraseBkGnd() (solo devolver 0) y hacer todo el proceso de pintado desde el método Paint(). Asi se evitan los "parpadeos"

Posted: Sat Aug 25, 2007 8:09 am
by Carlos Mora
Antonio,

Uso FWH 707.

Respecto del WM_ERASEBKGND, efectivamente es como tu dices. Le estaba buscando la vuelta por ahí, a ver si podía llegar a ser eso, pero no, he cambiado a INLINE 0, INLINE 1 y INLINE NIL, pero no hay caso, sigue fallando el pintado cuando la ventana no es la ventana activa.

¿Se te ocurre algo por donde buscarle? El error es evidente en el msgitem de msgbar, por hablar de un control sencillo. El sample de toutlook te puede servir como banco de pruebas.

Perdona que insista, pero tengo casi terminado unos controles como los de office pero tienen ese problema y preferiría resolver esa cuestión antes de usarlos.

Image

La imagen es una versión del demo de FSDI de José Luis Sanchez usando un Outlook2. Tengo con ella el problema de pintado, por eso la insistencia.

Un saludo,

Carlos.

Posted: Sat Aug 25, 2007 8:15 am
by Antonio Linares
Carlos,

Puedes enviarme algún ejemplo, con fuentes, para que lo probemos aqui ? gracias

Posted: Sat Aug 25, 2007 9:42 am
by Carlos Mora
Usa el ejemplo de toutlook de Fivewin del directorio samples, creo que eso demuestra el comportamiento del que hablamos en el msgbar.

Image

Posted: Sat Aug 25, 2007 10:06 am
by Antonio Linares
Carlos,

Estamos probando samples\TestOutL.prg y pasando la calculadora de Windows por encima y se ve bien:
Image

Posted: Sat Aug 25, 2007 10:27 am
by Carlos Mora
pásala por la barra de mensajes, no por el outlook. Acabo de probarlo y puedo reproducir el error. Alguna direccion donde enviarte el exe?

Acabo de notar una diferencia: no tienes activado los temas de XP? En mi ejemplo los botones se dibujan con los temas.

Posted: Sat Aug 25, 2007 11:13 am
by Frafive
Hola Carlos

Muy bonita la barra izquierda , podrias poner el codigo de comoo la has creado ?


un saludo

Posted: Sun Aug 26, 2007 8:33 am
by Carlos Mora
Frafive,

¿Como te llamas?

Lo que ves es un OutLook2003. Se usa igual que outlook de Fivewin, con algunos pequeños detalles,

Code: Select all

 #include "outlook.ch"
// DEFINE FONT oFont NAME "Arial" SIZE 0, -12
oFont = TFont():New( GetDefaultFontName(), 0, GetDefaultFontHeight(),, )

 @ 0, 0 OUTLOOK2 oOut ;
    SIZE oApp():oSplit:nLeft, oPDlg:nHeight()-oApp():oWndMain:oMsgBar:nHeight ;
    PIXEL ;
    FONT oFont ;
    OF oPDlg 

 DEFINE GROUP OF OUTLOOK oOut PROMPT "Clientes" ;
      RESOURCE "EBLOCK2"

    DEFINE LABEL OF OUTLOOK oOut ;
      PROMPT "Primera etiqueta"

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "ECUENTAS" ;
      PROMPT "Outgoing messages" ;
      ACTION msginfo("Your code ..." )

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "ESALIR" ;
      PROMPT "Exit from the application" ;
      ACTION oApp():oDlg:End()

    DEFINE LABEL OF OUTLOOK oOut ;
      PROMPT "Segunda etiqueta"

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "CONFIG7" ;
      PROMPT "Third control" ;
		ACTION ClrMain()

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "EUNIDAD" ;
      PROMPT "Fourth control"

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "EUSUARIO" ;
      PROMPT "This is the the fifth control"

  DEFINE GROUP OF OUTLOOK oOut PROMPT "Empresa" ;
      RESOURCE "BTN10A"

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "CONFIG3" ;
      PROMPT "First button on second group bar"

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "CONFIG7" ; 
      PROMPT "Second button on second group bar"

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "B16USER" ;
      PROMPT "Third button"

  DEFINE GROUP OF OUTLOOK oOut PROMPT "Agentes" ;
      RESOURCE "BTN13A"

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "EBLOCK3" ;
      PROMPT "First button"

    DEFINE BITMAP OF OUTLOOK oOut ;
      RESOURCE "EBLOCK3" ;
      PROMPT "Second button"

El código de los controles todavía no está completo, falta el splitter que determina cuantos botones del pie están activos y visibles, y el boton/menú de los que están inactivos/invisibles. Además, como ves, estoy revisando el código porque tengo problemas de pintado similares a los de MsgItem/MsgBar.

Si quieres algo similar te recomiendo los de canal five.

Un saludo,

Carlos.

Posted: Sun Aug 26, 2007 10:24 am
by Antonio Linares
Carlos,

En nuestras pruebas aqui, esta funcionando bien, con y sin temas. Necesitamos que nos envies un ejemplo que podamos construir y que reproduzca el error para poder ayudarte, gracias

Posted: Mon Aug 27, 2007 11:52 am
by Carlos Mora
Antonio,

Hoy ya volví al trabajo, se me terminaron las vacaciones :(, pero me da la oportunidad de probar el asunto en varios ordenadores.
He usado el testmsg3.prg del samples para generar esta imagen. Eso ya es de otro ordenador, y el sample es bastante simple.

El comportamiento es bastante particular. Uso para superponer la misma ventana de DOS desde la que he regenerado el EXE.
Al principio funciona bien, pero luego de activar alternativamente una y otra comienza el fallo, que te he marcado con un círculo rojo.
El fallo no es permanente, hay que insistirle. ¿Sabes de algún software que filme la actividad de la pantalla? Sería la mejor manera de mostrarte el problema.
Image
Un saludo,

Carlos.

Posted: Mon Aug 27, 2007 11:57 am
by Carlos Mora
el punto es encontrar el porqué, ya que me ocurre lo mismo cuando dibujo controles. Contra más elaborado el control el defecto se nota más, y solo aparece en el repintado de ventanas no activas. Algo cambiará en los mensajes o en la prioridad del proceso repintado que no permite que los controles ownerdraw se terminen de repintar o algo así.

Un saludo,

Carlos.