Page 1 of 1

Manejo del Mouse

Posted: Sat Feb 14, 2009 8:19 pm
by infosys
Estimados amigos

Estoy intentando hacer una navegacion de un grafico estadisticos, pero necesito capturar las posicion del mouse, pero a la vez que desplazo el mouse sobre la ventana debe ir mostrando una especie de cursor en cruz, cuyo punto de interseccion entre ambas rectas de la cruz, coincida con la posición del mouse. Cuando se desplaza el mouse debe ir actualizandose la cruz para que siempre coincida con la posicion del mouse, los extremos de ambas rectas de la cruz deben llegar hasta los costados de la ventana. Espero que puedan entender la idea, pues no soy muy claro en exponerla.
Se que habia un ejemplo en versiones antiguas de Fivewin, pero no logre dar con ellas.

Agradeceria cualquier ejemplo o comentario al respecto

Saludos
Miguel

Re: Manejo del Mouse

Posted: Sat Feb 14, 2009 10:12 pm
by Daniel Garcia-Gil
Saludos Miguel...
Espero este sea lo que buscas....

Code: Select all

#include "FiveWin.ch"
#include "Image.ch"

//----------------------------------------------------------------------------//

function Main()

   LOCAL oDlg, oImage, oSayX, oSayY, oCursor
   local nXPos := 0
   local nYPos := 0

   define cursor oCursor CROSS

   DEFINE DIALOG oDlg FROM 0, 0 TO 20, 60 ;
      TITLE FWDESCRIPTION + " JPG,JIF,GIF,BMP,DIB,RLE,TGA,PCX support!"

   @ 0, 0 IMAGE oImage SIZE 150, 150 OF oDlg SCROLL ADJUST cursor oCursor

   oImage:bMMoved := {| nRow, nCol | oSayX:SetText("X Pos:" + str( nRow ), oSayx:refresh() ),;
    oSayY:SetText("Y Pos:" + str( nCol ), oSayy:refresh() ) } 
   oImage:Progress( .f. )

   @ 1, 28 BUTTON "Select Image" SIZE 50,10 OF oDlg ACTION GetImage( oImage )
   
   @ 2, 28 say oSayX prompt "X Pos:" + str( nXPos ) of oDlg update
   @ 3, 28 say oSayY prompt "Y Pos:" + str( nYPos ) of oDlg update

   @ 6, 28 BUTTON "Exit" SIZE 50, 10 OF oDlg ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTER

return nil

//----------------------------------------------------------------------------//

function GetImage( oImage )

   local gcFile := cGetFile( "Bitmap (*.bmp)| *.bmp|" +         ;
                             "DIB   (*.dib)| *.dib|" +          ;
                             "PCX   (*.pcx)| *.pcx|"  +         ;
                             "JPEG  (*.jpg)| *.jpg|" +          ;
                             "GIF   (*.gif)| *.gif|"  +         ;
                             "TARGA (*.tga)| *.tga|" +          ;
                             "RLE   (*.rle)| *.rle|" +          ;
                             "All Files (*.*)| *.*"             ;
                            ,"Please select a image file", 4 )

   if ! Empty( gcFile ) .and. File( gcFile )
      oImage:LoadBmp( gcFile )
   endif

return nil

Re: Manejo del Mouse

Posted: Mon Feb 16, 2009 1:14 pm
by infosys
Gracias Daniel, me sirve de mucho el ejemplo que muestras, pero respecto del cursor lo que necesito es que sean dos lineas rectas que siempre esten tocando los extremos de la ventana, y que cuando desplace el mouse, sobre esa ventana la intersección de ambas rectas esten siempre en la posicion del puntero del mouse.

Saludos
Miguel

Re: Manejo del Mouse

Posted: Mon Feb 16, 2009 3:17 pm
by Antonio Linares
Miguel,

Prueba esto:

Code: Select all

#include "FiveWin.ch"  

function Main()        
 
   local oDlg, nRow := -1, nCol := -1       
 
   DEFINE DIALOG oDlg TITLE "Test"        
 
   oDlg:bMMoved = { | nMRow, nMCol | nRow := nMRow, nCol := nMCol, oDlg:Refresh() }
 
   ACTIVATE DIALOG oDlg CENTERED ;
      ON PAINT ( MoveTo( hDC, nCol, 0 ), LineTo( hDC, nCol, oDlg:nHeight ),;
                 MoveTo( hDC, 0, nRow ), LineTo( hDC, oDlg:nWidth, nRow ) )
 
return nil 
 
Image

Re: Manejo del Mouse

Posted: Mon Feb 16, 2009 4:08 pm
by infosys
Antonio, muchisimas gracias, es lo que realmente necesitaba.

Saludos
Miguel