Programmazione Object-Oriented 1


 

 

Tratto da Programmer's Guide Traduzione di Baldarelli Gian-Carlo

Mentre Visual FoxPro mantiene il supporto per la programmazione strutturale, sono state introdotte nuove estensioni al linguaggio che consentono di ottenere la potenza e flessibilità offerta dalla programmazione orientata agli oggetti.

La progettazione orientata agli oggetti e la programmazione orientata agli oggetti rappresenta una variazione dalla metodo standard di programmazione procedurale. Al posto di pensare ad un programma che scorre dalla prima riga di codice fino all'ultima, dovete pensare come creare degli oggetti: contenitori di componenti di una applicazione che hanno funzionalità interne così come funzionalità che possono essere esposte all'utente.

Questo capitolo tratta:

 

Gli Oggetti in Visual FoxPro

In VFP, Maschere (form) e controlli sono oggetti che vengono inclusi nelle vostre applicazioni. Voi manipolate questi oggetti attraverso le loro proprietà, eventi e metodi
Le estensione del linguaggio orientato agli oggetti di VFP, forniscono un elevato grado di controllo sugli oggetto nelle vostre applicazioni. Queste estensioni rendono semplice la creazione e la manutenzione delle librerie di codice riutilizzabile, fornendovi:

La programmazione OOP è principalmente un modo di impacchettare il codice in modo che possa essere riutilizzato e mantenuto in modo più semplice. Il pacchetto principale è chiamato classe.

Classi e Oggetti: I mattoni principali delle applicazioni

Classi e Oggetti sono in stretta relazione, ma non sono la stessa cosa. Una classe contiene informazioni sul come un oggetto deve apparire e su come si deve comportare. Una classe è la fotocopia dello schema di un oggetto. Lo schema elettrico e di design di un telefono, ad esempio, può rappresentare una classe. L'oggetto, o una istanza di una classe, sarà l'apparecchio telefonico.

Le classi determinano le caratteristiche di un oggetto.

Gli oggetti hanno proprietà

Un oggetto possiede alcune proprietà o attributi. Ad esempio, un telefono è di un certo colore e forma. Quando inserite un telefono in un ufficio, esso avrà una certa posizione sulla scrivania. La cornetta potrà essere sollevata o abbassata.
Gli oggetti che create in VFP hanno anche proprietà che vengono determinate dalla classe su cui si basano. Queste proprietà possono essere impostate in fase di progettazione o in fase di esecuzione.
Ad esempio, alcune proprietà che una casella di selezione può avere sono indicate nella seguente tabella:

Proprietà Descrizione
Caption Il testo descrittivo a fianco della casellina.
Enabled Specifica se la casella può essere selezionata dall'utente.
ForeColor Il colore del testo descrittivo.
Left La posizione della parte sinistra della casella di selezione.
MousePointer La forma del puntatore mouse quando passa sopra la casella.
Top La posizione della parte alta della casella.
Visible Indica se la casella deve essere visibile.

Gli Oggetti hanno eventi e metodi associati

Ogni oggetto riconosce e reagisce a determinate azioni che si definiscono eventi. Un evento è una attività specifica e predeterminata, iniziata dall'utente o dal sistema. Gli eventi, nella maggior parte dei casi, sono generati dall'iterazione dell'utente. Ad esempio, con il telefono, un evento viene innescato quando l'utente solleva la cornetta, o quando preme i tasti per comporre il numero di telefono.

In VFP, le azioni che l'utente provoca sono il movimento del mouse, il click del mouse, la pressione dei tasti della tastiera. L'inizializzazione di un oggetto, l'incontro di una linea di codice che causa un errore, sono esempi di eventi di sistema.

I metodi sono procedure associate con un oggetto. I metodi sono differenti dalle normali procedure di VFP, i metodi sono inestricabilmente confinati con un oggetto e vengono invocati in modo differente da come si richiamano le normali procedure.

Gli eventi possono avere metodi con loro associati. Ad esempio, se scrivete il codice per il metodo di gestione dell'evento click, questo codice viene eseguito quando avviene l'evento click. I metodi possono tuttavia esistere indipendentemente da qualsiasi evento.

Questi metodi devono essere richiamati in modo specifico attraverso il codice.
L'elenco degli eventi, anche se vasto, è fisso. Voi non potete creare nuovi eventi, L'elenco dei metodi invece può essere estesa in modo infinito.

La seguente tabella elenca alcuni eventi associati con la solita casella di controllo (check box):

Evento Descrizione
Click L'utente clicca nella casella.
GotFocus L'utente seleziona la casella con un click o con il tasto TAB.
LostFocus L'utente Seleziona una casella differente.

La tabella seguente elenca I metodi associati con la medesima casella di controllo:

Metodo Descrizione
Refresh Il valore della casella di controllo viene aggiornato per evidenziare qualsiasi cambiamento che possa essere accaduto alla sotto struttura del codice sorgente.
SetFocus Il fuoco viene impostato sulla casella sebbene l'utente abbia premuto il TAB mentre la casella era selezionata.

( modello degli eventi e l'ordine in cui gli eventi accadono )

Le classi in Visual FoxPro

Tutte le proprietà, gli eventi ed I metodi di un oggetto sono specificate nella definizione della classe. In aggiunta, le classi hanno le seguenti caratteristiche che le rendono specialmente utili per il riutilizzo e la manutenzione:

Nascondere la complessità non necessaria


Quando inserite un telefono nel vostro ufficio, probabilmente non vi preoccupate del come faccia il telefono internamente a ricevere una chiamata, inizia e termina una connessione con la centrale di commutazione, o traduce la pressione di un tasto in un segnale elettrico. Quello che dove semplicemente sapere è che dovete sollevare la cornetta, comporre il numero e parlare con la persona con cui volete parlare, La complessità per raggiungere lo scopo è nascosta. Il beneficio di poter nascondere i dettagli interni di un oggetto in modo da concentrasi solo sull'oggetto viene definita Astrazione.

La complessità interna può essere nascosta

L'incapsulamento, che coinvolge: metodo di impacchettare e codice delle proprietà in un oggetto, contribuisce all'astrazione. Ad esempio, la proprietà che determina le voci di una casella di selezione (List Box) e il codice che viene eseguito quando selezionale una voce della lista, possono essere incapsulate insieme in un singolo controllo che aggiungete ad una maschera (form).

Utilizzare la potenza delle classi esistenti

Una sottoclasse può avere tutta la funzionalità di una classe esistente, più qualsiasi controllo o funzionalità aggiuntiva che le vogliate aggiungere. Se la vostra classe è un semplice telefono, voi potete creare una sottoclasse del telefono che possiede tutte le funzionalità di base del telefono stesso, con in aggiunta tutte quelle che vorrete aggiungere voi.

La creazione di sottoclassi consente il riutilizzo del codice

La creazione di sottoclassi è un modo di ridurre la quantità di codice da scrivere. Iniziate con la definizione dell'oggetto che sia vicino a quello che desiderate e poi personalizzatelo.

Migliorare la manutenzione del codice

Attraverso l'ereditarietà, se voi modificate una classe, la modifica si trasmetterà su tutte le sottoclassi di quella classe. Questo aggiornamento automatico consente di risparmiare tempo e fatica. Ad esempio, se il produttore dell'apparecchio telefonico, modifica l'apparecchio dal selettore a disco alla tastiera, risparmierà molto tempo se potrà apportare la modica in base allo schema di costruzione principale in modo che tutti i telefoni prodotti, basati su questo schema, possano ricevere automaticamente la modifica, senza dover intervenire su ogni telefono per ricevere la nuova tastiera.

L'ereditarietà rende semplice la manutenzione del codice.

L'ereditarietà non si applica all'Hardware, ma si può utilizzare nel software. Se scoprite un errore in una classe, invece di dover correggere l'errore in tutte le sottoclassi, basterà correggerlo nella classe e il modifica si ripercuoterà su tutte le sottoclassi di quella classe.

La gerarchia di classi di Visual FoxPro

Quando create delle classi definite, è importante conoscere la gerarchia adottata in VFP

La gerarchia delle classi in VFP

Contenitore e Non contenitore

Le due principali di classi in VFP, e, per estensione, degli oggetti, sono le classi contenitore e le classi dei controlli

Classi contenitore e Classi controlli

Classi Contenitore

I contenitori possono contenere altri oggetti e consentire l'accesso agli oggetti contenuti. Ad esempio, se create una classe contenitore che consiste in due menu a tendina (list Box) e due tasti di comando ( command button) e quindi aggiungete un oggetto basato su questa classe ad una maschera (form), ogni singolo oggetto può essere manipolato sia in fase di progettazione che in fase di esecuzione. Potete facilmente modificare la posizione dei menu a tendina o dei titoli dei tasti di comando. Potete anche aggiungere oggetti al controllo in fase di progettazione, ad esempio potete aggiungere etichette che identificano i menù a tendina.


La seguente tabella elenca cosa può contenere ogni classe contenitore.:

Contenitore Cosa può contenere
Gruppo tasti di comando Tasti di comando (Command buttons)
Contenitore (Container) Qualsiasi controllo
Controllo (Control) Qualsiasi controllo
Custom (fatto su misura) Qualsiasi controllo, cornice, contenitore, personalizzati
Form sets (set di maschere) Maschere (Forms), Barre strumenti (toolbars)
Forms (maschere) Cornici, qualsiasi controllo, contenitori, og.personalizzati
Colonne (Grid columns) Titoli Intestazioni e qualsiasi oggetto eccetto gruppi di maschere, maschere, barre strumenti, contatori, e altre colonne.
Griglie (Grids) Colonne (Grid columns)
Gruppi tasti opzioni (Option button groups) Tasti opzioni (Option buttons)
Cornici (Page frames) Pagine
Pagine Qualsiasi controllo, contenitore, og. Personalizzato
Progetto Files, servers
Barre strumenti (Toolbars) Qualsiasi controllo, cornici, contenitore

Classi Controllo

Le classi controllo sono più incapsulate delle classi contenitore, ma possono risultare meno flessibili per questa ragione. Le classi controllo non dispongono del metodo AddObject

Adattare le classi ai compiti

 

Il vostro obiettivo è quello di essere in grado di utilizzare le classi in molti e svariati contesti. Una pianificazione intelligente vi consentirà di decidere in modo preciso quale classe progettare e quale funzionalità includere nella classe.

Decidere quando creare le classi

Potreste creare classi per ogni controllo e per ogni maschera che intendiate utilizzare, ma questo non è il metodo migliore per progettare una applicazione. Finireste per avere classi che fanno pressappoco la medesima cosa ma che devono essere mantenute separatamente.

Incapsulare le funzionalità generiche

Potete creare controlli per le funzionalità generiche. Ad esempio, tasti di comando che consentano all'utente di spostare il puntatore di una tabella, un tasto per la chiusura di una maschera, uno per l'help , possono essere tutti salvato in una classe e aggiunti alle maschere ogni volta che vorrete disporre di queste funzionalità.
Potete esporre le proprietà ed I metodi di una classe in modo che l'utente possa integrarle nell'ambiente dati di una maschera o di un gruppo di maschere.

Fornire un valido e gradevole aspetto all'applicazione

Potete creare gruppi di maschere, maschere e classi di controllo con un aspetto comune in modo che tutta l'applicazione abbia il medesimo aspetto. Per esempio potreste aggiungere grafica e colori ad una classe maschera e utilizzarla come cornice di base per tutte le maschere che creerete. Potreste creare una classe casella di testo con un preciso aspetto, come un effetto ombra, e quindi utilizzarla come una classe in tutta l'applicazione ogni colta che dovrete aggiungere una casella di testo.

Decidere che tipo di classe creare

VFP vi consente di creare diversi tipi di classe, ognuna con le sue proprie caratteristiche. Potete specificare il tipo di classe che intendete creare nella finestra di dialogo NewClass oppure con la clausola AS del comando CREATE CLASS nella finestra di comando.

Le classi di base di VFP

Potete creare sottoclassi della maggior parte delle classi di VFP attraverso il Class Designer.

Le classi di base di Visual FoxPro

ActiveDoc Custom Label PageFrame
CheckBox EditBox Line ProjectHook
Column* Form ListBox Separator
CommandButton FormSet OLEBoundControl Shape
CommandGroup Grid OLEContainerControl Spinner
ComboBox Header* OptionButton* TextBox
Container Hyperlink Object OptionGroup Timer
Control Image Page* ToolBar

* Queste classi sono una parte integrante di un contenitore genitore e quindi non si possono creare sottoclassi nel Class Designer.


Tutte le classi di base di VFP riconoscono di base tutti i seguenti eventi:

Evento Descrizione
Init Avviene quando un oggetto è creato.
Destroy Avviene quando un oggetto viene scaricato dalla memoria.
Error Avviene ogni volta che accade un errore in un evento o metodo della classe.

Tutte le classi di VFP hanno come minimo le segueti proprietà:

Proprietà Descrizione
Class Che tipo di classe è.
BaseClass Da quale classe di base è derivata, come ad es. Una maschera, un modulo, un tasto di comando, un oggetto personale ecc.
ClassLibrary In quale libreria è memorizzato.
ParentClass La classe genitrice dalla quale è stato derivato. Se la classe è derivata da una classe di base VFP, la proprietà di ParentClass è la medesima di BaseClass.

Estendere le classi di base di VFP

Potete creare delle sottoclassi di queste classi in modo da impostare le vostre proprietà di controllo di base. Ad esempio, se volete che il nome di un controllo che aggiungete ad una maschera rifletta automaticamente la vostra convenzione dei nomi, potete creare delle classi basate su quelle di base di VFP allo scopo. Potete creare classi con un particolare aspetto o comportamento che servano da stampo per tutte le maschere che creerete.
Potete anche creare delle sottoclassi di quelle di base per creare dei controlli con delle funzionalità incapsulate. Se volete che un click su un tasto chiuda una maschera , potete creare una classe basata sulla classe command button di VFP, impostare la proprietà captino su Quit e includere il seguente comando associato all'evento click

THISFORM.Release

Potete quindi aggiungere questo tasto a qualsiasi maschera della vostra applicazione.


Creare controlli con componenti multipli

Le vostre sottoclassi non sono limitate ad una singola classe di base. Potette aggiungere controlli multipli ad una singola definizione di classe. Molti delle classi di VFP della libreria di esempi ricadono in questa categoria. Ad esempio la classe VCR nel Buttons.vcx che si trova nella cartella Visual Studio …\Samples\Vfp98\Classes, contenente 4 tasti di comando per la navigazione fra i record di una tabella.

Creare classi non visuali

Una classe basata sulla classe custom di VFP non ha elementi visuali di funzionamento. Potete creare metodi e proprietà per la vostra classe utilizzando l'ambiente Class Designer. Ad esempio, potreste creare una classe personale chiamata StrMethods e includere un numero di metodi per manipolare le stringhe di carattere.

THISFORM.txtCount.Value = ;
THISFORM.StrMethods.WordCount(THISFORM.edtText.Value)

Le classi non visuali ( come ad esempio controlli, timer ) hanno una rappresentazione visuale solamente in fase di progettazione nel FormDesigner. Impostate la proprietà picture (immagine) della classe personale con il file .bmp che volete mostrato nel FormDesigner quando la classe viene aggiunta ad una maschera.

Creare delle classi

Potete creare delle nuovi classi nel ClassDesigner e potete vedere come ogni singolo oggetto apparirà all'utente mentre lo progettate.


Per creare una nuova classe
- Nel Project Manager, selezionate la linguetta Classes e cliccate su New.
        -oppure-
· Dal menu File, scegliete New, selezionate Class, e scegliete New File.
         -oppure-
· Utilizzate il comando CREATE CLASS nella finestra di comando.

La finestra di dialogo New Class vi consentirà di specificare come chiamare la nuova classe, su quale classe di base si basa e in quale libreria salvarla.


Creare una nuova classe

Cambiare la definizione di una classe


Appena avete creato una classe, potete modificarla. Le modifiche apportate ad una classe hanno effetto su tutte le sottoclassi e tutti gli oggetti basati su quella classe. Potete aggiungere miglioramenti alla classe o correggere un errore, tutte le sottoclassi e gli oggetti basati erediteranno le modifiche.


Per modificare una classe nel Project Manager
1. Selezionate una classe che volete modificare.
2. scegliete Modify.
     Si aprirà il Class Designer .
Potete modificare la definizione di una classe visuale attraverso il commando MODIFY CLASS.

Importante. Non cambiate la proprietà nome della classe se la classe è già stata utilizzata in altri componenti di applicazioni . Altrimenti VFP non sarà in grado di localizzare la classe quando necessario.

Creare una sottoclasse della definizione

Potete creare una sottoclasse da una classe personalizzata (user defined) in uno o due modi..
Per creare una sottoclasse di una classe user-defined
1. Nella finestra di dialogo New Class, cliccate il tasto alla destra della casella di Based On.
2. Nella finestra Open che si è aperta, scegliete la classe su cui volete basarvi.
        -oppure-
· Utilizzate il commando CREATE CLASS .

Ad esempio, per creare una nuova classe x basata sulla classe genitrice (parentclass) nella Mylibrary.vcx, utilizzate il seguente codice:

CREATE CLASS x OF y AS parentclass ;
FROM mylibrary

Utilizzare il Class Designer

Quando specificate la classe su cui si basa la vostra nuova classe e la libreria dove salvare la classe, si apre il Class Designer.
Class Designer

Il Class Designer mostra la stessa interfaccia del Form Designer. Consentendovi di visualizzare e editare le proprietà della vostra classe nella finestra Properties. La finestra per l'editing vi consente di scrivere codice da eseguire quando vengono richiamati metodi o accadono eventi.

Aggiungere Oggetti alla classe Control o Container

Se basate la nuova classe sulla classe controlli o contenitori, potete aggiungere controlli nello stesso modo in cui aggiungete controlli al Form Designer: selezionate il tasto di controllo dalla barra strumenti Form Controls e trascinatelo nella dimensione voluta nel Class Designer.

Non importa che tipo su quale tipo di classe vi state basando, potete impostare proprietà e scrivere metodi. Potete anche creare nuove proprietà e metodi per la classe.

Aggiungere Proprietà e metodi alla classe

Potete aggiungere tutte le proprietà e metodi che volete alla nuova classe. Le proprietà conterranno i valori; i metodi conterranno il codice procedurale che verrà eseguito quando verrà invocato il metodo.

Creare nuove proprietà e metodi

Quando create nuove proprietà e metodi per una classe, le proprietà ed I metodi sono estesi a tutta la classe e non solo ad un singolo componete.

Per aggiungere una nuova proprietà ad una classe
1. Dal menu Class, scegliete New Property.
2. Nella finestra di dialogo New Property, scrivete il nome della nuova proprietà.
3. Indicate la visibilità: Public, Protected, or Hidden. (pubblica protetta nascosta)

Una proprietà pubblica può essere disponibile ovunque nell'applicazione. Le proprietà e i metodi protetti o nascosti vengono discussi nella parte Proteggere e Nascondere membri di una classe.
La finestra di dialogo New Property:

4. Cliccare su Add.
Potete anche aggiungere una descrizione della proprietà che sarà mostrata nella parte basse della finestra delle proprietà nel Class Designer e nel Form Designer quando il controllo viene aggiunto alla maschera.
Problematiche - Quando aggiungete una proprietà ad una classe che può essere impostata dall'utente della classe, l'utente potrebbe inserire un valore non valido e quindi provocare un errore di esecuzione. Dovete specificare i valori validi per la proprietà. Se la proprietà può essere impostata a 0, 1, o 2, ad esempio, specificatelo nella casella Descrizione della finestra di dialogo New Property. Dovreste anche verificare il valore attraverso il codice che si riferisce a quella proprietà.

Per creare un array ( insieme, matrice ) di dati proprietà


· Nella casella Name della finestra di dialogo New Property, specificate il nome, la grandezza e la dimensione della matrice.

Ad esempio, per creare una proprietà di nome Myarray con 10 colonne e dieci righe scrivete quanto segue nella casella Name.

myarray[10,2]

La proprietà matrice e solo in lettura in fase di progettazione e viene mostrata nella finestra di dialogo delle Properties in corsivo. La proprietà matrice può essere gestita e ridimensionata in fase di esecuzione. Un esempio si trova nel capitolo 9 "Gestione di istanze multiple in una maschera."

Per aggiunger un nuovo metodo ad una classe

Dal menu Class. Scegliete New Method.
1. Nella finestra di dialogo New Method, scrivete il nome del metodo.
2. Specificate la visibilità: Public, Protected, or Hidden.
3. Selezionate la casella di selezione Access per specificare un metodo di accesso, selezionate la casella Assign per creare una metodo di assegnazione.

I metodi Access e Assign vi consentono di eseguire del codice quando il viene richiesto il valore della proprietà o quando tentate di modificare il valore della proprietà.

Il codice di un metodo access viene eseguito quando si interroga il valore della proprietà, di solito quando si riferisce alle proprietà di un oggetto, immagazzinando il valore della proprietà in una variabile, oppure stampando il valore della proprietà con il punto interrogativo.

Il codice in un metodo Assign viene eseguito quando tentate di modificare il valore di una proprietà, si solito utilizzando il commando STORE per assegnare un nuovo valore alla proprietà.

Potete anche aggiungere una descrizione del metodo.

Proteggere e Nascondere I membri di una classe


Le proprietà ed i metodi in una classe sono Public per definizione: il codice in altre classi e procedure possono impostare o richiamare i metodi. Le proprietà ed i metodi che voi impostate come Protected possono essere acceduti solo da altri metodi della definizione di classe o nelle sottoclassi della classe stessa. Proprietà e metodi di classi definite Hidden possono essere accedute solo da altri membri della definizione di classe, sottoclassi della classe non possono vedere o riferirsi a membri nascosti.

Per assicurare il corretto funzionamento in alcune classi, avete bisogno di prevenire il fatto che l'utente possa modificare le proprietà o richiamare metodi dall'esterno della classe.

Il seguente esempio mostra come proteggere le proprietà ed I metodi di una classe..

La classe orologio inclusa nel Samples.vcx, nella cartella Visual Studio …\Samples\Vfp98\Classes, include un timer e 5 labels per mostrare il tempo trascorso.

La classe stopwatch del Samples.vcx

La classe Stopwatch contiene etichette e un timer.
L'impostazione delle proprietà della classe Stopwatch

Controllo Proprietà Impostazione
lblSeconds Caption 00
lblColon1 Caption :
lblMinutes Caption 00
lblColon2 Caption :
lblHours Caption 00
tmrSWatch Interval 1000

Questa classe possiede anche tre proprietà nascoste, nSec, nMin, nHour e un metodo nascosto UpdateDisplay.

Suggerimento Cliccate su Class Info del menu Class per visualizzare la visibilità di tutte le proprietà e metodi di una classe.
Le proprietà protette vengono utilizzate per calcoli interni nel metodo UpdateDisplay e l'evento Timer. Il metodo UpdateDisplay imposta i titoli delle etichette sul valore del tempo trascorso.
Il metodo UpdateDisplay

Code Comments
cSecDisplay = ALLTRIM(STR(THIS.nSec))cMinDisplay = ALLTRIM(STR(THIS.nMin))cHourDisplay = ALLTRIM(STR(THIS.nHour)) Converte le proprietà numeriche nel tipo carattere per la visualizzazione nei titoli delle etichette.
THIS.lblSeconds.Caption = ; IIF(THIS.nSec < 10, ; "0" ,"") + cSecDisplayTHIS.lblMinutes.Caption = ; IIF(THIS.nMin < 10, ; "0", "") + cMinDisplayTHIS.lblHours.Caption = ; IIF(THIS.nHour < 10, ; "0", "") + cHourDisplay Imposta il titolo delle etichette, mantenendo il valore zero se il tempo è inferiore a 10.

CodIce Commento

THIS.Parent.nSec = THIS.Parent.nSec + 1
IF THIS.Parent.nSec = 60
     THIS.Parent.nSec = 0
     THIS.Parent.nMin = ;     
     THIS.Parent.nMin + 1
ENDIF

Incrementa la proprietà nSec ogni volta che accade l'evento timer: ogni secondo Se nSec è uguale a 60, settala a 0 e incrementa la proprietà nMin.
IF THIS.Parent.nMin = 60
    THIS.Parent.nMin = 0
    THIS.Parent.nHour = ;
    THIS.Parent.nHour + 1
ENDIF
THIS.Parent.UpdateDisplay

Se nMin ha raggiunto 60, settala a zero e incrementa la proprietà nHour.

Richiama il metodo UpdateDisplay quando vengono impostate le nuove proprietà..

La classe stopwatch ha tre metodi che non sono protetti: Start, Stop e Reset. Un utente può chiamare questi metodi direttamente per controllare il cronometro.

Il metodo Start contiene le seguenti linee di codice:
THIS.tmrSWatch.Enabled = .T.

Il metodo Stop contiene la seguente linea di codice:
THIS.tmrSWatch.Enabled = .F.

Il metodo Reset imposta le proprietà protette a zero e richiama il metodo protetto:
THIS.nSec = 0
THIS.nMin = 0
THIS.nHour = 0

THIS.UpdateDisplay

L'utente non può impostare direttamente queste proprietà o richiamare questo metodo, ma il codice del metodo reset lo può fare.

Specificare l'impostazione predefinita di una proprietà

Quando create una nuova proprietà, l'imnpostazione predefinita è falso .F. per indicare un valore di base diverso, utilizzate la finestra delle proprietà. Nella scheda Other, scegliete la vostra proprietà ed inserite il valore desiderato. Questo sarà il valore iniziale quando la classe viene aggiunto ad una maschera o ad un set di maschere.

Potete assegnare qualsiasi proprietà nel Class Designer. Quando un oggetto basato su quella classe viene aggiunto ad una maschera, l'oggetto rifletterà le proprietà assegnate da voi piuttosto che quelle delle classi di base di VFP

Suggerimnento Se volete impostare come valore di base di proprietà come stringa vuota, selezionate la casella Property e utilizzate il tasto BACKSPACE

Specificare l'apparenza in fase di progettazione

Potete specificare la barra degli strumenti e il contenitore delle icone della vostra classe nella finestra di dialogo Class Info.
Per impostare la barra degli strumenti delle icone di una classe
1. Nel Class Designer, scegliete Class Info dal menu Class.
2. Nella finestra di dialogo Class Info , scrivete il nome ed il percorso del file .BMP nella casella Toolbar icon.
Suggerimento L'immagine .bmp è di dimensione 15 x 16 pixel. Se è maggiore viene automaticamente ridimensionata e quindi potrebbe essere visualizzata in modo differente.


L'icona della barra strumenti che specificate viene mostrata nella barra degli strumenti Form Control quando riempite la barra strumenti con le classi nella vostra libreria di classi.
Potete specificare l'icona che deve essere mostrata nel Project Manager e Class Browser

Per impostare una icona container per una classe
1. Nel Class Designer, scegliete Class Info dal menu Class.
2. Nella casella Container icon, scrivete il nome ed il percorso del file .bmp che deve essere mostrata sul tasto della barra strumenti Form Controls.

Utilizzare la libreria di classi

Ogni classe visualizzabile viene salvata in una libreria di classi con estensione .vcx

Creare una libreria di classi

Potete creare una libreria di classi in uno di questi tre metodi.
Per creare una libreria di classi

· Quando create una classe, specificate un nuovo file nella casella Store In della finestra di dialogo New Class.
-oppure-
· Utilizzare il commando CREATE CLASS specificando il nome del file nuova lebreria.
Ad esempio, la seguente dichiarazione crea una nuova classe di nome myclass e una nuova libreria di nome new_lib:
CREATE CLASS myclass OF new_lib AS CUSTOM
-oppure-
· Utilizzate il commando CREATE CLASSLIB .
Ad esempio, scrivete il seguente commando nella finestra di commando per creare una nuova libreria di classi new_lib:
CREATE CLASSLIB new_lib

Copiare e cancellare librerie di classi

Una volta creata una libreria potete velocemente copiare classi da una libreria ad un altra o semplicemente rimuovere classi dalla libreria.
Per copiare una classe da una libreria ad un'altra
1. Assicuratevi che entrambe le librerie siano nel progetto ( non necessariamente lo stesso ).
2. Nel Project Manager, selezionate la scheda Classes.
3. cliccate sul segno (+) alla sinistra della libreria in cui si trova la classe.
4. Trascinate la classe dalla libreria originale alla nuova libreria.
Suggerimento Per convenienza e rapidità potreste voler mantenere una classe e tutte le sottoclassi in una unica libreria. Se avete una classe che contiene elementi di diverse librerie, tutte le librerie devono essere aperte, così occorrerà per caricare inizialmente la classe in fase di esecuzione o progettazione.

Per rimuovere una classe da una libreria
· Selezionate la classe nel Project Manager e scegliere Remove.
      -oppure-
· Utilizzate il commando REMOVE CLASS.

Per modificare un nome di una classe nella libreria, utilizzate il commando RENAME CLASS. Ricordatevi tuttavia che quando cambiate un nome di una classe, le maschere che contengono quella classe e le sottoclassi in altri .vcx continueranno a riferirsi al vecchio nome e non funzioneranno quindi correttamente.
VFP include un Class Browser per facilitare la gestione delle classi e delle librerie.

segue : Aggiungere una classe ad una maschera ( form )
segue : Definizione di classe attraverso il codice

© FoxPro e Visual FoxPro sono un marchi registrati da Microsoft Corporation

 

 

Febbraio 2002
 

FoxPro e Visual FoxPro® sono un marchi registrati da Microsoft Corporation

Fonte: "Programmers Guide Visual FoxPro®" di Microsoft© in lingua inglese.
Questa guida ha il solo scopo di fornire le indicazioni
per muovere i primi passi con questo bellissimo strumento.

 


dal 22 Giugno 1999
webmaster@foxitaly.com