Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
L'insieme dei controlli Thunder contiene tre controlli dedicati alla scelta di uno o più files su richiesta dell'utente; si tratta dei controlli DriveListBox , DirListBox e FileListBox , tre controlli decisamente troppo antiquati per continuare a comparire anche nel più banale progetto per Windows.
Ogni volta, infatti, che all'utente è richiesto di selezionare un file per l'apertura o il salvataggio, le applicazioni Windows presentano una familiare finestra di dialogo comune; è possibile richiamare questa finestra utilizzando il controllo OCX Microsoft Common Dialog oppure utilizzando l'API, risparmiando quindi, la distribuzione del controllo aggiuntivo. In quest'articolo sarà affrontata la seconda delle soluzioni, in quanto la prima, data la sua semplicità, non richiede particolari spiegazioni. Data la generalità d'uso delle due funzioni si è preferito inserirle all'interno di un modulo standard da incorporare all'interno del progetto che richiedesse la funzionalità. Il modulo si apre con la dichiarazione delle costanti e delle funzioni API:
La struttura OPENFILENAME verrà utilizzata da entrambe le funzioni di richiesta di apertura e di salvataggio e richiede la specifica dei filtri sui nomi dei files visualizzati, del titolo della finestra, della cartella iniziale presentata e la scelta di una serie di flags che determineranno il comportamento della finestra. Per brevità non saranno presentati tutti i flags ma solo quelli utilizzati in questa soluzione:
Le due costanti specificheranno di verificare l'esistenza del file scelto e di nascondere la casella di controllo Apri in sola lettura, durante l'operazione di apertura.
Le due funzioni GetOpenFileName e GetSaveFileName servono rispettivamente per l'operazione di apertura e di salvataggio su file. Entrambe utilizzano una variabile di tipo OPENFILENAME e si differenziano solo per pochissime differenze.
La variabile OFNAME sarà utilizzata da entrambe le funzioni di apertura e salvataggio:
La funzione ShowOpen utilizza lo stesso nome del metodo del controllo Common Dialog ma in aggiunta richiede il passaggio del form per il quale la finestra di dialogo sarà richiamata ed una stringa contenente il filtro da applicare alla visualizzazione. Il filtro utilizza una forma particolare che verrà affrontata più avanti.
La funzione ShowOpen si compone di due soli passaggi: riempimento della
variabile OFNAME (righe 35-47) e richiamo dellea funzione GetOpenFileName. Alla riga 48 è richiamata la funzione GetOpenFileName con la struttura OFNAME e nel caso che la funzione restituisca un valore diverso da zero, sarà possibile leggere il nome del file selezionato dalla struttura OFNAME. La funzione ShowSave opera in maniera analoga alla precedente salvo che per l'impostazione dei flags, qui non necessari:
Come già accennato la differenza si limita alla riga 63 poiché non saranno necessari particolari controlli durante il salvataggio del file; la riga 65 inoltre richiama la funzione GetSaveFileName anziché la precedente. L'utilizzo del modulo appena sviluppato è davvero molto semplice: porremo sopra un form una casella di testo di nome txtFileName e due pulsanti di nome cmdOpen e cmdSave. La pressione del pulsante Apri mostrerà la relativa finestra di dialogo per l'apertura, mentre la pressione del pulsante Salva mostrerà la finestra di salvataggio.
Il richiamo delle due funzioni precedentemente esposte richiede il passaggio del form per il quale la finestra diverrà modale e il filtro di visualizzazione; le due funzioni si differenziano anche per il filtro utilizzato: la prima delle due funzioni utilizzerà un solo filtro corrispondente ai files di testo (*.txt), mentre la seconda funzione utilizzerà due differenti filtri, corrispondenti ai files di testo (*.txt) ed a tutti i files (*.*).
Ogni filtro si compone di due parti: il testo visibile ed il filtro vero e proprio, separati tra loro dal codice ASCII 0; facendo riferimento al primo esempio il filtro si compone della descrizione "Files di testo (*.txt)" e del filtro "*.txt". Per separare un filtro dal successivo si utilizza lo stesso codice ASCII
0, come segue: Nell'esempio alle righe 9-11 sono assegnati due filtri: "Files di testo (*.txt)" e "Tutti i files (*.*)" e la differenza può dimostrarsi eseguendo il progetto.
La pressione del pulsante Apri mostrerà una finestra simile a quella mostrata nella figura 2 (lo stile della stessa dipende dalla versione di Windows installata); la casella in basso Tipo file specifica i filtri nella visualizzazione dei files. Naturalmente saranno visualizzati solo i files corrispondenti al filtro selezionato. Alla
pressione del pulsante Apri sarà assegnato solo un filtro,
per cui non sarà possibile variarlo tramite la ComboBox sul fondo.
Nel caso invece del pulsante Salva, saranno assegnati due filtri
e sarà possibile selezionare quello più idoneo, come mostrato
nella figura qui mostrata. |
Tutte le moderne applicazioni Windows dovrebbero evitare l'uso dei controlli DriveListBox, DirListBox e FileListBox perché troppo antiquati rispetto l'evoluzione dei sistemi Windows. L'uso del controllo Microsoft Common Dialog può dare un aspetto molto più moderno al progetto, ma richiede l'uso di un controllo esterno aggiuntivo. Il modulo qui presentato riproduce esattamente il comportamento dei metodi ShowOpen e ShowSave del controllo di casa Microsoft, rendendo quindi superfluo l'uso di quel controllo se utilizzato solo per i due metodi dedicati alla scelta di un file. Fibia
FBI
|
Torna all'indice degli HowTo |