VFP è figlio di xBase per cui è il miglior strumento per gli sviluppatori di codice xBase e in particolare di Clipper per poter trasferire le proprie applicazioni in un ambiente Windows a 32 bit.
Scartiamo a priori la possibilità di importare o tradurre codice sorgente Clipper nell’ambiente applicativo di VFP. Nonostante una quasi totale compatibilità dei comandi e delle funzioni non dimentichiamo che stiamo migrando verso una piattaforma OOP e quindi bisogna tener conto dell’utilizzo e dell’interazione con gli oggetti e il sistema di gestione degli eventi ad essi associato.
Gran parte del codice originario potrà sicuramente essere riutilizzato ma messo nel posto giusto una volta che avremo capito la filosofia di un simile ambiente di sviluppo.
Il sistema
degli eventi è la chiave di tutto e attorno ad esso si sviluppa l’intera applicazione
di VFP.
Innanzitutto dobbiamo tener conto che dovremo iniziare a lavorare con delle interfacce grafiche e che ogni cosa che vedremo o disegneremo sul nostro schermo dell’ambiente di sviluppo sarà un oggetto.
In Clipper
solitamente si iniziava con il pulire lo schermo (Clear) e con lo scriverci
sopra con dei comandi del tipo @ x,y say “cTesto” e magari attendere
degli input da parte dell’utente con dei comandi del tipo Get Read in
eventuali schermate delimitate da box e linee; in seguito si facevano tutte
le elaborazioni con il resto del codice. Ci basterà tradurre qualcosa del
genere nell’ambiente di sviluppo di VFP per iniziare a capire come strutturare
un’applicazione OOP.
Ad esempio
immaginiamo di dover riscrivere una procedura per la gestione di un semplice
database “Clienti” così strutturato:
|
CODICE
NOME INDIR CITTA NUMTEL |
Numerico Carattere Carattere Carattere Carattere |
4 25 25 20 10 |
Vorrei
ricordare che questo documento è strettamente rivolto ai neofiti e a chi volesse
riscrivere del codice xbase nel modo più indolore possibile in un ambiente
nuovo e sconosciuto, quindi procederemo con delle metodiche molto simili al
vecchio linguaggio in modo da rendere il più possibile incoraggiante il lavoro
di migrazione.
Innanzitutto
per scrivere la nostra applicazione dovremo iniziare un nuovo “Progetto” quindi
dal menù principale di VFP selezioniamo new e poi project, assegnamo
un nome al progetto (ad esempio “prgClienti”) aprendo in questo modo il project
manager.
Con
nostra grande soddisfazione vedremo che possiamo riscrivere un codice di procedura
con le stesse istruzioni di Clipper per aprire e gestire un archivio dbf che
cominceremo a chiamare nel gergo di VFP “tabella”.
Genericamente
si dovrebbero visualizzare i campi della tabella Clienti e permettere tramite
alcune funzioni di andare avanti e indietro nell’archivio. A nostro tempo
avremmo scritto una serie di say e get del tipo @ x,y say cCampo1 get vCampo1
per visualizzare e modificare i campi del record corrente e avremmo programmato
alcuni tasti per permettere l’avanzamento all’interno dell’archivio. Generalmente
si usava assegnare il valore di un campo cCampo1 in una variabile vCampo1
per permetterne l’input e la convalida.
Dalla
sezione Code/Program selezioniamo New. Nella finestra dell’editor possiamo
scrivere le nostre semplici istruzioni per aprire la tabella e inizializzare
le variabili.
USE Clienti in 0
SELECT Clienti
SET INDEX TO Cli-Cod,Cli-Nom
Set Order to 2
set filter to .not. deleted()
go top
v_codice
= clienti.codice
v_nome
= clienti.nome
v_indir
= clienti.indir
v_citta
= clienti.citta
v_numtel = clienti.numtel
Segnaliamo
subito una piccola differenza del comando USE. In Clipper si utilizzava il
parametro New per aprire la tabella in una nuova area di lavoro; Ora
invece si utilizza la clausola “in 0” per dire a Fox di inizializzare una
nuova area e inoltre bisogna selezionarla (SELECT) perché questo non avviene
in automatico tramite USE contrariamente a quanto avveniva con Clipper.
Una
volta aperta la tabella avremo bisogno di disegnare una schermata adatta alla
navigazione dell’archivio e progettare tutte le funzioni che ci permettano
quindi di spostare avanti e indietro i record della tabella, aggiungere e
cancellare un record.
Iniziamo
a chiamare le nostre schermate in un modo diverso; siano esse schermate per
la visualizzazione e l’input di dati, schermate di avviso o semplici messaggi,
ma in ogni caso qualsiasi forma sullo schermo nella quale sia visualizzato
qualcosa, questa forma la chiameremo per l’appunto “Form”.
Un form è l’oggetto per eccellenza di un ambiente di sviluppo OOP come VFP; tramite i form potremo fare qualsiasi cosa, basta immaginare che la finestra principale di Fox è di per sé un form.
Quindi
disegniamo subito un form sul nostro desktop: dalla sezione Documents/Forms
selezioniamo New e poi New Form. A questo punto comparirà a
video la finestra “Form Designer” con dentro un nuovo form vuoto.

Naturalmente
questo Form1 è la nostra finestra nella quale andremo a disporre ,o disegnare,
tutto quello che ci serve per permettere la navigazione della tabella Clienti.
Per disegnare all’interno del form, il form designer ci mette a disposizione
una serie di strumenti o Controlli localizzati nella toolbar Form
Controls; basterà selezionare uno di questi controlli dalla barra dei
controlli e dimensionarla sul nostro form.
I vecchi comandi di Clipper @ x,y say … get non esistono infatti ci sono strumenti analoghi per la visualizzazione e l’input dei dati, questi sono le cosiddette TextBox. Una TextBox è uno dei controlli più semplici di VFP e ci permette di visualizzare un’informazione sul form. Disegniamo una textbox sul nostro Form1 selezionandola dalla barra dei controlli. Automaticamente VFP attribuisce un nome al nuovo controllo sul form per cui chiamerà sicuramente la nostra textbox “text1”. Disegneremo una textbox per ognuno dei campi che vorremo visualizzare nel form; per etichettare le informazioni contenute nelle textbox cioè descriverne il significato, utilizziamo il controllo Label disegnandone uno accanto ad ogni textbox.

In questo
modo si dovrebbe già riuscire a familiarizzare un po’ con il form designer
e rendersi conto di quanto sia semplice e potente disegnare un’interfaccia
utente.
Secondo
la filosofia dell’ OOP ogni controllo o oggetto, possiede delle proprietà
che ne definiscono l’aspetto e ne influenzano anche il comportamento. Per
accedere e modificare le proprietà di uno degli oggetti visualizzati sul form
si usa la finestra delle proprietà accessibile dal menù View/Properties. Nel
nostro caso appare la finestra Properties – FormDoc1 che è il nome che VFP
assegna provvisoriamente al file del nostro form.
Nel
caso delle nostre textbox definiamo per ognuna di esse la propria lunghezza
in modo da poterci visualizzare per intero il contenuto del campo corrispondente
oppure semplicemente ai fini di migliorare l’aspetto del form. Basta quindi
modificare la proprietà width dalla finestra delle proprietà di ciascuna
textbox.
Ritornando al nostro progetto vediamo
come visualizzare il contenuto dei campi all’interno delle text. Nella proprietà
control source di ciascuna textbox andiamo a scrivere il nome della
variabile che deve essere visualizzata. Esempio:

In questo
modo, una volta che il form andrà in esecuzione, le textbox conterranno le
variabili e potranno essere manipolate come se si intervenisse direttamente
sulle variabili associate. Una volta preparato il form per la visualizzazione
del record Clienti, lo salviamo e andiamo a scrivere il nostro codice.
USE Clienti in 0SELECT ClientiSET INDEX TO Cli-Cod,Cli-NomSet Order to 2set filter to .not. deleted()go topv_codice = clienti.codicev_nome = clienti.nomev_indir = clienti.indirv_citta = clienti.cittav_numtel = clienti.numtel
A questo
punto il programma dovrà avviare l’interfaccia che abbiamo disegnato:
DO FORM Form1
Possiamo
eseguire il programma e iniziare a vedere qualcosa, quindi selezioniamo il
nostro program1 e il pulsante Run.
Effettivamente
abbiamo solo visualizzato il form ma questo non ci permette di fare alcuna
operazione sull’archivio, per questo dobbiamo dotare il form degli strumenti
necessari per farlo e scrivere di conseguenza il codice per ogni procedura.
In genere
per eseguire delle funzioni da un form si utilizzano i pulsanti o
command button. Ad ogni command button è associato un codice di procedura
che viene eseguito ogni volta che il pulsante viene premuto.
Per
quanto riguarda le funzioni del nostro form, abbiamo bisogno dei pulsanti
per scorrere avanti e indietro i record dell’archivio, un pulsante per aggiungere
un nuovo record e un altro per la convalida.
Disegniamoli
quindi sul form scegliendo lo strumento Command Button dalla toolbar
Form Control e assegniamo un nome ad ognuno di essi, ad esempio cmdAvanti,
cmdIndietro, cmdNuovo, cmdConferma.

Ora,
dovremo programmare ognuno di questi pulsanti con le funzioni che a nostro
tempo avremmo assegnato ai famosi tasti funzione. Per far questo bisogna scrivere
l’evento click del pulsante.
Facciamo
doppio click sulla proprietà Click Event del pulsante e scriviamo nella
finestra del codice la procedura corrispondente, quindi:
evento cmdAvanti.click
If .not. eof()Skipv_codice = clienti.codicev_nome = clienti.nomev_indir = clienti.indirv_citta = clienti.cittav_numtel = clienti.numtelEndif
Naturalmente
ogni volta che il valore dei controlli cambia, bisogna aggiornare il form
e quindi operare un refresh del form affinché questo visualizzi i valori
aggiornati.
thisform.refresh

evento cmdIndietro.click
If .not. bof()Skip –1v_codice = clienti.codicev_nome = clienti.nomev_indir = clienti.indirv_citta = clienti.cittav_numtel = clienti.numtelEndifthisform.refreshevento cmdNuovo.clickAppend blankv_codice = clienti.codicev_nome = clienti.nomev_indir = clienti.indirv_citta = clienti.cittav_numtel = clienti.numtelthisform.refreshevento cmdConferma.clickReplace clienti.codice with v_codiceReplace clienti.nome with v_nomeReplace clienti.indir with v_indirReplace clienti.citta with v_cittaReplace clienti.numtel with v_numtel
Ora
possiamo salvare il form ed eseguire il programma, vedremo il risultato di
un semplicissimo sforzo di programmazione in questo ambiente di sviluppo.
Abbiamo
adottato tecniche assolutamente spartane ma sicuramente efficaci per rendere
comprensibile la facilità con cui si può scrivere un applicazione VFP con
metodi e comandi ereditati da xbase.
Sta
ora alla capacità e alla passione del nuovo collega “volpacchiotto” l’impegno
di migliorare ed imparare a scrivere codice più complesso e sfruttare le numerose
potenzialità del linguaggio avvalendosi magari dell’aiuto di un importante
e fantastico strumento quale è FoxItaly.
Suggerimenti, buchi, pugni, palme e tutte le altre cose :-)) -->> Mimmo Micelli
© FoxPro e Visual FoxPro sono un marchi registrati da Microsoft Corporation
dal 22 Giugno 1999