Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Insieme alla versione Professional di Visual Basic è fornito il controllo Microsoft Common Dialog, utile per la selezione di un file da aprire o salvare. Ma non esiste un modo per selezionare una cartella tramite queste finestre.
Esiste a questo scopo una finestra di dialogo all'interno della DLL Shell32. Il suo nome è BrowseForFolder. In questo HowTo vedremo come richiamare questa funzione mediante l'API. Per il nostro scopo creeremo una funzione che ritorna il percorso, ma prima è necessario scrivere alcune dichiarazioni API all'interno del nostro form oppure in un modulo standard
Le righe dal 3 al 12 definiscono un nuovo tipo di nome BROWSEINFO. Tale struttura è richiesta dalla funzione API. La riga 14 presenta una costante BIF_RETURNONLYFSDIRS che indica che vogliamo presentate soltanto le cartelle. Ulteriori costanti che è possibile utilizzare in questa funzione sono presenti nelle dichiarazioni API. Per rintracciarle bisogna cercare tutte le costanti il cui nome inizia per "BIF_" (BrowseInfo Flags). Alla riga 15 viene dichiarata la prima funzione API: SHBrowseForFolders. Essa richiede che sia passata una variabile di tipo BROWSEINFO (definita prima), mostra la finestra di dialogo per la scelta della cartella e, nel momento in cui l'utente clicca il pulsante OK alloca in uno spazio apposito il nome della cartella selezionata. La seconda funzione API (riga 16) estrae il percorso della cartella selezionata dall'area di memoria allocata. L'ultima funzione API (riga 17) dealloca l'area di memoria bloccata dalla funzione SHBrowseForFolders.
Terminate le dichiarazioni passiamo alla scrittura di una funzione che faccia tutto il lavoro mediante un semplice richiamo. La nostra funzione prende il nome di SfogliaCartelle.
La funzione richiede l'handle del form dentro il quale apparirà la finestra di scelta della cartella e restituisce una stringa in uscita.
Come già accennato prima, la funzione SHBrowseForFolders richiede che sia passata una variabile con la struttura BROWSEINFO. La nostra variabile si chiamerà BInfo.
Dichiareremo anche una serie di altre variabili: CartellaScelta
indica che è stato possibile estrarre il percorso scelto dall'area
di memoria allocata. In caso di mancata estrazione - ovvero quando l'utente
preme il tasto Annulla della finestra di dialogo - essa avrà
il valore 0.
La struttura BROWSEINFO ha tre elementi fondamentali: hOwner che
indica l'handle della finestra dentro la quale apparirà la nostra
finestra di dialogo. La nostra funzione SfogliaCartelle ci provvede
l'handle da assegnare a tale elemento (riga 24).
Eseguiamo la chiamata alla funzione SHBrowseForFolders che mostrerà la finestra di scelta della cartella. All'uscita della finestra, la variabile PercorsoAllocato conterrà un puntatore all'area di memoria allocata dall'ultima funzione.
Come per tutte le funzioni API che utilizzano stringhe, è necessario prepare prima la variabile mediante l'istruzione Space$.
La funzione SHGetPathFromIDList estrae il percorso allocato dall'area
di memoria indicata da PercorsoAllocato e lo memorizza nella variabile
PercorsoScelto.
Quindi segue un controllo che si assicura che l'utente abbia scelto qualche cartella. In caso negativo il programma salta alla riga 34.
Tutte le funzioni API restituiscono le variabili stringa con un terminatore (codice ASCII 0) alla fine. Questa riga provvede a eliminare il terminatore finale da PercorsoScelto e memorizza il rimanente nella variabile SfogliaCartelle che sarà il valore ritornato all'uscita della funzione.
Fatto questo è necessario deallocare la memoria allocata.
L'utente ha annullato la selezione. Non sarà ritornata alcuna cartella all'uscita.
Terminata
la nostra funzione possiamo passare alla semplice interfaccia. Nel momento in cui l'utente clicca il pulsante Sfoglia viene richiamato l'evento click:
Questa semplice routine scrive il percorso della cartella selezionata
all'interno della casella di testo di nome Percorso. |
È terminata qui. Basta cliccare il pulsante Sfoglia per vedere apparire la finestra di dialogo "Sfoglia per Cartelle". Fibia
FBI
|
Torna all'indice degli HowTo |