El ratón al moverse deja "rastro" en las reglas
- 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
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
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
Re: El ratón al moverse deja "rastro" en las reglas
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
- 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
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á)
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á)
- 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
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...
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...
- 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
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...
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...
- 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
Tenemos que hacer lo mismo en el pintado lateral...
- 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
Os acordais de en donde se creaban los SAYs usados para esas líneas verticales ? Tenemos que eliminar el de arriba...
Re: El ratón al moverse deja "rastro" en las reglas
en : FillWindow( nArea, cAreaIni ) linea 1414 apox.
- 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
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
En realidad pintamos directamente sobre las ventanas MDIChild que estan en aWnd
Poco a poco enteréndonos de en donde está cada cosa
Re: El ratón al moverse deja "rastro" en las reglas
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
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.
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.
Re: El ratón al moverse deja "rastro" en las reglas
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.
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.
Re: El ratón al moverse deja "rastro" en las reglas
Antonio, Manuel, debería ser algo asi, no?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...
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.
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.
- 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
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...
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...
- 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
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!
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!
- 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
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.
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.