http://digilander.libero.it/Cenati

Finestre di dialogo - Apri

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript

 

 

 

 

 

Le finestre di dialogo standard di Windows

Abbiamo tutti molta familiarità con le finestre di dialogo di Windows. Ci si presentano in moltissimi programmi quando si chiede di scegliere un file. Sappiamo come muoverci nell'albero delle directory e come trovare il file che ci serve.

In questa pagina vediamo la finestra di dialogo di Windows e la stessa finestra invocata tramite Internet Explorer.

Le "Common Dialog Box" sono una risorsa che può essere utilizzata anche dai nostri script.

E' facile da usare, anche perchè ha una interfaccia nota a tutti gli utenti. In questo modo è subito chiaro cosa è richiesto all'utilizzatore del nostro script.

E, soprattutto, con tutto il mio impegno non sarei in grado di scrivere una interfaccia anche lontanamente simile a questa.

Come utilizzare una common dialog box

Il codice che ho riportato qui sotto dovrebbe essere sufficiente per le applicazioni più frequenti della finestra di dialogo standard "File Apri".

L'oggetto da istanziare l'ho trovato spulciando nel registro di configurazione di Windows con il programma RegEdit. Non è detto che tutte le classi registrate siano utilizzabili tramite script, ma questa sapevo che lo era.

Nel mio windows ME ho la versione 6 delle common dialog box. Con il metodo aboutbox è possibile far visualizzare una finestra di copyright.

Nell'esempio ho indicato alcune costanti che ho trovato con il visualizzatore di oggetti di MSE (il Microsoft Editor che uso per scrivere gli script, insieme a VBSEdit). Credo di aver indicato quelle più significative ed utili.

Impostando la proprietà Flags con la somma di queste costanti si può influenzare l'aspetto ed il comportamento della finestra che appare sullo schermo.

Un flag elimina dalla finestra di dialogo la check box "apri in sola lettura".

Il flag cdlOFNCreatePrompt, in caso si indichi un file non esistente, fa in modo che appaia una pop-up che chiede conferma del nome del file. Se si risponde no si ritorna alla dialog box. Se si risponde si, il nome del file viene restituito allo script alla chiusura della finestra.

Simile al precedente, il flag cdlOFNFileMustExist forza l'utente a scegliere un file che già esiste, senza permettergli di scrivere un filename nuovo.

Il flag const cdlOFNExplorer serve per visualizzare una finestra in stile Win95 e seguenti. E non una finestra in stile win 3.1. Non è necessario specificare questo flag, tranne che impostando qualche altro flag particolare non vi accorgiate che viene visualizzata una finestra del vecchio tipo (ad esempio usando il flag che permette di scegliere più files contemporaneamente: cdlOFNAllowMultiselect = 512).

Nel mio esempio i flag impostati chiedono conferma all'utente nel caso di selezione di un nome di file non esistente. E nascondono la casella "apri in sola lettura".

La proprietà Filter serve per limitare la scelta a determinati tipi di file. Nella relativa casella della dialog box apparirà "tutti i files". Selezionando la casella a discesa avremo solo i vbs. Nel filtro bisogna scrivere le coppie separate dalla barra verticale.

Opzionalmente si può dare un nome personalizzato alla finestra utilizzando la proprietà DialogTitle. Se non la si specifica appare "Apri".

Con InitDir indico quale directory deve essere mostrata nella finestra al momento dell'apertura. Ad esempio una cartella dove ci si aspetta di trovare quello che si cerca. Oppure, di default, la cartella corrente dello script.

E' molto importante fissare un'ampiezza adeguata alla proprietà maxfilesize. Questa indica il numero massimo di caratteri a disposizione per contenere il pathname completo del file selezionato. Se non è sufficiente, viene restituita una stringa vuota. Una limitazione della quale ignoro possibili utilizzi.

Di default se si preme "Annulla" viene restituita allo script una stringa vuota. Che di fatto è quello che è accaduto. Se si vuole intercettare il tasto "Annulla", bisogna impostare a True la proprietà booleana CancelError. In questo modo la variabile Err assumerà valore 32755 per rilevare l'evento.

Finalmente ecco il metodo per invocare la finestra di dialogo: comDlg.ShowOpen. E per recuperare il nome di file scelto si usa la proprietà FileName.

Quest'ultima proprietà, se impostata prima dell'apertura della finestra di dialogo, permette di suggerire all'utente un nome di file che sarà già presente nella casella di scelta.

Il codice è molto documentato con i commenti. Togliendo questi ultimi ed anche le proprietà non indispensabili si ottiene un codice veramente compatto per recuperare dall'utente un nome di file.

Vi ricordo che se invece volete usare il drag&drop (cioè trascinare un file sull'icona dello script) si può utilizzare il codice che ho usato in alcuni altri programmi pubblicati su questo sito, ad esempio per visualizzare la directory in Excel.

Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente questo script ed il successivo che trovi più sotto in questa pagina.

'*** 
     Set comDlg=CreateObject("MSComDlg.CommonDialog.1")
     'http://digilander.libero.it/Cenati
     'comDlg.aboutbox 'Versione 6.0
     'Imposto alcune costanti che potrò usare nella proprietà FLAGS
     const cdlCancel = 32755 'Costante di errore: è stato premuto ANNULLA
     const cdlOFNHideReadOnly = 4 'Nasconde la casella "sola lettura"
     const cdlOFNCreatePrompt = 8192 'Chiede se creare il file se non esiste
     const cdlOFNFileMustExist = 4096 'Puoi scegliere solo files esistenti
     const cdlOFNExplorer = 524288 'Finestra in stile win95
     'Esempio di impostazione dei Flag
     comDlg.Flags = cdlOFNHideReadOnly + cdlOFNCreatePrompt
     'Imposto i tipi di files che voglio visualizzare
     comDlg.Filter = "Tutti i files|*.*|Files di VBScript|*.vbs"
     comDlg.DialogTitle="Titolo della finestra"
     'Imposto la directory che deve essere mostrata 
     '(altrimenti viene mostrata quella dello script)
     comDlg.InitDir="c:\" 
     'Imposto il numero massimo di caratteri del pathname
     comDlg.maxfilesize=500
     'Voglio che premendo Annulla si generi un errore
     comdlg.CancelError=true
     on error resume next
     'Mostro la finestra di dialogo "File Apri"
     comDlg.ShowOpen
     'Qui intercetto l'errore: è stato premuto ANNULLA?
     if err.number=cdlCancel then msgbox "Ha scelto cancel"
     'E mostro il file scelto (se ha premuto annulla è "")
     msgbox comDlg.FileName
'*** 

Visualizzare la finestra APRI FILE di Internet Explorer

In alcuni casi non è disponibile la classe per invocare le finestre di dialogo standard di Windows. La classe di Windows funziona con XP, ma non sempre con altre versioni. Se avete installato un programma di VisualStudio avrete anche la licenza per usare la classe delle finestre di dialogo, altrimenti riceverete un messaggio di errore "licenza mancante".

E' però possibile aggirare il problema aprendo la medesima finestra fornita da Internet Explorer.

Questo esempio, fornitomi da "mayayana" nel newsgroup microsoft.public.scripting.vbscript, è più lento poichè deve avviare IE. Ma funziona altrettanto bene e fornisce il pathname completo del file selezionato.

Fate attenzione perchè copiandolo e incollandolo bisogna sistemare i ">" e i "<".

Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente questo script ed il precedente.

msgbox ChooseFile()

Function ChooseFile()
 On Error Resume Next
 Dim Q2, sRet
 Q2 = chr(34)
 ChooseFile = ""
 Set IE = CreateObject("InternetExplorer.Application")
 IE.visible = False
 IE.Navigate("about:blank")
 Do Until IE.ReadyState = 4
 Loop
 IE.Document.Write "<HTML><BODY><INPUT ID=" & Q2 & "Fil" & Q2 & "Type=" & Q2 & "file" & Q2 & "><BODY></HTML>"
 With IE.Document.all.Fil
        .focus
        .click
        sRet = .value
 End With
 IE.Quit
 Set IE = Nothing
 ChooseFile = sRet
End Function

Cenati Giovanni

 

 
 

© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript