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

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

Postby Antonio Linares » Sat Aug 16, 2014 10:49 am

Manuel,

Como el fondo de las reglas es de color celeste, el invertir el color podría servir pues se vería oscuro.

Cristobal, lo tienes ya casi implementado ó me pongo con ello ? gracias :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby mastintin » Sat Aug 16, 2014 11:01 am

Con este código funciona el pintado pero el problema surge cuando cambiamos el raton de area que deja un rastro de donde se dibujo la linea ...

Code: Select all  Expand view

  ...
   drawRulerLines( oApp:aRulerBmp1[nArea], nRulerTop, nRuler, nColPos )

//   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. ) ), ) } )

...

FUNCTION drawRulerLines( oRulerBmp, nRulerTop, nRuler, nColPos )

   LOCAL hDC := oRulerBmp:GetDC()

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

 oRulerBmp:ReleaseDC()

 RETURN nil



 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

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

Postby Antonio Linares » Sat Aug 16, 2014 11:25 am

Manuel,

Voy a probarlo, gracias! :-)

Hay que implementar el evento de abandono de superficie para eliminar ese último pintado:

#define TME_LEAVE 2
#define WM_MOUSELEAVE 675

METHOD MouseMove( nRow, nCol, nKeyFlags ) CLASS ...

TrackMouseEvent( ::hWnd, TME_LEAVE )

...

METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS ...

if nMsg == WM_MOUSELEAVE
return ::MouseLeave( nHiWord( nLParam ), nLoWord( nLParam ), nWParam )
endif

...

METHOD MouseLeave( nRow, nCol, nFlags ) CLASS ...

::lMOver = .F.
::Refresh()

return nil

Lo único que como son ventanas MDICHILD vamos a tener que derivar ó añadir esos métodos dinamicamente (no se si funcionará)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby Antonio Linares » Sat Aug 16, 2014 11:38 am

Manuel,

Tenemos que hacer el pintado vertical en todas las areas, porque por ejemplo el usuario puede querer alinear un item de un area con otro de otra area.

En tal caso, casa regla debería tener sus ultimas coordenadas de dibujo...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby Antonio Linares » Sat Aug 16, 2014 11:50 am

Manuel,

Partiendo de tu código lo he implementado, a falta de implementar el código de sálida de área.

El problema que tenemos ahora es que al pasar por encima de un control (item) no se pinta.

A ver que se nos ocurre...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby Antonio Linares » Sat Aug 16, 2014 11:50 am

Tenemos que hacer lo mismo en el pintado lateral...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby Antonio Linares » Sat Aug 16, 2014 12:05 pm

Os acordais de en donde se creaban los SAYs usados para esas líneas verticales ? Tenemos que eliminar el de arriba...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby mastintin » Sat Aug 16, 2014 12:10 pm

en : FillWindow( nArea, cAreaIni ) linea 1414 apox.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

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

Postby Antonio Linares » Sat Aug 16, 2014 12:36 pm

He modificado el código que acababa de subir, me había liado con los aRulers :-)

En realidad pintamos directamente sobre las ventanas MDIChild que estan en aWnd

Poco a poco enteréndonos de en donde está cada cosa :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby cnavarro » Sun Aug 17, 2014 10:36 am

La solución funciona muy bien
Pero si hay alguna "regla" que no aparece entera en la pantalla, al desplazarte hacia abajo se queda la marca y ya no se quita
Habría, o bien, hacer un refresh de ese bmp cuando aparece totalmente o no dibujar si las "reglas" no son totalmente visibles
Espero haberme explicado
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6498
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Postby cnavarro » Sun Aug 17, 2014 10:46 am

He convertido las variables oRulerBmp1 y oRulerBmp2 en arrays para asignar un control distinto en cada area

Code: Select all  Expand view

function DeclarePublics( cDefFile )
.../...
   PUBLIC oRulerBmp1 := {}
   PUBLIC oRulerBmp2 := {}
   PUBLIC nRuler    := 20
   PUBLIC nRulerTop := 37
.../...
 


Code: Select all  Expand view

function FillWindow( nArea, cAreaIni )
.../...
   if Len( oRulerBmp1 ) < nArea
      AAdd( oRulerBmp1, nil )
   endif
   if Len( oRulerBmp2 ) < nArea
      AAdd( oRulerBmp2, nil )
   endif

   @ nRulerTop-nRuler, 20 BITMAP oRulerBmp1[ nArea ] RESOURCE cRuler1 OF aWnd[nArea] PIXEL NOBORDER
   @ nRulerTop-nRuler,  0 BITMAP oRulerBmp2[ nArea ] RESOURCE cRuler2 OF aWnd[nArea] PIXEL NOBORDER
.../...
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6498
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Postby cnavarro » Sun Aug 17, 2014 11:57 am

Antonio Linares wrote:Manuel,

.../...

El problema que tenemos ahora es que al pasar por encima de un control (item) no se pinta.

A ver que se nos ocurre...


Antonio, Manuel, debería ser algo asi, no?
Pero hay algo que se me escapa (o la idea no es la correcta)
Tampoco he comprobado cómo almacena los items ( cuando uno está incluído en otro, por ejemplo ) por lo que sólo lo estoy probando con la imagen superior derecha del ejemplo

Code: Select all  Expand view

function DrawRulerLines( oWnd, nColPos, nRowPos )
   local aPoint   := { nRowPos, nColPos }
   local aPointI  := aPoint
   local y
   local z        := 0
   local lSw      := .F.
   local hDC   //:= oWnd:GetDC()

   For y = 1 to len( aItems )
       if !empty( aItems[ y, 1 ] )
          //ScreenToClient( aItems[ y, 1 ]:hWnd, aPointI )
          //ClientToScreen( aItems[ y, 1 ]:hWnd, aPointI )
          if IsOverWnd( aItems[ y, 1 ]:hWnd, aPointI[ 1 ], aPointI[ 2 ] )
             //ScreenToClient( aItems[ y, 1 ]:hWnd, aPoint )
             oMsgInfo:SetText( "    SI     " )
             z    := y
             lSw  := .T.
             y    := len( aItems ) + 1
          endif
       endif
   Next y

   hDC := oWnd:GetDC()
   if !lSw
      //hDC := oWnd:GetDC()
      if ! Empty( oWnd:Cargo )
         InvertRect( hDC, oWnd:Cargo )
      endif  
      oWnd:Cargo = { 17, aPoint[ 2 ], 37, aPoint[ 2 ] + 1 }
      InvertRect( hDC, oWnd:Cargo )

   else
      if ! Empty( aItems[ z, 1 ]:Cargo )
         InvertRect( hDC, aItems[ z, 1 ]:Cargo )
      endif  
      ClientToScreen( aItems[ z, 1 ]:hWnd, aPoint )
      aItems[ z, 1 ]:Cargo = { 17, aPoint[ 2 ], 37, aPoint[ 2 ] + 1 }
      InvertRect( hDC, aItems[ z, 1 ]:Cargo )

   endif
   oWnd:ReleaseDC()

return nil
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6498
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Postby Antonio Linares » Mon Aug 18, 2014 6:22 am

Cristobal,

En realidad no necesitamos guardar los bitmaps de los rulers puesto que el pintado se hace encima de la propia ventana.

Acabo de subir unos cambios para el pintado horizontal.

La solución sería que todos los items en su bMMoved llamen a la función SetReticule()

A ver si damos con el sitio correcto para hacer tal asignación

En cuanto la salida del ratón del area de la ventana, a ver que hacemos porque si modificamos la clase TMdiChild estariamos modificando todas las MdiChilds de la aplicación y eso no es correcto. Vamos a tener que crear una clase derivada de TMdiChild...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby Antonio Linares » Mon Aug 18, 2014 7:00 am

Critobal, Manuel,

En eritems.prg function ElementActions() he definido el bMMoved de los items para que llamen a SetReticule() convirtiendo las coordenadas recibidas en el item a coordenadas de su ventana padre (un Area). En principio lo hace bien pero se ve un parpadeo en la ultima posición pintada en el padre.

Lo he subido a bitbucket y a ver si se nos ocurre como quitar ese parpadeo ó por que ocurre.

Se agradece ayuda! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby Antonio Linares » Tue Aug 19, 2014 1:11 am

Solucionado y subido a bitbucket :-)

Solo falta ya controlar cuando el ratón se marcha de un area. Tambien si hacemos scroll previamente hay que apagar las líneas pintadas.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

PreviousNext

Return to EasyReport, EasyDialog y EasyPreview

Who is online

Users browsing this forum: No registered users and 7 guests