Newsgroup: it.comp.appl.access
Titolo: Comando stampa x un file di testo

Ciao a tutti,
dopo essermi creato il file di testo (grazie ai vostri suggerimenti) ho la 
necessità a questo punto di stamparlo.
Mi spiego meglio.
L'utente riceve la merce, la inserisce nel DB tramite maschera e a questo 
punto deve lanciare la stampa delle etichette che però avviene non tramite 
classico report ma tramite la creazione del famoso file di testo che 
chiamiamo prova.txt.
Devo trovare il comando che "lancia" il file prova.txt alla stampante xxxx, 
e poi se possibile dirgli anche il numero di copie che deve fare....
Spero di essere stato abbastanza chiaro
Grazie per l'aiuto
Massimo 

Massimo Pallavicini ha scritto:

La funzione API ShellExecute ti da la possibilità di poter usare
una parola riservata "PRINTTO" con la quale puoi inviare il file
direttamente alla stampante.
Il più è vedere se l'applicativo, inteso come File associato lo
prevede(se è un Txt direi di si)...!
Lo vedi anche se provi ad eseguire il DRAG_DROP del file sulla
stampante.
Quì ti spiega come verificarlo:
http://tinyurl.com/3gnlx
 Pid = ShellExecute(lhwnd, "printto", "c:\File.txt", lsPrinter, 0&, 0)
dove lsPrinter contiene Printer DeviceName, DriverName & Port della
stampante di destinazione.
Ovviamente si può usare anche ShellExecuteEx:
Private Sub PrintFile( _
    ByVal FileToPrint As String, _
    ByVal PrinterName As String, _
    ByVal DriverName As String, _
    ByVal PortName As String)
    Dim Ret As Long
    Dim lpExecInfo As SHELLEXECUTEINFO
    Dim Verb As String
    Verb = IIf(PrinterName = vbNullString, "print", "printto")
    lpExecInfo.cbSize = Len(lpExecInfo)
    lpExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS
    lpExecInfo.hwnd = Me.hwnd
    lpExecInfo.lpVerb = Verb
    lpExecInfo.lpFile = FileToPrint
    lpExecInfo.lpParameters = _
      Chr(34) & PrinterName & Chr(34) & " " & _
      Chr(34) & DriverName & Chr(34) & " " & _
      Chr(34) & PortName & Chr(34)
    lpExecInfo.lpDirectory = vbNullString
    lpExecInfo.nShow = SW_SHOWMINNOACTIVE
    lpExecInfo.hInstApp = 0&
    '  Optional fields
    lpExecInfo.lpIDList = 0&
    lpExecInfo.lpClass = vbNullString
    lpExecInfo.hkeyClass = 0&
    lpExecInfo.dwHotKey = 0&
    lpExecInfo.hIcon = 0&
    lpExecInfo.hProcess = 0&
    Ret = ShellExecuteEx(lpExecInfo)
    If Ret = 0 Then
        MsgBox "Problems with printing"
        Exit Sub
    End If
    Ret = WaitForSingleObject(lpExecInfo.hProcess, 100)
    Do
        Ret = WaitForSingleObject(lpExecInfo.hProcess, 0)
    Loop Until Ret <> WAIT_TIMEOUT
    MsgBox "Printing has finished"
End Sub
Per la stampante ti appoggi all'Oggetto printer e leggi la Stampante di
Default
ed invii il nome alla funzione.
@Alex

 L'utente riceve la merce, la inserisce nel DB tramite maschera e a questo













@Alex
Caspita Alex, questo problema è più grosso di me......!!!
Con tutta onestà le API non le ho mai usate e quant da te scritto non so 
proprio come utilizzarlo......
Tant'è che una soluzione la devo trovare a tutti i costi, non è che c'è una 
scorciatoia...?!?!?!?!
Massimo 

 Massimo
Ti basta valorizzare bene C:\file.txt il resto della soluzione è solo un
metodo alternativo
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

 Massimo
Scusa ho dato per scontato un minimo di conoscenza.....
Come ti ha suggerito MAssimiliano basta questa chiamata:
Pid = ShellExecute(lhwnd, "printto", "c:\File.txt", lsPrinter, 0&, 0)
Ora il problema è recuperare la Stampante:
strPrinterpredef = Application.Printer.DeviceName
Quindi il tutto si riassume in questo codice:
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
Dim Pid as Long
Pid = ShellExecute(Me.hwnd, _
                             "printto", _
                             "c:\File.txt", _
                             Application.Printer.DeviceName, _
                             0&, 0) 
Ciao
@Alex

 ha scritto nel messaggio
news:1158836594....@d34g2000cwd.googlegroups.com...
Massimo Pallavicini ha scritto:





strPrinterpredef = Application.Printer.DeviceName



Ciao
@Alex
Alex perdonami ma il codice che hai scritto dove va inserito....?!?! perchè
non viene chiusa da end function....???
Insomma come hai capito non sono il mio pane quotidiano le API...... ed
infatti tutte le volte che sento la persona che mi ha chiesto il database lo
insulto  per bene......:))))
Un ultima cosa se ho ben capito non è possibile passare anche il numero di
copie da stampare ......  o sbaglio???
Grazie
Massimo

                              0&, 0) 
 
è una funzione....???? e se si come mai non la si chiude con end
function....?!?!?!? 
Comunque sia ho difficoltà a capire come richiamarla la funzione ......
Insomma come hai ben capito non so come muovermi, non per nulla tutte le
volte che sento la persona che mi ha commissionato questop progetto lo
insulto.......:)))))
Grazie per l'aiuto
Massimo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Maxus68 ha scritto:

Allora vediamo di capirci....!
La chiamata API è questa dichiarazione che vamessa nella parte del
Modulo VBA
non appartenente ad eventi o metodi privati... in sostanza va in alto e
dichiarata come
Private.
Option Compare Database
Option Explicit
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
Alternativa è dichiararla Public in un Modulo, in modo da poterla
richiamare da più punti.
Questa chiamata non è una Funzione VBA pertanto non va terminata con
End Function
Per capire le API puoi scaricare il mio Tutorial, ma poi serve la
voglia di leggerlo....!
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=232
Detto questo devi richiamarla su un CLICK ad esempio, quindi
predisporrai un Button
e su Evento Click:
Private Sub NomeButton_Click()
Dim Pid as Long
 Pid = ShellExecute(Me.hwnd, _
                              "printto", _
                              "c:\File.txt", _
                              Application.Printer.DeviceName, _
                              0&, 0)
End Sub
A quanto mi risulta non puoi definire il numero di copie in stampa, ma
puoi sempre fare un ciclo e ripetere la chiamata N volte, solo che in
questo caso sei costretto ad usare il codice più complesso che ho
postato all'inizio poichè potrebbe dare problemi accavallare le
stampe, quindi si lancia la 2° solo terminata la 1°.....
Saluti
@Alex








http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=232

Private Sub NomeButton_Click()
Dim Pid as Long


Saluti
@Alex
Grazie Alex, adesso è tutto più chiaro.
A dire la verità avevo intuito che la chiamata in API andava messa 
all'inizio ........
Comunque adesso visto il suggerimento scarico il tuo tutorial e mi metto a 
leggerlo
Grazie x la pazienza che hai dimostrato.
Massimo Pallavicini 

Alessandro, ho seguito i tuoi consigli ma purtroppo l'applicazione non 
funziona ....... o meglio non stampa, ma quello che è più strano è che non 
restituisce errori.
Non vorrei fosse la mancanza di qualche parametro (ad esempio la porta 
stampante etc...)
Ciao
Massimo 

Alessandro ho seguito i tuoi suggerimenti ma purtroppo l'applicazione non 
funziona ........ o meglio non stampa, ed inoltre quello che più è strano 
non restituisce alcun errore....
E come se mancasse qualche parametro (porta etc...)
Ciao
Massimo

Massimo Pallavicini ha scritto:

Scaricati il DEMO nel mio sito relativo alla Stampa Batch, passagli il
Nome File
e vedi.... quello funziona...!
@Alex

 ha scritto nel messaggio 
news:1158918734.9...@b28g2000cwb.googlegroups.com...
Massimo Pallavicini ha scritto:


@Alex
Si funziona perfettamente ......
Ma toglimi una curisoità anche a te restituisce questo messaggio: "Il file 
no è associato a nessun programma x l'esecuzione dell'operazione. Creare un 
associazione in Opzioni Cartello nel Pannello di controllo"
Ciao
Massimo 

 Massimo
@Alex