Visual dBASE 7.01 Tutorial

Fase V - Creare il Menu

Ultima Modifica: 11 Marzo 1999
Ken Mayer, TeamB

Traduzione in Italiano di: Antonio Campagna - Agosto 2000


Mete ed Obiettivi


Che cos'è un Menu?

Un Menu è un "interfaccia testo" che appare in "cima" nella maggior parte delle applicazioni Windows, e, in funzione del tipo di applicazione, qualche volta i menu possono comparire sulle schede appartenenti all'applicazione. 

L'applicazione di studio che stiamo realizzando, è basata sull'applicazione di esempio inclusa con Visual dBASE, essa si trova nella directory .../SAMPLES/MUGS. Questo particolare esempio usa un singolo menu, "attaccato" alla struttura dell'applicazione (_app.framewin), seguiremo la stessa via anche per la nostra applicazione. (Questo perché stiamo creando un'applicazione MDI. Se fosse stata un'applicazione SDI, il menu potrebbe apparire su ciascuna scheda.) 

Tenteremo di creare un menu, che abbia la maggior parte delle funzionalità, implementate nell'esempio MUGS. Mentre facciamo questo, ci sono decisioni che si riflettono sull'intero progetto dell'applicazione che devono essere considerate. 

Per esempio, potresti avere un'applicazione che era SDI (Single Document Interface), la quale (normalmente) permette solo un'istanza ad ogni scheda dati, per essere aperta una alla volta (benché un programmatore potrebbe permettere multiple istanze di una stessa scheda...). Potresti, invece, avere un'applicazione che era MDI (Multiple Document Interface), la quale ti consente due o più istanze della stessa scheda per essere aperte contemporaneamente ed invece permettere istanze multiple della stessa scheda per essere aperte una alla volta. (è possibile fare uno strano incrocio di schede MDI e SDI, molte delle mie applicazioni attualmente lavorano così... ...ma qui non ci addentreremo in questo discorso....)


Le grandi differenze tra SDI e MDI (questa è una veloce rassegna) sono: 

Informazioni fornite da Gary White


L'applicazione sviluppata con il tutorial sarà di tipo MDI, questo significa, che abbiamo bisogno di ricordare, che la scheda che attualmente ha "il fuoco" può cambiare rapidamente.  Questo vorrà dire che implementando i vari aspetti dell'applicazione, avremo bisogno di trattarne alcuni flessibilmente nel nostro codice (sì, hai bisogno di scrivere codice.). 

Il menu che progetteremo, dovrà avere delle opzioni per l'apertura delle schede, per generare i report, per gestire la selezione di quale scheda focalizzare, ecc. Al fine di semplificare il tutto, alcune delle opzioni nell'esempio MUGS, non saranno replicate. Questo perché do per scontato che stai studiando come sviluppare un menu. Una volta completato il tutorial potresti esaminare l'esempio MUGS,  dovresti essere in grado di comprendere meglio "la logica"  di ciò che l'autore degli esempi aveva realizzato.

Il modulo "Impostazione Menu" aa

 
Per creare un menu, esiste uno speciale modulo di progettazione. Come gli altri moduli di progettazione (chiamati anche disegnatori visuali)  di Visual dBASE, anche questo è uno "strumento a due vie" ("two-way-tool").  In altre parole, il modulo "impostazione menu" genera del codice e possiamo modificarlo con l'editor di sorgenti. Questo, talvolta è  il modo più facile per identificare ogni problema trovato nel codice o semplicemente per aggiungere e/o modificare il codice esistente. 

I Menu sono associati alle schede (devi avere una scheda per "attaccargli" un menu). Per progettare un menu, tramite il Centro di Controllo, selezioniamo il separatore "SCHEDE", quindi un doppio clic sull'icona simile alla seguente: . Vedrai sullo schermo il modulo "impostazione menu". 

 

Non ha un bel "look", ma è abbastanza facile usare. 

Per inserire un'opzione menu, devi semplicemente digitare il testo che vuoi far visualizzare nel menu. Se vuoi avere un "hotkey" che sia attivato con il tasto <Alt> e la lettera associata a quel menu, hai bisogno di fare precedere quella lettera dal carattere e commerciale (& - ad es. se inserisci &File nel menu comparirà File e puoi attivare questa opzione menu premendo <Alt+F>). 

Creiamo il menu principale per la nostra applicazione. Queste "opzioni  menu"  appariranno in cima alla scheda, selezionandole, si aprirà un "sotto menu". Le opzioni del menu principale sono contenute nell'Oggetto Menubar. Le altre opzioni del menu che creeremo saranno contenute nell'opzione  menu sopra di esse (o alla loro sinistra ). 

Comincia digitando nella prima posizione: &File e pressa il tasto <Tab>. Questo ti farà spostare di una posizione sulla destra. Digita: &Reports e poi <Tab>. digita: &Help

A questo punto, useremo un trucco per far compiere a dBASE il lavoro: nel menu principale seleziona l'opzione "Menu" ,quindi, seleziona "Inserisci menu "Finestra"", dBASE immette questa opzione a sinistra della posizione corrente (cioè a sinistra dell'opzione Help), questo perché abbiamo messo l'opzione "Help" prima dell'opzione "Finestra" . 

La scelta inserire il menu "finestra" aggiunge una singola linea di codice nel sorgente del menu per il codice costruttore che dice a dBASE di gestire le finestre MDI. (Vedi nota sotto, circa un bug nel menu Finestra di Windows 95/98.) 

Salva il lavoro svolto finora, premendo <Ctrl>+ S, e quando appare la finestra di dialogo inserisci il nome "Tutorial" ed infine clicca su "salva". 

L'opzione "File" del menu

Adesso abbiamo bisogno tornare all'opzione File del menu, ed aggiungergli le altre opzioni necessarie al nostro menu. Per ritornare all'opzione "File" del menu, puoi farlo tramite il mouse facendo clic su di essa o usare il metodo "back-tab" cioè devi semplicemente premere i tasti <Shift>+< Tab>. 

Una considerazione per il tuo menu che non può sembrare ovvia, è che dovresti mettere un nome per ciascun oggetto menu (che è quello che stiamo creando ora digitando il testo nella posizione che vogliamo far apparire nel menu--ciascuno di questi è un Oggetto Menu ). Se non gli diamo un nome, sarà dBASE ad  assegnarli automaticamente e purtroppo non sono nomi molto intuitivi, come ad esempio "MENU44," "MENU45," etc. Tale fatto genera delle difficoltà, quando si esamina il codice del menu (o se ti viene voglia di modificare il menu direttamente dal codice sorgente) per sapere quale oggetto menu stai esaminando. 

Attualmente siamo posizionati sull'oggetto menu "File", vai sul modulo "Ispezione" cerca la proprietà "name" e digita "File" (senza virgolette) ed pressa <invio>. 

 

NOTA: Se non premi il tasto < invio> il valore immesso non viene aggiornato!!!  

Fai clic sulla superficie di progettazione del menu. 

Per aggiungere altre opzioni sotto "File", usa semplicemente la freccia in giù. Questo creerà un nuovo Oggetto Menu che è considerato un sotto menu dell'opzione "File" 

Digita: &Apri 

Come fatto sopra, tramite "Ispezione" chiama questo Oggetto Menu "Apri". 

Premi il tasto <Tab> ci sposteremo a destra del menu "Apri", e nota che siamo andati su un nuovo oggetto menu. Le opzioni che immetteremo, sono relative alle schede che potremo aprire in fase di esecuzione dell'applicazione. Successivamente torneremo indietro (come detto altrove) ed aggiungeremo il codice necessario, che sarà eseguito quando l'utente seleziona la scheda da aprire.
Fai le azioni seguenti per aggiungere nuove opzioni menu che appariranno sotto il menu "Apri":  

Hai appena creato una serie di opzioni menu che appariranno solo se l'utente seleziona il menu "Apri", e nel caso del menu "Lookup", se lo selezioni vedrai un altro sotto menu con due opzioni.  Questi menu sono spesso chiamati "menu nidificati". 

Abbiamo bisogno di aggiungere la prossima opzione, che sarà chiamata "Chiudi". Seleziona la superficie di progettazione del menu (cliccaci sopra), o clicca sulla parola "Apri" del menu "File" , ed usa la freccia in giù. 

In questa posizione digita: &Chiudi. Come fatto prima in ispezione modifica la proprietà name a "Chiudi". 

Usa di nuovo la freccia in giù, per aggiungere un'altra opzione al menu "File". Questo volta comunque, inseriremo quello che è chiamato  "separatore". Un "separatore" è un Oggetto Menu, che non può essere selezionato, e mostra semplicemente una linea attraverso il menu. E' usato per separare tra loro gruppi diversi di oggetti menu. 

Tutto quello che è necessario per creare un separatore, è andare nel modulo "Ispezione"  e selezionare la proprietà "separator" ed impostarla a "true". Perché il discorso sia coerente,con quanto fatto fino adesso con gli altri oggetti menu, assegniamo un nome anche a questo oggetto menu, e sempre in Ispezione modifichiamo la proprietà name a "Separator1" 

L'ultima opzione per il menu "File" sarà quella che useremo per chiudere l'applicazione. Usa la freccia in giù e digita: &Esci . quindi in Ispezione imposta la proprietà name a  "Esci" . 

Dovresti vedere un menu simile all'immagine sottostante:  

Il Menu Report

Il menu Report ha bisogno delle seguenti opzioni sotto menu: (discuteremo queste opzioni quando arriveremo a trattare la parte relativa ai report). 

 

Testo Menu  Proprietà NameshortCutseparator
Informazioni Fornitori Fornitorenessunofalse
Lista Inventario Inventarionessunofalse
  Separator2nessunotrue
Etichette Indirizzo Clienti  Etichettanessunofalse

 

NOTA: E possibile usare gli stessi nomi menu perché stiamo lavorando con oggetti contenitori. L'opzione "Informazioni Fornitori" sotto il menu Report avrà il medesimo nome (fornitore) dell'opzione "Fornitori" del menu File|Apri, ciò non va in conflitto, perché dBASE li vede come entità completamente diverse. Ad esempio,  il percorso del menu "File" che visualizza il menu "Fornitore" è:

this.FILE.APRI.FORNITORE

mentre per quello dei report è: 

this.REPORT.FORNITORE

Per dBASE questi "path" sono molto differenti, e così possiamo chiamarli con lo stesso nome... 

 

Il Menu Finestra

Questo menu avrà solo un'opzione che è sempre disponibile, le altre opzioni saranno aggiunte dinamicamente quando l'applicazione è in esecuzione. Quest'ultima parte sarà fatta automaticamente perché abbiamo aggiunto l'opzione "Finestra". 

Testo Menu Proprietà NameshortCutseparator
Chiudi &Tutto ChiudiTuttonessunofalse

Aggiungiamo del semplice codice all'evento onClick del menu "Chiudi &Tutto". Clicca su questa opzione e tramite ispezione, seleziona il separatore "Eventi". Scegli onClick ed immetti il codeblock seguente: 

{;CLOSE FORMS}

Assicurati di premere il tasto <Invio> per salvare questo valore.  

Nota, che se accidentalmente schiacci il pulsante strumento , vedrai apparire la finestra "editor sorgenti" (vedi figura) con una "Funzione metodo" ed un'istruzione "return" , ed il cursore apparirà tra questi su una linea vuota. Puoi rimuoverlo selezionando "Metodo" dal menu principale e scegliere "Elimina Metodo". Questo rimuoverà la funzione e puoi tornare al modulo ispezione. 

 

 

NOTA: senza entrare nei dettagli circa la scrittura dei codeblocks, il punto e virgola all'inizio di un codeblock è richiesto se il tuo codeblock è un codeblock di istruzioni che non ha parametri. Puoi anche cominciare un codeblock con un paio di caratteri "pipe" (||). Useremo questo modo quando parleremo dei report. Per maggiori dettagli sui codeblocks vedi la guida in linea (la parola chiave è "codeblock"). 

Il codice  {;CLOSE FORMS}, chiude semplicemente tutte le schede aperte nell'applicazione.  

BUG: Su un computer dotato di Windows NT, il menu "Finestra" menu lavora esattamente come ci si aspetta. Quando una scheda MDI è aperta, appare automaticamente nel menu e se è la scheda attiva, un segno di spunta appare su di essa nella lista delle finestre aperte (stiamo presumendo che siano aperte più di una scheda MDI.) 

Comunque, su computer con Windows 95 o 98,  il menu Finestra non sempre da o mostra le corrette informazioni della finestra. Non disperarti, nella fase di questo tutorial che riguarda le schede, risolveremo questo problema tramite una semplice modifica, in una proprietà di una delle schede custom... Tramite l'uso di questo "work around", possiamo far lavorare la nostra applicazione sia in ambiente NT sia in Windows 9x. 

Il Menu Help

Non creeremo realmente un help per la nostra applicazione (questo è un argomento che prenderebbe molto tempo ed esula dagli scopi del tutorial), ma, aggiungeremo un'opzione che visualizzerà semplicemente una finestra di dialogo, che ci fornirà delle informazioni elementari circa l'applicazione. 

 
Testo Menu  Proprietà NameshortCutseparator
&Informazioni sul Tutorial InfoTutornonefalse

Digita  <Ctrl>+W per salvare il tuo lavoro ed esci da Impostazione menu.


Aggiungere Codice ai Menu

Ci sono molti fattori da considerare quando si "costruisce" il codice per i menu, e di solito, è più facile ritornare su una opzione e realizzare il codice al momento. Questo è ciò che faremo con la nostra applicazione. 

Una volta che le diverse parti di cui è formata la nostra l'applicazione, saranno realizzate, torneremo indietro al menu, ed "agganceremo" il codice necessario negli eventi onClick per l'oggetto menu attinente, e contestualmente esamineremo il codice "agganciato". 
 


Inserisci il Menu nel Progetto

Nel Centro di Controllo, seleziona il separatore "Progetti". quindi un doppio clic sul file progetto "Visual dBASE 7 Tutorial".

Clic del pulsante destro del mouse nel panello sinistro di "gestione progetto", e seleziona "Aggiungi file al progetto..."

Nella finestra di dialogo che apparirà, seleziona "tipo file" nel combobox in basso e seleziona "menu". Vedrai il menu che abbiamo appena creato selezionalo ed infine premi il pulsante "apri". Nota: seleziona solo il file con estensione .mnu  

Chiudi il progetto e salva. 

 

Fase VI - La configurazione di partenza

tutorial menu

Fine del File: MENU.HTM -- 11 Marzo 1999 KJM

Avvertimento Legale: Questo documento è parte del Visual dBASE 7 Tutorial creato da Ken Mayer. Questo materiale è © proprietà letteraria riservata 1999, da Ken Mayer. Visual dBASE 7 e Visual dBASE 7.01, il BDE (Borland Database Engine) e BDE Administrator sono tutelati in base ai diritti d'autore e marchio di fabbrica da Inprise, International. Questo documento non può essere esposto altrove senza il permesso esplicito dell'autore, il quale si riserva tutti diritti sul documento.