Page 1 of 1

xBrowse con cursores - LISTO

Posted: Thu Dec 19, 2013 9:39 pm
by rolando
Buenas tardes,

Desde hace tiempo vengo usando una reforma que hice a la clase xBrowse para mostrar diferentes cursores ya sea si está en los heads, como si está en _. Se puede usar cursores con movimiento y los cursores a utilizar los tengo en mi archivo .RES.

Puede verse un video con lo comentado en:

http://youtu.be/IUlOxRGfjsY

Para lograrlo agregué a la clase un par de datas:

Code: Select all

...
DATA nBottomMargin
   
DATA oMyCursor       // by R. Cerella
DATA oMyCursorHead   // by R. Cerella

// Earlier Group Header related DATA. Now Obsolete
DATA aHeaderTop,; // Array of header string Top
          nHeader
...
Estas datas afectan y hay que reformar a los siguientes methods:

Code: Select all

METHOD VScroll( nWParam, nLParam ) CLASS TXBrowse 

...
            Eval( ::bSkip, ::VGetThumbPos( nPos ) - ::VGetPos() )
            ::KeyNo( ::VGetThumbPos( nPos ) )
//            CursorArrow()
                        if ::oMyCursor<>NIL   //::lCursor              //
                          Cursor(::oMyCursor)    //CursorArrow     //
                         else                                                       //    by R. Cerella
                          CursorArrow()                                       //
                        endif                                                      //
...

Code: Select all

METHOD MouseMove( nRow, nCol, nKeyFlags ) CLASS TXBrowse

...
   // ToolTip CELL
   if nFor > 0 .and. nFor <= nLen
      oCol  := ::ColAtPos( nFor )
//      CursorArrow()
            if ::oMyCursorHead<>NIL      //    by R. Cerella
                    Cursor(::oMyCursorHead)  //                          
                else                                     //
                    CursorArrow()                  //
            endif                                       //

      if Empty( oCol:cToolTip )
         ::DestroyToolTip()
      else
         if ::oColToolTip == nil .or. ::oColToolTip:nCreationOrder != oCol:nCreationOrder
            ::DestroyToolTip()
            ::ShowToolTip( nRow,nCol, oCol:cToolTip )
            ::oColToolTip := oCol
         endif
      endif
      return 0

   elseif ::bDragBegin == nil .and. ( nFor := If( nRow > ::HeaderHeight(), ::MouseColPos( nCol ), 0 ) ) > 0
       if nFor > 0 .and. nFor <= nLen
         oCol  := ::ColAtPos( ::MouseColPos( nCol ) )
//         CursorArrow()
                if ::oMyCursor<>NIL   //::lCursor                //
                    Cursor(::oMyCursor)    //CursorArrow     //
                  else                                                        //    by R. Cerella
                    CursorArrow()                                       //
                endif                                                        //

         if  ::MouseColPos( nCol ) > 0
...

Code: Select all

METHOD Select( nOperation ) CLASS TXBrowse

...
      if uOldRow != uCurRow
         ::aSelected := { Atail( ::aSelected ) }
         if uCurRow > uOldRow
            cursorwait()
            do while ( uTemp := Eval( ::bBookMark ) ) != uBook .and. ! ::Eof()
               If Ascan( ::aSelected, uTemp ) == 0
                  Aadd( ::aSelected, uTemp )
               Endif
               ::Skip( 1 )
            enddo
//            CursorArrow()
                        if ::oMyCursor<>NIL   //::lCursor             //
                          Cursor(::oMyCursor)    //CursorArrow     //
                         else                                                       //    by R. Cerella
                          CursorArrow()                                       //
                        endif                                                      //

         else
            cursorwait()
            do while ( uTemp := Eval( ::bBookMark ) ) != uBook .and. ! ::Bof()
               If Ascan( ::aSelected, uTemp ) == 0
                  Aadd( ::aSelected, uTemp )
               endif
               ::Skip( -1 )
            enddo
//            CursorArrow()
                        if ::oMyCursor<>NIL   //::lCursor            //
                          Cursor(::oMyCursor)    //CursorArrow   //
                         else                                                     //    by R. Cerella
                            CursorArrow()                                   //
                        endif                                                    //

         endif
         Aadd( ::aSelected, uBook )
...

case nOperation == 4 // Select all
      uBook       := Eval( ::bBookMark )
      ::aSelected := Array( ::KeyCount() )
      nAt         := 1
      nLen        := ::nLen
      aTemp       := ::aSelected
      cursorwait()
      Eval( ::bGotop )
      do while nAt <= nLen //.and. !Eval( ::bEof )
         aTemp[ nAt++ ] := Eval( ::bBookMark )
         ::Skip( 1 )
      enddo
      Eval( ::bBookMark, uBook )
//      CursorArrow()
                        if ::oMyCursor<>NIL   //::lCursor            //
                          Cursor(::oMyCursor)    //CursorArrow   //
                         else                                                     //    by R. Cerella
                            CursorArrow()                                   //
                        endif                                                    //

      // ::lRefreshOnlyData := .t.
      ::GetDC()
      ::Paint()
      ::ReleaseDC()

...
Luego, para indicar los cursores a utilizar:

Code: Select all

WITH OBJECT oBrw
  
 ...
:oMyCursor:="LAPIZ"
:oMyCursorHead:="HAND"
                        
END
Espero sea de utilidad para alguien más.

Saludos.

Rolando :D

Re: xBrowse con cursores - Listo

Posted: Thu Dec 19, 2013 10:21 pm
by horacio
Gracias Rolando por el aporte, se ve muy interesante

Saludos

Re: xBrowse con cursores - LISTO

Posted: Tue Feb 02, 2016 1:02 pm
by cuatecatl82
Saludos a todos:

Intente hacer _ pero no me cambia el cursor, a alguien le funciono o si hay alguna otra forma de hacerlo... :oops: :oops: :oops: :oops:


Saludos y gracias..