Riporto qui di seguito il testo di un esempio da me creato per illustrare una semplice classe.
Per i pił esperti: si consiglia l'esame anche dei file .ppo!
Calcolo del rendimento di un BOT
Modulo Classi.prg
*+********************************************************************
*+
*+ Source Module => C:\PRG\CLASSI.PRG
*+
*+ Functions: Class BOT
*+
*+ Reformatted by Click! 2.03 on Jan-13-2000 at 6:00 pm
*+
*+********************************************************************
Textblock C:\PRG\CLASSI.PRG
// 12/01/2000 15:24
//(c) Scire' Salvatore
#include "oobject.ch"
*+********************************************************************
*+
*+ Class BOT
*+
*+********************************************************************
*+
CLASS BOT
EXPORT:
VAR nCapitale AS 0
VAR nGiorni AS 0
VAR nTasso AS 0
VAR dDataI AS DATE
VAR dDataF AS DATE
LOCAL:
METHOD New( nCapitale, dDataI, dDataF )
METHOD Tasso_C() INLINE( ( ( 100 / ::nCapitale ) ^ ( 365 / ::nGiorni ) - 1 ) * 100 ) ;
NOSELF
METHOD Tasso_S() INLINE( ( ( ( 100 / ::nCapitale ) - 1 ) * ( 365 / ::nGiorni ) ) * 100 ) ;
NOSELF
ENDCLASS
METHOD New( nCapitale, dDataI, dDataF )
::nCapitale := nCapitale
::nGiorni := ( CTOD( dDataF ) - CTOD( dDataI ) )
IF ::nGiorni = 0 .OR. ::nCapitale = 0
FT_DISPMSG( { { "Il Prezzo o i giorni non possono essere nulli" }, { "W/B", "W/B" } }, "*", 19,, 1 )
FMenuTest()
ENDIF
RETURN Self
*+ EOF: CLASSI.PRG
Segue un modulo di menu che utilizza funzioni tratte dalla libreria freeware NANFOR.LIB
Modulo FMENU.PRG
*+********************************************************************
*+
*+ Source Module => C:\PRG\FMENU.PRG
*+
*+ Functions: Function FMENUTest()
*+ Function FMENUOOPCreate()
*+
*+ Reformatted by Click! 2.03 on Jan-13-2000 at 6:00 pm
*+
*+********************************************************************
Textblock C:\PRG\FMENU.PRG
// 12/01/2000 15:24
//(c) Scire' Salvatore
#include "button.ch"
#include "inkey.ch"
ANNOUNCE CLIPPER520
*+********************************************************************
*+
*+ Function FMENUTest()
*+
*+ Called from ( appl.prg ) 1 - function autore()
*+ 1 - function oop()
*+ 2 - function bot_a()
*+ ( classi.prg ) 1 - class bot
*+
*+********************************************************************
*+
FUNCTION FMENUTest()
LOCAL oInfo
SETCANCEL( .F. )
SET( _SET_EVENTMASK, INKEY_ALL )
MSETCURSOR( .T. )
SETCOLOR( "N/BG,N/W,N,N,N/W" )
CLS
oInfo := FMENUOOPCreate()
DO WHILE MENUMODAL( oInfo, 1, 24, 0, 79, "r/w" ) <> 999
ENDDO
RETURN ( NIL )
*+********************************************************************
*+
*+ Function FMENUOOPCreate()
*+
*+ Called from ( fmenu.prg ) 1 - function fmenutest()
*+
*+********************************************************************
*+
FUNCTION FMENUOOPCreate()
LOCAL oTopBar
LOCAL oPopUp
oTopBar := TOPBAR( 0, 0, 79 )
oTopBar:ColorSpec := "GR+/B,GR+/N,BG+/B,GR+/N,N+/B,N+/B"
oPopUp := POPUP()
oPopUp:ColorSpec := "GR+/B,GR+/N,BG+/B,GR+/N,N+/B,N+/B"
oPopUp:AddItem( MENUITEM( "&Tasso", { || BOT_A() },, "Calcolo del Tasso ad Interesse Semplice/Composto" ) )
oTopBar:AddItem( MENUITEM( "Bot", oPopUp,, "MENU DI FINANZA OOP" ) )
oPopUp := POPUP()
oPopUp:ColorSpec := "GR+/B,GR+/N,BG+/B,GR+/N,N+/B,N+/B"
oPopUp:AddItem( MENUITEM( "&Esci", { || Esci() }, K_ALT_E, "Fine dell'applicazione", 999 ) )
oPopUp:AddItem( MENUITEM( "&Autore", { || Autore() },, "Autore e Versione" ) )
oPopUp:AddItem( MENUITEM( "&Dati OOP", { || Oop() },, "Dati sulla classe OOP" ) )
oTopBar:AddItem( MENUITEM( "&Fine", oPopUp,, "CALCOLI " ) )
RETURN ( oTopBar )
*+ EOF: FMENU.PRG
Modulo Appl.prg
*+********************************************************************
*+
*+ Source Module => C:\PRG\APPL.PRG
*+
*+ Functions: Function Esci()
*+ Function Autore()
*+ Function OOP()
*+ Function BOT_A()
*+
*+ Reformatted by Click! 2.03 on Jan-13-2000 at 6:00 pm
*+
*+********************************************************************
textblock C:\PRG\APPL.PRG
// 12/01/2000 15:24
//(c) Scire' Salvatore
#include "inkey.ch"
*+********************************************************************
*+
*+ Function Esci()
*+
*+ Called from ( fmenu.prg ) 1 - function fmenuoopcreate()
*+
*+********************************************************************
*+
FUNCTION Esci
SETCOLOR( "W/N,N/W,N,N,N/W" )
CLS
QUIT
RETURN NIL
*+********************************************************************
*+
*+ Function Autore()
*+
*+ Called from ( fmenu.prg ) 1 - function fmenuoopcreate()
*+
*+********************************************************************
*+
FUNCTION Autore
STATIC oFin
STATIC nCapitale := 0
STATIC nGiorni := 0
STATIC dDataI := ( " / / " )
STATIC dDataF := ( " / / " )
STATIC nTasso := 0
STATIC GetList := {}
CLS
FT_DISPMSG( { { "(c) SCS Soft 10/1999 - Rel. 1.00" }, { "W/B", "W/B" } }, "*" )
SETCOLOR( "W/N,N/W,N,N,N/W" )
FMENUTest()
RETURN NIL
*+********************************************************************
*+
*+ Function OOP()
*+
*+ Called from ( fmenu.prg ) 1 - function fmenuoopcreate()
*+
*+********************************************************************
*+
FUNCTION OOP
STATIC oFin
STATIC nCapitale := 0
STATIC nGiorni := 0
STATIC dDataI := ( " / / " )
STATIC dDataF := ( " / / " )
STATIC nTasso := 0
STATIC GetList := {}
SETCOLOR( "W/N,N/W,N,N,N/W" )
CLS
oFin := Bot():New( nCapitale, dDataI, dDataF )
oFin: ClassInfo()
FMENUTest()
RETURN NIL
*+********************************************************************
*+
*+ Function BOT_A()
*+
*+ Called from ( fmenu.prg ) 1 - function fmenuoopcreate()
*+
*+********************************************************************
*+
FUNCTION BOT_A
STATIC oFin
STATIC nCapitale := 0
STATIC nGiorni := 0
STATIC nTasso := 0
STATIC dDataI := ( " / / " )
STATIC dDataF := ( " / / " )
STATIC GetList := {}
SET CENTURY ON
SET EPOCH TO 2000
SET DATE BRITISH
CLS
@ 03, 10 SAY "Calcolo del Rendimento dei BOT"
@ 04, 10 SAY "=============================="
@ 06, 10 SAY "Prezzo " GET nCapitale PICTURE "@E 999.999999"
@ 07, 10 SAY "Data acquisto " GET dDataI PICTURE "@D 99/99/9999"
@ 08, 10 SAY "Data Scadenza " GET dDataF PICTURE "@D 99/99/9999"
READ
IF LASTKEY() = K_ESC
FMENUTest()
RETURN NIL
ENDIF
oFin := Bot():New( nCapitale, dDataI, dDataF )
@ 12, 10 SAY "Giorni : " + TRANSFORM( oFin:nGiorni, "@E 999" )
@ 14, 10 SAY "Tasso Interesse Semplice : " + TRANSFORM( ROUND( oFin:Tasso_S, 4 ), "@E 999.9999" ) + " %"
@ 16, 10 SAY "Tasso Interesse Composto : " + TRANSFORM( ROUND( oFin:Tasso_C, 4 ), "@E 999.9999" ) + " %"
FT_DISPMSG( { { "Premi <c> per continuare" }, { "W+/B*", "W/B", "GR+/B" } }, "cC", 19,, 1 )
FMENUTest()
RETURN NIL
*+ EOF: APPL.PRG
Per la compilazione ho utilizzato il seguente file Bot.rmk
// File make per Bot
// 12/01/2000 15:24
//(c) Scire' Salvatore
modules = fmenu, classi, appl
compare = fmenu.obj classi.obj appl.obj
.prg.obj:
Clipper $* /n /w /a /l /p
appl.obj : appl.prg
fmenu.obj : fmenu.prg
classi.obj : classi.prg
bot.exe: $(compare)
blinker fi $(modules) out $@ @linkp
QUI
puoi scaricare tutti i file compressi in un archivio in formato ZIP