Programmazione Object-Oriented 2


 

 

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

Precedenti:


Aggiungere classi ad una maschera (Form)

Potete aggiungere una classe dal Project Manager al Form Designer a al Class Designer. Potete anche registrare la vostra classe in modo che possa essere mostrata direttamente nella barra degli strumenti del Form Controls del Class Designer e aggiungerle ai contenitori così come allo stesso modo vengono aggiunti i controlli standard

Per registrare un a libreria di classi
1. Dal menu Tools, selezionate Options.
2. Nella finestra di dialogo Options, scegliete la scheda Controls.
3. Selezionate Visual Class Libraries e cliccate su Add.
4. Nella finestra di dialogo Open, scegliete una libreria da aggiungere al registro e cliccare su Open.
5. Ciccate su Set as Default se desiderate che la libreria sia disponibile nella barra degli strumenti Form Controls per le prossime sessioni di VFP.

Potete anche aggiungere la vostra libreria alla barra degli strumenti del From Controls scegliendo Add dal sottomenù del tasto View Class. Per rendere disponibile questa classe nella barra degli strumenti del Form Controls per le prossime sessioni di VFP, dovete impostarla anche come default nella casella Options

Ignorare le proprietà predefinite (default)

Quando aggiungete oggetti basati su una classe personale ad una maschera, potete modificare le impostazioni delle proprietà delle classi che non sono protette, ignorando le impostazioni di default. Se successivamente modificate le proprietà delle classi nel Class Designer, le impostazioni dell'oggetto nella maschera non vengono influenzati. Se non avete modificato le impostazioni delle proprietà in una maschera e cambiate le impostazioni in una classe, la modifica avrà effetto anche sull'oggetto.
Ad esempio, un utente può aggiungere un oggetto basato sulla vostra classe in una maschera e cambiare la proprietà del colore dello sfondo da bianco a rosso. Se modificate la proprietà BackColor della classe a verde, l'oggetto nella maschera dell'utente avrà ancora il colore di fondo rosso. Se d'altra parte, l'utente non cambia la proprietà del colore di fondo dell'oggetto e voi avete cambiato il colore della classe a verde, la proprietà dell'oggetto sulla maschera erediterà la modifica e sarà verde.

Chiamare il metodo della classe genitore

Un oggetto o classe basato su un'altra classe automaticamente eredita la funzionalità dell'originale. Tuttavia, potete facilmente ignorare il metodo ereditato. Ad esempio, potete scrivere nuovo codice per 'evento Click di una classe dopo averla creata come sottoclasse oppure dopo che avete aggiunto un oggetto basato sulla classe ad un contenitore. In entrambi i casi, il nuovo codice viene eseguito in fase di esecuzione, il codice originale non viene eseguito.
Molto più spesso, tuttavia, vorrete aggiungere funzionalità alla nuova classe o oggetto piuttosto che mantenere quelle originali. In effetti, una delle decisioni chiave che dovete fare nella programmazione ad oggetti è quale funzionalità aggiungere a livello di classe, a livello di sottoclasse, e, a livello di oggetto. Potete ottimizzare la progettazione delle classi utilizzando la funzione DODEFAULT() oppure attraverso l'operatore per la portata di validità (::) per aggiungere codice a differenti livelli nella classe o nella gerarchia dei contenitori

Aggiungere funzionalità alla sottoclasse

Potete richiamare il codice della classe genitrice da una sottoclasse utilizzando la funzione DODEFAULT().
Ad esempio, cmdOK è una classe di tasti di commando della libreria Button.vcx, localizzata nella cartella …\Samples\Vfp98\Classes del Visual Studio. Il codice associato con l'evento click di cmdOk rilascia la maschera in cui si trova il tasto. CmdCancel è una sottoclasse di cmdOk della stessa libreria di classe. Per aggiungere funzionalità a cmdCancel per rifiutare le modifiche, ad esempio, potete aggiungere il seguente codice all'evento click:

IF USED( ) AND CURSORGETPROP("Buffering") != 1
       TABLEREVERT(.T.)
ENDIF
DODEFAULT( )

Poichè le modifiche sono aggiunte comunemente alla tabella in memoria, quando la tabella viene chiusa, non avete bisogno di aggiungere la funzione TABLEUPDATE() a cmdOk. Il codice aggiuntivo in cmdCancel annulla le modifiche prima di chiamare il codice cmdOk, classe genitrice, per scaricare la maschera.

Classi e Gerarchie di contenitori

La gerarchie di classi e I contenitori sono due entità separate. VFP cerca il codice deglil eventi per tutta la gerarchia delle classi, per gli oggetti invece cerca nella gerarchia dei contenitori. La seguente sezione tratta la gerarchia dei container. Più avanti viene spiegata la gerarchia di classi nella sezione Chiamare il codice evento nella gerarchia di classi.

Riferirsi ad oggetti nella gerarchia dei container

Per manipolare un oggetto, avete bisogno di identificarlo nella relazione alla gerarchia dei container. Ad esempio per manipolare un controllo di una maschera di una serie di maschera, dovete prima riferirvi alla serie delle maschere, poi alla maschera, e quindi al controllo.
Potete confrontare il relazione ad un oggetto all'interno della sua gerarchia di contenitori per fornire a VFP un indirizzo al vostro oggetto. Quando decidete di descrivere la posizione di una casa a qualche persona al di fuori della vostra cerchia di conoscenza, avete bisogno di indicare la nazione, la regione oppure solo la strada ed il numero civico della casa, dipendentemente da quanto lontano la persona è lontana da voi
La seguente illustrazione mostra un possibile contenitore di situazioni annidate.

Per disattivare il controllo nella colonna di una griglia, dovete fornire il seguente indirizzo:
Formset.Form.PageFrame.Page.;
Grid.Column.Control.Enabled = .F.


La proprietà ActiveForm dell'oggetto dell'applicazione (_VFP) consente di manipolare la maschera attiva ance se non conoscete il suo nome. Ad esempio, la seguente linea di codice cmodifica il colore di sfondo della maschera attiva, non importa a quale serie appartiene:
_VFP.ActiveForm.BackColor = RGB(255,255,255)


In modo simile, la proprietà ActiveControl vi consente di manipolare il controllo attivo nella mascera attiva. Ad esempio, la seguente espressione inserita nella finestra di controllo (Wath window) mostra il nome del controllo sulla maschera nel momento in cui voi iterativamente scegliete alcuni controlli:
_VFP.ActiveForm.ActiveControl.Name

Referenziamento relativo

Quando fate riferimento a oggetti all'interno della gerarchia dei contenitori (ad esempio, nell'evento click del tasto di comando su una maschera appartenente ad una serie), potete utilizzare alcune scorciatoie per identificare l'oggetto che volete manipolare. La seguente tabella elenca le proprietà o chiavi che semplificano la relazione ad un oggetto all'interno della gerarchia di oggetti:

Proprietà o Chiavi Riferimento
Parent Il contenitore dell'oggetto.
THIS L'oggetto.
THISFORM La maschera che contiene l'oggetto.
THISFORMSET La serie di maschere che contiene l'oggetto.

Note Potete utilizzare THIS, THISFORM, e THISFORMSET solo in codice metodo o evento

La seguente tabella fornisce una esempio di utilizzo di THISFORMSET, THISFORM, THIS, e Parent per impostare le proprietà di un oggetto:

Comando Dove includere il commando
THISFORMSET.frm1.cmd1.Caption = "OK" Nel codice dell'evento o metodo di qualsiasi controllo in qualsiasi maschera di una serie.
THISFORM.cmd1.Caption = "OK" Nel codice dell'evento o metodo di qualsiasi controllo nella stessa maschera dove si trovi cmd1.
THIS.Caption = "OK" Nel codice dell'evento o metodo del controllo di cui volete modificare il titolo.
THIS.Parent.BackColor = RGB(192,0,0) Nel codice dell'evento o metodo di un controllo in una maschera. Il comando cambia il colore da scuro a rosso..

Impostare le proprietà

Potete impostare le proprietà sia in fase di esecuzione che in fase di progettazione
Per impostare una proprietà

· Utilizzare questa sintassi:
Container.Object.Property = Value
Ad esempio, la seguente dichiarazione imposta varie proprietà di una casella ti testo di nome txtDate in una maschera di nome frmPhoneLog:
frmPhoneLog.txtDate.Value = DATE( ) && Mostra la data corrente
frmPhoneLog.txtDate.Enabled = .T. && Il controllo viene attivato
frmPhoneLog.txtDate.ForeColor = RGB(0,0,0) && Testo in nero
frmPhoneLog.txtDate.BackColor = RGB(192,192,192) && Sfondo grigio

Per l'impostazione delle proprietà nell'esempio precedente, frmPhoneLog è l'oggetto contenitore al più alto livello. Se frmPhoneLog fosse contenuto in una serie di maschere, avreste anche dovuto includere la serie nel percorso genitore
frsContacts.frmPhoneLog.txtDate.Value = DATE( )

Impostare proprietà multiple

Con la struttura WITH ... ENDWITH si semplifica l'impostazione delle proprietà multiple. Ad esempio, per impostare le proprietà multiple delle colonne di una griglia di una maschera di una serie, potete utilizzare la seguente sintassi:
WITH THISFORMSET.frmForm1.grdGrid1.grcColumn1
     .Width = 5
     .Resizable = .F.
     .ForeColor = RGB(0,0,0)
     .BackColor = RGB(255,255,255)
     .SelectOnEntry = .T.
ENDWITH

Chiamare metodi

Una volta che sia creato l'oggetto, potete chiamare I metodi di quell'oggetto da qualsiasi punto della vostra applicazione.
Per chiamare un metodo
· Utilizzate questa sintassi:
Parent.Object.Method


La seguente dichiarazione chiama I metodi per mostrare una maschera e impostare il la partenza (focus) in una casella di testo.:
frsFormSet.frmForm1.Show
frsFormSet.frmForm1.txtGetText1.SetFocus


I metodi che restituiscono valori sono utilizzati in espressioni, devono terminare con le doppie parentesi (). Ad esempio, la seguente dichiarazione imposta il titolo di una maschera al valore che viene restituito dal metodo definito dall'utente GetNewCaption:
Form1.Caption = Form1.GetNewCaption( )

Note I parametri passati ad un metodo devono essere racchiusi fra parentesi dopo il nome del metodo; ad esempio, Form1.Show(nStyle). Passa nStyle al metodo mostra di Form1.

Rispondere agli eventi

Il codice che includete in una procedura gestione eventi viene eseguito quando accade un evento. Ad esempio, il codice che includete nel codice per gestire l'evento click di una tasto di commando viene eseguito quando l'utente clicca sul tasto.

Un evento può essere provocato artificialmente anche attraverso la programmazione: Click, DblClick, MouseMovi e DragDrop attraverso il comando mouse, oppure utilizzare il comando ERROR per generare un evento errore e il comando KEYBOARD per generare l'evento KeyPress.
frmPhoneLog.Activate


Se volete attivare la maschera, utilizzate il metodo Show della maschera. Richiamare il metodo show provoca la visualizzazione e attivazione della maschera nel punto in cui l'evento Activate viene eseguito.
frmPhoneLog.Show

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