Newsgroup: it.comp.lang.visual-basic
Titolo: Bottone che apre HTML oppure PDF opp Scheda

Ciao vi chiedo ancora un aiuto.
Vorrei selezionare all'interno di un ComBox un prodotto dei tanti che ho 
inserito precedentemente. Quindi una volta selezionato il prodotto 
desiderato e cliccato sul bottone apri_scheda, vorrei che il programma mi 
aprisse la scheda del prodotto in html (direttamente su internet oppure 
anche in locale) oppure mi aprisse il pdf in locale con la scheda del 
prodotto.
In pratica dovrei impostare un bottone che legga il combobox e a seconda del 
suo valore mi faccia cose diverse. Apertura html web, apertura html locale, 
apertura pdf. Come posso fare questa parte finale? Ovvero come chiamo 
l'apertura di un html (locale o remoto) oppure l'apertura di un pdf (locale 
o remoto)
Grazie 

Thommino ha scritto:

Non sono certo di aver capito bene l'esigenza, ma forse l'uso di
ShellExecute(API)
potrebbe risolverti il problema....?
@Alex


Semplice quello che voglio fare.
Clicco il bottone e lui mi apre una pagina html (locale o remota) o 
eventualmente un pdf, che gli ho inserito nel codice.
Private Sub bottone_Click()
apripagina:"http:\\
www.pippo.com
"
End Sub
oppure
Private Sub bottone_Click()
apripdf: C:\pluto\pippo.pfd
End Sub
oppure
Private Sub bottone_Click()
apripdf: C:\pluto\pippo.html
End Sub
Semplice no?
Ma non ho capito il modo rigoroso per farlo!

 Ma non ho capito il modo rigoroso per farlo!
Non credo tu abbia capito quello che vuoi fare, altrimenti
non avresti detto "semplice" visto che ti ho suggerito anche come
farlo...!
Non c'è un modo rigoroso per fare le cose, c'è un modo con il quale
le cose
funzionano ed uno con le quali si fà dell'aria fritta....!
Per questa volta Pappa Pronta....
'************ Code Start **********
'
Private Declare Function apiShellExecute Lib "shell32.dll" _
    Alias "ShellExecuteA" _
    (ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) _
    As Long
'***App Window Constants***
Public Const WIN_NORMAL = 1         'Open Normal
Public Const WIN_MAX = 3            'Open Maximized
Public Const WIN_MIN = 2            'Open Minimized
'***Error Codes***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&
'***************Usage Examples***********************
'Open a folder:     ?fHandleFile("C:\TEMP\",WIN_NORMAL)
'Call Email app:
?fHandleFile("mailto:
das...@hotmail.com
",WIN_NORMAL)
'Open URL:          ?fHandleFile("
http://home.att.net/~dashish
",
WIN_NORMAL)
'Handle Unknown extensions (call Open With Dialog):
'                   ?fHandleFile("C:\TEMP\TestThis",Win_Normal)
'Start Access instance:
'                   ?fHandleFile("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
'****************************************************
Function fHandleFile(stFile As String, lShowHow As Long)
Dim lRet As Long, varTaskID As Variant
Dim stRet As String
    'First try ShellExecute
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _
            stFile, vbNullString, vbNullString, lShowHow)
    If lRet > ERROR_SUCCESS Then
        stRet = vbNullString
        lRet = -1
    Else
        Select Case lRet
            Case ERROR_NO_ASSOC:
                'Try the OpenWith dialog
                varTaskID = Shell("rundll32.exe
shell32.dll,OpenAs_RunDLL " _
                        & stFile, WIN_NORMAL)
                lRet = (varTaskID <> 0)
            Case ERROR_OUT_OF_MEM:
                stRet = "Error: Out of Memory/Resources. Couldn't
Execute!"
            Case ERROR_FILE_NOT_FOUND:
                stRet = "Error: File not found.  Couldn't Execute!"
            Case ERROR_PATH_NOT_FOUND:
                stRet = "Error: Path not found. Couldn't Execute!"
            Case ERROR_BAD_FORMAT:
                stRet = "Error:  Bad File Format. Couldn't Execute!"
            Case Else:
        End Select
    End If
    fHandleFile = lRet & _
                IIf(stRet = "", vbNullString, ", " & stRet)
End Function
'************ Code End **********
@Alex

 news:1149588297....@f6g2000cwb.googlegroups.com...
[cut]
<Non credo tu abbia capito quello che vuoi fare, altrimenti
<non avresti detto "semplice" visto che ti ho suggerito anche <come
<farlo...!
Oddio cos'è tutto quel codicione che mi hai postato. Vuoi dire che per 
aprire una semplice finestra che visualizza una pagina http, serve tutta 
quella roba?
Possibile che sia veramente così complesso?
Dubito poi che in VBA mi funzioni tutto il codice che mi hai molto 
gentilmente postato.
Facciamo un attimo il punto:
In pratica dovrei inserire:
1)All'inzio del mio codice:
Private Declare Function apiShellExecute Lib "shell32.dll" _
... As Long
2) '***App Window Constants***
Tutte
3) '***Error Codes***
Tutte
4)Alla fine del codice invece:
Function fHandleFile(stFile As String, lShowHow As Long)
....
End Function
5) E per Chiamare l'apertura a seconda di quello che voglio fare:
?fHandleFile("C:\TEMP\",WIN_NORMAL) 'per aprire una directory
?fHandleFile("mailto:
das...@hotmail.com
",WIN_NORMAL)
' per mandare una mail a quell'indirizzo
?fHandleFile("
http://home.att.net/~dashish
",
WIN_NORMAL)
'Per aprire un http
?fHandleFile("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
'Per aprire un database Access
?fHandleFile("C:\TEMP\TestThis",Win_Normal)
'NON HO CAPITO PER FARE COSA
Corretto?

 gentilmente postato.
[Risposta]
In VBA funziona tutto, questa Routine in Access funziona senza
modifiche.

Grosso modo hai capito, ora non ti resta che provarlo...!
Ciao
@Alex

 Corretto?
In parte si.
In VBA non puoi usare le Declare (almeno, non che io ricordi), quindi
non puoi fare quello che ti hanno indicato.
Cmq, per quello che vuoi fare te dovresti riuscire cosi': (a spanne,
non garantisco che funzioni)
Dim objWshShell As Object
Set objWshShell = CreateObject("WScript.Shell")
objWshShell.Run nome_e_percorso_del_pdf (o del sito, o del file html)
Set objWshShell = Nothing
Ovviamente devi usare un if sulla proprieta' listindex del combobox
(sai come funziona, no? Ogni elemento del combo ha un index,
progressivo; il primo ha 0, il secondo ha 1, etc. etc.)

 ha scritto nel messaggio 
news:1149600743.6...@u72g2000cwu.googlegroups.com...
[cut]
<[Risposta]
<No visto che era semplice sarai sicuramente in grado di farlo <in altro
<modo...!
Ma non c'è mica bisogno di arrabbiarsi. Pensavo che essendo ormai l'html 
entrato in ogni applicazione, pensavo fosse semplice da integrare anche in 
una applicazione VBA. Evidentemente mi sbagliavo.
<[Risposta]
<In VBA funziona tutto, questa Routine in Access funziona <senza
<modifiche.
Meglio così!
[cut]
<Grosso modo hai capito, ora non ti resta che provarlo...!
Ok vado subito a provarlo!
Grazie 

 Set objWshShell = Nothing
Quindi al posto di nome_e_percorso_del_pdf scrivo
objWshShell.Run c:\pippo\Pluto.pdf
oppure
objWshShell.Run 
www.tim.it
Giusto? 

 progressivo; il primo ha 0, il secondo ha 1, etc. etc.)
Anche questa soluzione che proponi è più che funzionale.
Ciao
@Alex


Boh!
Te l'ho detto che l'ho scritto a memoria, no?
Cmq, ci vogliono le virgolette cosi':
objWshShell.Run "
www.tim.it
"
objWshShell.Run "c:\pippo\Pluto.pdf"

 Sbagliato quel codice gira regolarmente in VBA.
Mo me lo segno, grazie :-)
Io ero rimasto ai tempi in cui in VBA non potevi usare le declare.
Buono a sapersi, grazie ancora :-)

 Buono a sapersi, grazie ancora :-)
Il VBA di Access già dalla 2000 è molto più flessibile e simile a VB
come IDE.
Rimangono le limitazioni tipiche legate a Handle e Hdc degli oggetti, e
l'impossibilità
di istanziare OCX senza averli nell'interfaccia e molto altro, per il
resto è un gioiello..!
;-)
@Alex

 objWshShell.Run "c:\pippo\Pluto.pdf"
Perfetto mi pare che funzioni perfettamente e con il minimo sforzo.
Unica cosa.
C'è il modo di far aprire la pagina in una nuova pagina?