Newsgroup: it.comp.appl.access
Titolo: SitoComune faq 6.22, aggiungerei una modifica

Salve a tutto il NG.
Ho trovato molto utile la faq 6.22 Richiamare la finestra di dialogo
per la selezione di un file del SitoComune; per trovare un tipo
specifico di file devo però sempre modificare il modulo. Ho effettuato
una modifica che mi risulta funzionale, soprattutto perchè permette di
richiamare la funzione passandole direttamente diverse possibili
scelte, così può essere l'utente a scegliersi il filtro direttamente
dalla finestra, e posso riutilizzare il modulo senza doverlo
modificare; ho anche aggiunto un paio di commenti che potrebbero
servire a chi come me è alle prime armi. Se non è troppo disturbo
pubblicherei qui di seguito la versione che ho modificato (solo la
funzione, il resto è inalterato) chiedendo il vostro aiuto, critiche e
commenti per le migliorie, così da poterla sottoporre al SitoComune se
fosse valida (sì insomma, proporre una modifica/aggiunta fatta male mi
parrebbe un insulto). Grazie per l'attenzione e l'aiuto.
Fabio
'Funzione alternativa da richamare
Public Function cmdlg_file_filter(plFilter As Variant, Optional
cerca_da As String = "C:\")
   'Autore: Stefano Bettini
   'Restituisce: il percorso completo del file selezionato
   'modificato da Fabio Innocente per scegliere i tipi di files da
cercare
   'e la Directory di partenza (di default C:)
   Dim OpenFile As OPENFILENAME
   Dim lReturn As Long
   Dim sFilter As String
   Dim i As Integer
   OpenFile.lStructSize = Len(OpenFile)
   'inizializzo sFilter
   sFilter = ""
   For i = 0 To UBound(plFilter)
      'il carattere zero (Chr(0)) delimita e i singoli filtri
      sFilter = sFilter & plFilter(i) & Chr(0)
   Next i
   OpenFile.lpstrFilter = sFilter
   OpenFile.nFilterIndex = 1
   OpenFile.lpstrFile = String(257, 0)
   OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
   OpenFile.lpstrFileTitle = OpenFile.lpstrFile
   OpenFile.nMaxFileTitle = OpenFile.nMaxFile
   OpenFile.lpstrInitialDir = cerca_da
   OpenFile.lpstrTitle = "Selezione"
   OpenFile.flags = 0
   lReturn = GetOpenFileName(OpenFile)
   If lReturn = 0 Then
      cmdlg_file_filter = ""
   Else
      cmdlg_file_filter = Left(OpenFile.lpstrFile,
InStr(OpenFile.lpstrFile, Chr$(0)) - 1)
   End If
End Function
'per richiamare la funzione:
    Dim tipoFile As Variant
    'tipoFile deve contenere una o più coppie di elementi (descrizione
e tipo di file)
    'separati da una virgola
    Dim pathFile As String
    tipoFile = Array("Tutti i file (*.*)", "*.*","File di testo
(*.txt)","*.txt")
    pathFile = cmdlg_file_filter(tipoFile, Directory_da_cui_Cercare)
   'pathFile è una stringa col percorso completo del file a partire
dal nome del
   'drive dove è salvato

 Fabio
Ciao Fabio.
Ti dico la mia...!
Personalmente trovo inutile comporre un'array(data una stringa di
partenza) da passare ad una Funzione per poi riconvertirlo in
Stringa...., a quel punto passa direttamente la stringa
come Filtro e ti eviti un ciclo sull'Array ....!
Altra considerazione, questo a mio avviso potrebbe essere opinabile:
La cosa forse veramente funzionale sarebbe creare una Classe nella
quale inserire un Metodo "AddFilter" e "RemoveFilter" a quel punto
diventerebbe veramente flessibile...
Tieni presente che quanto ti ho detto è già realizzato, anche perchè
la chiamata al CmdDialog supporta moltissime personalizzazioni, tra le
quali il CallBack...., quello
che hai trovato sul SC è il Demo minimale...
Saluti
@Alex

 @Alex
Grazie, allora li lascio in pace e vedo se sono capace di fare per
conto mio quanto mi hai suggerito!
Caio
Fabio