Esta biblioteca já foi apresentada aqui mesmo. Pro mim.
Mas como sempre estão aparecendo novos usuários desta velha ferramenta que é o Clipper então vale a pena ver de novo!
Esta biblioteca foi lançada em 1994 um ano antes da Fivewin lá fora. E tenho toda certeza que foi a partir dela que surgiram a FiveDOS e FiveWIN.
O código fonte de sua aplicação ficará mais simples com o uso de novos comandos bem mais estruturados.
Lógico que em tempos de maquinas 64 bits apresentar algo assim é como encontrar um site cheio de jogos estilo DOOM. Só dá saudade.
Mas para quem esta iniciando e se ve rodeado de tanta biblioteca boa ela vem bem a calhar em tornar os aplicativos DOS com funcionamento mais parecido com os Windows.
Janelas que podem ser movidas, sombras reais, efeitos 3d, botões clicáveis, checkboxes, menus e uso intenso do mouse.
Ela é compatibilizada para o uso com EXOspace e bLinker.
Sem mais delongas o link esta aqui
Exemplo de código:
// ----------------------------------------------------------------------------
// (c) 1,994 Juan Miguel Sosso Prieto - Todos los derechos reservados
// Autor...: Juan Miguel Sosso
// Proyecto: Sosso's Professional Tools
// M¢dulo..: Demostraci¢n
// Fecha...: Thu 28-04-94
// Hora....: 15:56:21
#include "inkey.ch"
#include "sptools.ch"
// ****************************************************************************
proc Main()
INIT SYSTEM COLOR "W+/N*" ;
CLOCK ;
CALCULATOR KEY K_F2 ;
CALENDAR KEY K_F3 ;
SAVE DOS SCREEN ;
SCREEN BLANK
FillVideo( "PEYRONA SOFT " )
DEFINE DATABASE "stock" ALIAS Stock
FIELD cCODIGO TYPE C LEN 5
FIELD cDESC TYPE C LEN 40
FIELD nPRECIO TYPE N LEN 6
FIELD nIVA TYPE N LEN 2
FIELD nCANTIDAD TYPE N LEN 3
FIELD nMINIMO TYPE N LEN 3
FIELD lAPLI TYPE L
INDEX Stock->cCODIGO TAG Codigo
END DATABASE
OPEN Stock
if cGetPass( "Give me the password:", 10, "Password is SPT" ) == "SPT"
VgaOff()
CLS
@ 11, 13 SAY "Welcome to Sosso's Professional Tools for CA-Clipper" ;
COLOR "BG+/N*"
@ 12, 23 SAY "Free memory for data: " + If( Memory( 0 ) < 9999, ;
Transform( Memory( 0 ), "9,999 Kb" ), ;
Transform( Memory( 0 ) / 1024, "999.9 Mb" ) ) ;
COLOR "GR+/N*"
if lIsWindows()
@ 13, 26 SAY "Running under MS-Windows" ;
COLOR "BG+/N*"
endif
VgaOn()
ACTIVATE MENU oMainMenu()
else
nMsgBox( "Access to system denied" )
endif
CLOSE SYSTEM
return
// ----------------------------------------------------------------------------
static function oMainMenu()
local oMenu
DEFINE MENU oMenu
MENUITEM " &Stock " MESSAGE "Stock"
MENU
MENUITEM " &Stock... Alt-T " ACTION MnuStock() ;
SHORTCUT K_ALT_T ;
MESSAGE "Stock maintenance"
MENUITEM " &Error " ACTION DevOut( Str( "not a number" ) ) ;
MESSAGE "Produce an error, see ERROR.LOG file"
SEPARATOR
MENUITEM " E&xit Alt-X " ACTION oMenu:lEnd := .t. ;
SHORTCUT K_ALT_X ;
MESSAGE "Exit the demostration program"
ENDMENU
MENUITEM " &Miscelaneous " MESSAGE "Miscelaneous functions"
MENU
MENUITEM " &Random filename " ACTION DemoRfn() ;
MESSAGE "Create a unique filename for temporal files"
ENDMENU
MENUITEM " &Utilities " MESSAGE "Miscelaneous utilities"
MENU
MENUITEM " Calculator F&2 " ACTION Calculator() ;
MESSAGE "Calculator"
MENUITEM " Calendar F&3 " ACTION Calendar() ;
MESSAGE "Calendar with appoinments"
SEPARATOR
MENUITEM " &Reindex " ACTION _DbfReindex() ;
MESSAGE "Reindex databases"
MENUITEM " &Configuration " MESSAGE "System configuration"
MENU
MENUITEM " &Main config " ACTION MainConfig( oMenu ) ;
MESSAGE "Select main configuration options"
MENUITEM " Screen &colors " ACTION ClrConfig( oMenu ) ;
MESSAGE "Select screen colors"
MENUITEM " &Printer " ACTION PrnConfig() ;
MESSAGE "Select printer options"
ENDMENU
ENDMENU
MENUITEM " &Credits " MESSAGE "Library credits"
MENU
MENUITEM " &About... F1 " ACTION MnuAbout() ;
SHORTCUT K_F1 ;
MESSAGE "Credits about Sosso's Professional Tools"
ENDMENU
ENDMENU
return oMenu
// ****************************************************************************
static proc MnuStock()
local oBrwStock
local oMnuStock
DEFINE MENU oMnuStock AT MaxRow()
MENUITEM " &Edit " ACTION If( lEditArt( .f. ), oBrwStock:RefreshAll(), nil )
MENUITEM " &Add " ACTION If( lAddArt(), oBrwStock:RefreshAll(), nil )
MENUITEM " &List " ACTION ListArt()
MENUITEM " &Delete " ACTION DelArt( oBrwStock )
MENUITEM " E&xit " ACTION .t. // End Browse
ENDMENU
oMnuStock:lOpened = .f.
BROWSE oBrwStock SIZE MaxRow() - 3, 72 ALIAS Stock
COLUMN "REF." DATA Stock->cCODIGO ;
FOOT "TOTAL:"
COLUMN "DESCRIPTION" DATA Stock->cDESC ;
FOOT Transform( LastRec(), "9,999 recs." )
COLUMN "PRICE" DATA Stock->nPRECIO
COLUMN "IVA" DATA Stock->nIVA
COLUMN "TOTAL" DATA Transform( Stock->nPRECIO + Stock->nPRECIO * ;
Stock->nIVA / 100, "999,999" ) ;
COLOR "GR+/B"
ON DBLCLICK DO If( lEditArt( .f. ), oBrwStock:RefreshAll(), nil )
ENDBROWSE
ACTIVATE BROWSE oBrwStock ;
TITLE "STOCK BROWSE" ;
MENUBAR oMnuStock
return
// ----------------------------------------------------------------------------
static function lEditArt( lNew )
local GetList := {}
local aFields := {}
local oWndArt
local lSaved := .t.
DEFINE WINDOW oWndArt SIZE 10, 57 TITLE If( lNew, "ADD", "EDIT" ) + " ARTICLE"
ACTIVATE WINDOW oWndArt
Stock->( SaveFields( aFields ) )
@ 2, 2 SAY "REFERENCE..:" GET Stock->cCODIGO ;
MESSAGE "Reference of the article"
@ 3, 2 SAY "DESCRIPTION:" GET Stock->cDESC ;
MESSAGE "Full description"
@ 4, 2 SAY "PRICE......:" GET Stock->nPRECIO ;
MESSAGE "Price without taxes"
@ 5, 2 SAY "I.V.A......:" GET Stock->nIVA ;
MESSAGE "I.V.A. (European tax)"
@ 5, 18 SAY "%"
@ 5, 40 CHECK " &Aplicable " GET Stock->lAPLI ;
MESSAGE "Is the tax aplicable?"
@ 7, 15 BUTTON " &OK " ACTION BTN_OK ;
MESSAGE "Save the changes"
@ 7, 30 BUTTON " &Cancel " ACTION BTN_CANCEL ;
MESSAGE "Ignore the changes"
READ
if LastKey() == K_ESC
Stock->( RestFields( aFields ) )
lSaved = .f.
endif
DEACTIVATE WINDOW oWndArt
return lSaved
// ----------------------------------------------------------------------------
static function lAddArt()
local nLast := Stock->( RecNo() )
local lAdded := .t.
Stock->( DbAppend() )
if ! lEditArt( .t. )
Stock->( DbDelete() )
Stock->( DbGoto( nLast ) )
lAdded = .f.
endif
return lAdded
// ----------------------------------------------------------------------------
static proc ListArt()
local nOldRec := Stock->( RecNo() )
local oRptStock
DEFINE REPORT oRptStock
HEADER cCode2Prn( Config->cBIGCODE ) + "Stock report made with SPTools " + SPT_VER + cCode2Prn( Config->cDEACBIG )
HEADER cCode2Prn( Config->cCONDCODE ) + "(c) 1994-5 PEYRONA SOFT, programmed by Juan Miguel Sosso, BBS/FAX: +34-5-286-2626, CIS: 100525,1615" + cCode2Prn( Config->cDEACCOND )
HEADER ""
COLUMN "REF." PRINT Stock->cCODIGO
COLUMN "DESCRIPTION" PRINT Stock->cDESC
COLUMN "PRICE" PRINT Stock->nPRECIO
COLUMN "IVA" PRINT Transform( Stock->nIVA, "99%" )
COLUMN "TOTAL" PRINT Transform( Stock->nPRECIO + Stock->nPRECIO * ;
Stock->nIVA / 100, "999,999" )
COLUMN "Ap." PRINT If( Stock->lAPLI, "Yes", "No " )
FOOT ""
FOOT "- " + cStr( oRptStock:nPage ) + " -" CENTER
END REPORT
Stock->( DbGoTop() )
ACTIVATE REPORT oRptStock WHILE ! Stock->( EoF() ) ;
ACTION Stock->( DbSkip() )
Stock->( DbGoto( nOldRec ) )
return
// ----------------------------------------------------------------------------
static proc DelArt( oBrw )
if nMsgBox( "Are you sure to delete the record?", ;
{ " &Delete ", " &Cancel " } ) == 1
Stock->( DbDelete() ) // Borro el registro
Stock->( DbSkip() ) // Paso al siguiente
oBrw:RefreshAll() // Orden de refrescar el TBrowse
endif
return
// ****************************************************************************
static proc DemoRfn()
local cFileName := cRFN() + ".TMP"
if lInputBox( "Filename:", @ cFileName, "@!" )
MemoWrit( cFilename, "SPTOOLS " + SPT_VER )
nMsgBox( "File created!" )
endif
return
// ****************************************************************************
static proc MnuAbout()
local oWnd
local GetList := {}
nMsgBox( "Sosso's Professional Tools " + SPT_VER + " for CA-Clipper 5.x;" + ;
cCopyRight() + " 1994-5 Juan Miguel Sosso;c/ Chorr¢n 8;" + ;
"29600 Marbella (MA);+34-5-277-3607 (10-14h);;" + ;
"PEYRONA SOFT BBS 2:341/18.97@fidonet.org;" + ;
"+34-5-286-2626 (24h) up to 28,800 bps",, ;
, "About ..." )
return
// ****************************************************************************