Page 1 of 3

El ratón al moverse deja "rastro" en las reglas

PostPosted: Fri Aug 15, 2014 3:29 pm
by Antonio Linares
Lo primero: vamos a localizar desde donde se dibujan las líneas...

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Fri Aug 15, 2014 4:34 pm
by mastintin
aqui no me deja ningún rastro ... ¿?

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Fri Aug 15, 2014 5:06 pm
by cnavarro
Te refieres al rastro en la regla, no?
La linea aparece mas gruesa

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Fri Aug 15, 2014 6:46 pm
by Antonio Linares
Imagino que debe estar relacionado con la velocidad del ordenador y de la tarjeta gráfica.

Estoy probandolo en un laptop antiguo (Mac blanco) y se le amontonan los repintados apareciendo a veces como un código de barras

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Fri Aug 15, 2014 7:28 pm
by cnavarro
Yo uso un I7 y aún y asi se nota el efecto en las reglas

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Fri Aug 15, 2014 8:19 pm
by cnavarro
Antonio Linares wrote:Lo primero: vamos a localizar desde donde se dibujan las líneas...


Es en la function
FUNCTION SetReticule( nRow, nCol, nArea )


de EReport.Prg

Movimiento vertical del raton: no funciona demasiado mal porque solo pinta en el área en el que estamos posicionados
Code: Select all  Expand view

   aRuler[nArea,2]:Move( nRowPos, 0, ;
      IIF( lShow, ER_GetPixel( oGenVar:aAreaSizes[nArea,1] ) + nRuler, nRuler ), 1, .T. )
 


Movimiento Horizontal del ratón: aquí viene el problema porque ha de pintar en todas las reglas de todas las áreas
Code: Select all  Expand view

   AEVAL( aRuler, {|x,y| IIF( x[1] <> NIL, ;
      ( x[1]:Move( nRulerTop-nRuler, nColPos, 1, ;
          IIF( lShow, ER_GetPixel( oGenVar:aAreaSizes[y,2] ) + nRuler, nRuler ), .T. ) ), ) } )
 


Si sustituímos el código anterior, por:
Code: Select all  Expand view

   aRuler[nArea,1]:Move( nRulerTop-nRuler, nColPos, 1, ;
          IIF( lShow, ER_GetPixel( oGenVar:aAreaSizes[nArea,2] ) + nRuler, nRuler ) )
 

mejora significativamente, porque sólo pinta en la regla del área en que nos encontramos, igual que en el movimiento vertical
Para mi me vale de momento, qué opinas?

Además, en el msgbar sólo pinta la fila en relación al área en que estamos situados (posición relativa)
Creo que sería conveniente ver la forma de poner además la posición de la fila absoluta respecto al inicio del listado

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Fri Aug 15, 2014 9:54 pm
by Antonio Linares
Cristobal,

he probado lo que comentas pero necesitamos que se pinte en todas las areas.

Por lo que veo usa un SAY (la línea) y lo va moviendo. Eso no es nada eficiente.

Deberíams usar InvertRect() para dibujar esas líneas y quitar los SAYs. Eso haria que funcionase muy rápido, espero :-)

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Fri Aug 15, 2014 9:59 pm
by cnavarro
Ok, vamos a seguir

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Sat Aug 16, 2014 8:27 am
by cnavarro
Antonio
Sería algo asi?
Code: Select all  Expand view

   if !empty( aOldRect )
      InvertRect( oRulerBmp1:hDC , aOldRect )
   endif
   aNewRect := { nRulerTop - nRuler, nColPos, nRulerTop, nColPos }
   InvertRect( oRulerBmp1:hDC , aNewRect )
   aOldRect := aNewRect

// aOldRect y aNewRect son variables static
 

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Sat Aug 16, 2014 9:54 am
by mastintin
Mirando el Código veo que se usa la misma variable publica para dibujar todas las "reglas" ( oRulerBmp2 ) , ya que estamos con ello creo que se debería cambiar y usar dos arrays aRulerbmp1 y aRulerbmp2 uno con las "reglas" horizontales y otra con las verticales , de paso que estas "reglas" sean DATAs de oApp así podríamos acceder a ellas individualmente sise necesitase ...

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Sat Aug 16, 2014 9:56 am
by cnavarro
Efectivamente, ya lo habia modificado yo en mi prg
Y de lo del InvertRect, cómo lo ves?

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Sat Aug 16, 2014 9:58 am
by mastintin
cnavarro wrote:Efectivamente, ya lo habia modificado yo en mi prg
Y de lo del InvertRect, cómo lo ves?

Por cierto InvertRect( oRulerBmp1:hDC , aOldRect ) entiendo que invierte el color de lo dibujado . ¿ Es así ? , porque entonces no serviría ya que al ser el fondo gris el inverso sería un gris mas claro que ni siquiera se vería ... tendría que dibujar una linea negra ...
He intentado hacer algo con invertRect pero no me sale nada :-(

¿una opción seria usar DrawFocusRect ?

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Sat Aug 16, 2014 10:32 am
by Antonio Linares
Cristobal,

Si, ese parece ser el código, lo único es que el hDC hay que generarlo:

hDC = oRulerBmp1:GetDC()
lo usamos...
oRulerBmp1:ReleaseDC()

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Sat Aug 16, 2014 10:38 am
by mastintin
el archivo point.c se puede eliminar del enlazado solo sustituyendo las llamadas de ER_LPTODP por LPTODP y las de ER_DPTOLP por DPTOLP.

Re: El ratón al moverse deja "rastro" en las reglas

PostPosted: Sat Aug 16, 2014 10:47 am
by Antonio Linares
Manuel,

Borrado y subido al repositorio, gracias! :-)