FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour FASTLib. Open Source
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: FASTLib. Open Source
Posted: Tue Jun 28, 2011 08:23 PM
Qué bueno!!! cuánto aprendí con ella!!!

Yo he añadido un poco más a la clase Menu...

Code (fw): Select all Collapse
#include "dialog.ch"
#include "inkey.ch"

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

CLASS Menu FROM Visual

   DATA   aItems
   DATA   nOption

   METHOD New() CONSTRUCTOR        // MnuNew
   METHOD Display    // MnuDisplay
   METHOD Hide       // MnuHide
   METHOD Click      // MnuClick
   METHOD KeyPressed // MnuKey
   METHOD SetOption  // MnuSetOption
   METHOD GoTop      // MnuGoTop
   METHOD GoBottom   // MnuGoBottom
   METHOD GoUp       // MnuGoUp
   METHOD GoDown     // MnuGoDown
   METHOD GoLeft     // MnuGoLeft
   METHOD GoRight    // MnuGoRight
   METHOD SetColor   // MnuSetColor
   METHOD nExec      // nMnuExec
   METHOD AddItem    // MnuAddItem
   METHOD SetFocus   // MnuSetFocus
   METHOD lIsOver    // lMnuIsOver
   METHOD cGetHotKey // cMnuGetHotKey
   METHOD nHotAt     // nMnuHotAt

ENDCLASS

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

METHOD New() CLASS Menu

   ::Parent:New()

   ::aItems     = {}
   ::nOption    = 0
   ::cClrNormal = "N/BG"
   ::cClrFocus  = "W+/N"

return Self

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

METHOD Display() CLASS Menu

   AEval( ::aItems, { | oItem | oItem:Show() } )

return nil

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

METHOD Hide() CLASS Menu

   if ::nOption != 0
      ::aItems[ ::nOption ]:SetFocus( .f., ::cClrFocus )
   endif
   AEval( ::aItems, { | oItem | oItem:Hide() } )
   ::Parent:Hide()
   ::nOption = 0

return nil

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

METHOD Click( nRow, nCol ) CLASS Menu

   local nAt

   do while lMPressed()
      nAt := AScan( ::aItems, { | oItem | oItem:lIsOver( nRow, nCol ) } )
      if nAt != 0 .and. nAt != ::nOption
         ::SetOption( nAt )
      endif
      MUpdate()
      nRow = nMRow()
      nCol = nMCol()
   enddo

return nil

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

METHOD Key( nKey ) CLASS Menu

   local nHotAt

   do case
      case nKey == K_ESC
           ::aItems[ ::nOption ]:SetFocus( .f., ::cClrFocus )
           ::nOption  = 0
           ::lEndExec = .t.

      case nKey == K_ENTER
           ::lEndExec = .t.

      case nKey == K_LEFT
           ::GoLeft()

      case nKey == K_RIGHT
           ::GoRight()

      case nKey == K_UP
           ::GoUp()

      case nKey == K_DOWN
           ::GoDown()

      case nKey == K_HOME
           ::GoTop()

      case nKey == K_END
           ::GoBottom()

      case ( nHotAt := ::nHotAt( Chr( nKey ) ) ) != ::nOption
           if nHotAt != 0
              ::SetOption( nHotAt )
           endif
   endcase

return nil

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

METHOD SetOption( nNewOption ) CLASS Menu

   if ::nOption != nNewOption
      if ::nOption != 0
         ::aItems[ ::nOption ]:SetFocus( .f. )
      endif
      ::nOption = nNewOption
      if ::nOption != 0
         ::aItems[ ::nOption ]:SetFocus( .t., ::cClrFocus )
         if ::oParent != nil
            ::oParent:MnuSelect( Self )
         endif
      endif
   endif

return nil

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

METHOD GoTop() CLASS Menu

   ::SetOption( 1 )

return nil

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

METHOD GoBottom() CLASS Menu

   ::SetOption( Len( ::aItems ) )

return nil

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

METHOD GoUp() CLASS Menu

   if ::nOption == 1
      ::SetOption( Len( ::aItems ) )
   else
      ::SetOption( ::nOption - 1 )
   endif

return nil

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

METHOD GoDown() CLASS Menu

   if ::nOption == Len( ::aItems )
      ::SetOption( 1 )
   else
      ::SetOption( ::nOption + 1 )
   endif

return nil

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

METHOD GoLeft() CLASS Menu

   if ::nOption == 1
      ::SetOption( Len( ::aItems ) )
   else
      ::SetOption( ::nOption - 1 )
   endif

return nil

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

METHOD GoRight() CLASS Menu

   if ::nOption == Len( ::aItems )
      ::SetOption( 1 )
   else
      ::SetOption( ::nOption + 1 )
   endif

return nil

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

METHOD SetColor( cClrNormal, cClrFocus ) CLASS Menu

   ::cClrNormal = cClrNormal
   ::cClrFocus  = cClrFocus

   AEval( ::aItems,;
   { | oItem | ;
     oItem:cClrNormal := ::cClrNormal, oItem:cClrFocus := ::cClrFocus } )

return nil

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

METHOD nExec() CLASS Menu

   ::Exec()

return ::nOption

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

METHOD AddItem( oItem ) CLASS Menu

   AAdd( ::aItems, oItem )
   oItem:oParent = Self
   if ::oParent != nil
      ::oParent:MnuChanged( Self )
   endif

return nil

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

METHOD SetFocus( lOnOff, cClrFocus ) CLASS Menu

   ::Parent:SetFocus( lOnOff, cClrFocus )
   if lOnOff
      if ::nOption == 0
         ::SetOption( 1 )
      else
         ::aItems[ ::nOption ]:SetFocus( .t., ::cClrFocus )
      endif
   else
      ::aItems[ ::nOption ]:SetFocus( .f. )
   endif

return nil

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

METHOD lIsOver( nRow, nCol ) CLASS Menu

return AScan( ::aItems, { | oItem | oItem:lIsOver( nRow, nCol ) } ) != 0

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

METHOD cGetHotKey() CLASS Menu

return ""

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

METHOD nHotAt( cHotKey ) CLASS Menu

   cHotKey = Upper( cHotKey )

return If( Len( ::aItems ) != 0,;
       AScan( ::aItems, { | oItem | Upper( oItem:cGetHotKey() ) == cHotKey } ),;
       0 )

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


Se te pasó cambiar el método nExecy yo he añadido " CLASS Menu" a todos los métodos, y además a New() le he dicho que es el constructor... porque la idea, entiendo, es que funciones con el motor OOP de Harbour no? :-)

Saludos
______________________________________________________________________________

Sevilla - Andalucía
Posts: 422
Joined: Mon Aug 17, 2009 12:18 PM
Re: FASTLib. Open Source
Posted: Wed Jun 29, 2011 11:53 AM

Maestro Antonio,

Muchas gracias por tu generosidad.

Cuando tengas tiempo, ¿por favor podrías pasar a Harbour las funciones de protección de Fivedos?. Creo que sería muy interesante para desarrollar sistemas de protección anti-pirateo.

Por cierto, ¿has pensado en publicar el código de Fivewin 1.0?. Sería muy interesante a efectos didácticos.

Saludos ;)

Saludos,



Eduardo
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Thu Jun 30, 2011 08:07 AM
Todos los módulos de dialog ya compilan en 32 bits :-)

http://code.google.com/p/dialog/downloads/detail?name=dialog32_2.zip&can=2&q=
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Thu Jun 30, 2011 08:10 AM

Mg,

De momento no tenemos intención de publicar lo que comentas,

Llegará el dia en que se publique todo, pero aun no es ese dia :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 422
Joined: Mon Aug 17, 2009 12:18 PM
Re: FASTLib. Open Source
Posted: Thu Jun 30, 2011 09:48 AM

Muchas gracias, y también por permitir la vigencia de Clipper en el siglo XXI con harbour y fwh.

Respecto del sistema de protección de Fivedos, por favor cuando tengas un ratito sería muy intersante. Podrías ponerlo como ejemplo en el FW 07.

;)

Saludos,



Eduardo
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: FASTLib. Open Source
Posted: Thu Jun 30, 2011 03:26 PM

Antonio, para generar la libreria, esta linea corrige el problema el test.mak
$(BCDIR)\bin\tlib ..\lib\dialog32.lib -+ .\obj\$&.obj

Estaba sin .\obj\

Muchas gracias por el aporte

Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Thu Jun 30, 2011 03:40 PM

Rafa,

Si, gracias. De hecho acabo de subir unos cambios y tutor1 y tutor2 ya arrancan y medio funcionan :-)

Despues de 19 años... jejeje

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Thu Jun 30, 2011 06:35 PM
Ejemplos construidos usando Harbour :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Thu Jun 30, 2011 06:39 PM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Thu Jun 30, 2011 06:48 PM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Thu Jun 30, 2011 07:21 PM
Ejemplos construidos con Harbour :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Fri Jul 01, 2011 05:18 AM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Fri Jul 01, 2011 05:24 AM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: FASTLib. Open Source
Posted: Fri Jul 01, 2011 05:51 AM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 422
Joined: Mon Aug 17, 2009 12:18 PM
Re: FASTLib. Open Source
Posted: Sat Jul 02, 2011 06:45 PM

Antonio,

¿Y por qué en vez de Dialog no pasas a 32 bits Fivedos?. Seguro así que la librería seguirá cumpliendo añitos en el futuro ;).

¿Y no podrías subir Fivewin 1.0?. No encuentro el disco de soft mail y me gustaría recordar la primera versión.

Saludos

Saludos,



Eduardo