Mi è stata avanzata una richiesta apparentemente banale: “Come posso zoomare un’immagine che ho su una form con ms-Access”?
La domanda, come ho detto, è solo apparentemente banale poiché VBA, pur disponendo di un arsenale abbastanza cospicuo di istruzioni, renderebbe l’operazione davvero complessa e probabilmente non del tutto risolutiva o soddisfacente.
Inoltre è, se ci pensate bene, come dover reinventare la ruota: Esistono dozzine di programmi che fanno già benissimo questo lavoro!
Il problema però si sostanzia nel desiderio d’implementare “all’interno” di Access le funzionalità che desideriamo. Ebbene, senza avere la pretesa di volere essere esaustivo, direi che a prima vista non ci sono soluzioni semplici per questo desiderio. Abbiamo da investire dei denari acquistando una di queste applicazioni, scegliendo quella che più si adatta all’esigenza:
Ammara DbPix: http://www.ammara.com/dbpix/access.html
Access Imagine Easy Picture Control: https://access.bukrek.net/
Però… c’è un però. Potremmo pensare a esternalizzare il controllo dell’immagine con un programma di terze parti magari gratuito che svolga le funzioni che c’interessa attivare. Ho (ri-)pescato un vecchio visualizzatore, leggero e veloce, in grado di fare quello che desideriamo, Irfanview: https://www.irfanview.com/
L’installazione è semplice e l’utilizzo, tutto sommato, abbastanza agevole. Dal momento che però un esempio vale più di tante parole, ho preparato per voi un piccolo db esemplificativo che potete scaricare cliccando qui. ATTENZIONE! è necessario installare la versione 32 bit di irfanview (oppure la 64 ma dovrete effettuare la modifica che vi illustrerò più avanti.
In buona sostanza ho preparato gli elementi essenziali: una tabella con il campo immagine (collegamento ipertestuale), una maschera con un pulsante che vi consentirà d’inserire nel campo immagine il collegamento al file immagine e un secondo pulsante che richiamerà la shell di visualizzazione. Il minimo indispensabile.
Il codice che utilizziamo per caricare il link al file immagine nel campo immagine di tabella 1 è il seguente:
Const msoFileDialogFilePicker As Long = 3 Dim fd As Object, CartellaOrigine As String 'inserisci il percorso di origine CartellaOrigine = "C:\users\" 'Create a FileDialog object as a File Picker dialog box. Set fd = Application.FileDialog(msoFileDialogFilePicker) 'Use a With...End With block to reference the FileDialog object. With fd 'Set the initial path to the D:\Documents\ folder. .InitialFileName = CartellaOrigine .Title = "Select Attachment" 'Use the Show method to display the File Picker dialog box and return the user's action. 'If the user presses the action button... If .Show = -1 Then ' DoCmd.GoToRecord , "", acNewRec Me.immagine.Value = "#" & .SelectedItems(1) & "#" ' ** 'If the user presses Cancel... Else End If End With 'Set the object variable to Nothing. Set fd = Nothing
Si tratta di codice “standard” del quale quello che ci interessa è essenzialmente la variabile CartellaOrigine alla quale ho attribuito un percorso abbastanza generico (“C:\users\“) che potrete modificare a vostro piacimento puntando, ad esempio, alla vostra cartella immagini o a un’apposita cartella di un file server.
La seconda parte del codice, sempre legato all’evento “onclick” ma questa volta del secondo pulsante è il seguente:
On Error GoTo Err_img_V_Map_DblClick Dim strMapPath As String, MyPath As String Dim stAppName As String, Retval As Variant 'dove si trova l'applicazione? questa è la 32 bit strAppName = "C:\Program Files (x86)\IrfanView\i_view32.exe" '---------------------- 'volendo potreste usare, in alternativa, la versione 64 bit che però commento 'strAppName = "C:\Program Files\IrfanView\i_view64.exe" '---------------------- 'prendi il link dalla casella di testo MyPath = Me.immagine.Value 'di quanti caratteri è composto il link? pathlen = Len(MyPath) 'Togli il cancelletto a destra e a sinistra MyPath = Left$(MyPath, pathlen - 1) MyPath = Right$(MyPath, pathlen - 2) 'inserisci doppi apici a destra e a sinistra di entrambe le stringhe MyPath = Chr$(34) & MyPath & Chr$(34) MyPath = Chr$(34) & strAppName & Chr$(34) & " " & MyPath 'Debug.Print MyPath 'richiama il programma e a pri il file Retval = Shell(MyPath, 1) Exit_img_V_Map_DblClick: Exit Sub Err_img_V_Map_DblClick: MsgBox Err.Description Resume Exit_img_V_Map_DblClick
Questa volta il codice l’ho commentato quasi completamente poiché ho dovuto effettuare alcune operazioni per “adattare” il contenuto del campo immagine (che viene riportato in vba nella forma #nomefile#).
Inoltre il comando shell necessita di una sintassi ben precisa: il nome dell’applicazione dev’essere contenuto tra doppi apici così come il nome del file. Inoltre è necessario il percorso assoluto. Per questo motivo ho dovuto inserire il carattere ASCII 34 (chr$(34)), i doppi apici, prima e dopo entrambi questi elementi.
Nel codice troverete queste righe:
'dove si trova l'applicazione? questa è la 32 bit strAppName = "C:\Program Files (x86)\IrfanView\i_view32.exe" 'volendo potreste usare, in alternativa, la versione 64 bit che però commento 'strAppName = "C:\Program Files\IrfanView\i_view64.exe"
La seconda riga richiama la funzione shell, nella versione di Irfanview a 32 bit. Se avrete scaricato/installato la versione a 64 bit dovrete commentare questa riga e decommentare l’ultima, in modo che richiami la giusta applicazione.
Spero d’esservi stato d’aiuto. Un caro saluto a tutti.