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

User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

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
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

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

Post by mastintin »

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

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

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

Post by Antonio Linares »

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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

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

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

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

Post by Antonio Linares »

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
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

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

Post by mastintin »

en : FillWindow( nArea, cAreaIni ) linea 1414 apox.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

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
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Post by cnavarro »

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
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Post by cnavarro »

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

Code: Select all

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

Code: Select all

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
.../...
 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Post by cnavarro »

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

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
 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

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 _ 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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

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