Oppure

Loading
22/07/11 8:14
wuolfit
Ciao a tutti,
il mio ultimo dubbio sul vb6 è il seguente :
Io ho una form contenente un DriveListBox, un DirListBox, un FileListBox ed un bottone. La funzione del bottone è quella di permettermi di usare una stampante (indicata da me nel codice sorgente del programma), che non è quella di default. Adesso volevo sapere se, una volta selezionato un file dalla mia FileListBox, è possibile mandarlo in stampa, usando il bottone di cui sopra e di conseguenza la stampante non di default da me scelta.

Grazie a tutti in anticipo per l'aiuto
Ultima modifica effettuata da wuolfit 22/07/11 9:45
aaa
22/07/11 15:31
gibra
Non è una questione così banale.
Il file DEVE essere stampato solo dall'applicazione che lo gestisce, ovvero se è un .DOC con Word, se .XLS con Excel, etc.

Comunque usando la funzione API ShellExecute() con il verbo 'print' potrai stampare il file con il programma che è predefinito nel sistema.
Quindi se stampi un PDF verrà utilizzato il programma-lettore di PDF (spesso è Acrobat Reader, ma non è detto.

Potrebbe comunque nascere un problema se nel sistema NON c'è alcun programma predefinito per 'quel' determinato tipo di file.

Adesso sono al lavoro e non ho sottomano il codice, ma se fai una ricerca trovi la documentazione sulla ShellExecute().

Purtroppo, però, VB6 in questo caso viene 'scavalcato' quindi il sistema usa la stampante di default, per cui non puoi usare il codice che ti avevo fornito nell'altro post, e la cosa si complica 'leggermente'.

In pratica dovrai fare così:
- esaminare tutte le stampanti, per trovare quella predefinita
- memorizzartela temporaneamente
- impostare la TUA stampante come predefinita
- stampare con ShellExecute()
- rimettere la stampante predefinita originale.

Prova a buttar giù qualcosa, stasera o domani vedo se posso fornirti un aiuto più 'concreto'.

HTH
:)
aaa
22/07/11 17:52
gibra
Questo articolo ti aiuta sul versante 'impostare la stampante'
How To Set Which Printer Is the System Default Printer
support.microsoft.com/kb/266767/…

Quindi, dopo aver impostato la TUA stampante, stampi il file utilizzando la funzione:

Private Const SW_HIDE As Long = 0
Private Declare Function ShellExecute 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

Rem Uso:

ShellExecute 0, "print", <percorso_file>, "", "", SW_HIDE



e poi ripristini la stampante predefinita, che era settata prima.

Ultima modifica effettuata da gibra 22/07/11 19:55
aaa
25/07/11 7:45
wuolfit
Gibra scusa il ritardo nel rispondere, e grazie mille x i consigli, ma quella di shellexecute è una strada già provata che non ha sortito l'effetto sperato, che tu sappia no esistono vie alternative????
aaa
25/07/11 10:28
gibra
Che io sappia, non esistono altre vie.
La ShellExecute è l'unica, perchè è la sola funzione che recupera automaticamente il programma predefinito in base al tipo di file, e funziona su qualsiasi computer.

Trovo davvero molto strano che a te non riesca... Molto strano perchè io la uso praticamente in tutti i miei programmi e non ho mai avuto problemi.
aaa
26/07/11 7:44
wuolfit
Strano ma vero....ti posto il codice sorgente che avevo usato e dimmi che ne pensi.....

Private Declare Function ShellExecute 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 ShowCmd As Long) As Long

Dim stampa As Long

stampa = ShellExecute(0, "Print", "percorso del file", "", "", 0)
aaa
26/07/11 11:17
gibra
Non 'Strano ma vero' ma 'ovvio!' che non funziona.

Sfido chiunque a far funzionare la tua istruzione:

stampa = ShellExecute(0, "Print", "percorso del file", "", "", 0)


:rotfl:
Ultima modifica effettuata da gibra 26/07/11 11:20
aaa
26/07/11 13:38
wuolfit
In cos'è che è sbagliata???? Non mi puoi dare qualche dritta per favore????
aaa