Problemas de pintado

Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Problemas de pintado

Post 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,
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Carlos,

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

METHOD DispBegin() VIRTUAL
METHOD DispEnd() VIRTUAL
regards, saludos

Antonio Linares
www.fivetechsoft.com
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post 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.
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post 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?
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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"
regards, saludos

Antonio Linares
www.fivetechsoft.com
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Carlos,

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

Antonio Linares
www.fivetechsoft.com
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post 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
Last edited by Carlos Mora on Sun Aug 26, 2007 8:26 am, edited 1 time in total.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Carlos,

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

Antonio Linares
www.fivetechsoft.com
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post 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.
Frafive
Posts: 189
Joined: Wed Apr 05, 2006 9:48 pm

Post by Frafive »

Hola Carlos

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


un saludo
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post 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.
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post 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.
Post Reply