Newsgroup: it.comp.lang.visual-basic
Titolo: ancora sull'oggetto printer

Salve a tutto il NG
ho un problema che vorrei sottoporvi.
ho scritto un programma che in alcune procedure deve andare a stampare solo 
su una determinata stampante, mentre in altre lascia all'utente la scelta 
della stampante da utlizzare.
per le stampanti forzate ho usato una combo nella quale elenco le stampanti, 
ho chiamato una di queste in una certa maniera, poi dico al sistema di 
mettere
set printer = combo1.text
e printer diventa la stampante indicata nella combo1 (che io poi nascondo in 
maniera che l'utente in quella procedura non possa cambiarla)
Il problema nasce nel momento in cui torno alle procedure con le stampe 
libere, dove pensavo di utilizzare commondialog box: questo con il metodo 
showprinter mi fa selezionare la stampante (poco importa se diventa quella 
di default), ma ho notato che dopo che č stata settata la stampante con il 
sistema precedente, anche usando commondialg.showprinter la printer resta 
quella impostata con il metodo precedente, anche se sono uscito dalla 
procedura che faceva questo.
Come posso risolverla? devo per forza utilizzare il primo metodo in tutto il 
programma lasciando la scelta all'utente dove fosse possibile? C'č un 
sistema per fare in modo che la stampante scelta nel 
commondialg1.showprinter venga effettivamente impostata anche se prima ho 
usato un metodo differente?
Grazie a tutti


Rammenta che GuGl č una fonte di informazioni enorme...
http://tinyurl.com/39cujq
-> GbC|
www.gbcweb.com
www.chiappori.com
 

 Rammenta che GuGl è una fonte di informazioni enorme...


 settare, ma come posso fare?
Io uso questa funzione per settare una stampante (e ripristinarla). Passo
il nome della stampante.
Public Function ImpostaStampante(nomeSTAMPANTE As String) As Boolean
'---------------------------------------------------------------------------------------
' Procedure : ImpostaStampante
' DateTime  : 20/12/2006 12.29
' Author    : Andrea
' Purpose   : Imposta una stampante come predefinita a seconda del nome
'---------------------------------------------------------------------------------------
'
    Dim l As Integer, a As String
    Dim Ret As Long
On Error GoTo ImpostaStampante_Error
    ImpostaStampante = False
 
    For l = 0 To Printers.Count - 1
        a = Printers(l).DeviceName
        If UCase(nomeSTAMPANTE) = UCase(a) Then
            Set Printer = Printers(l)
            Ret = WriteProfileString("Windows", "Device", _
                        nomeSTAMPANTE)
            SetDefaultPrinter nomeSTAMPANTE & Chr(0)
            Ret = SendNotifyMessage(HWND_BROADCAST, _
                        WM_SETTINGCHANGE, 0, 0)
            ImpostaStampante = True
            Exit For
        End If
    Next l
  On Error GoTo 0
  Exit Function
ImpostaStampante_Error:
  MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedura
ImpostaStampante di Modulo Stampanti"
End Function
Piů ti servono (ALCUNE o Tutte prova te) di queste dichiarazioni:
Private Declare Function WriteProfileString Lib "kernel32.dll" _
    Alias "WriteProfileStringA" (ByVal lpszSection As String, _
    ByVal lpszKeyName As String, ByVal lpszString As String) As Long
Private Declare Function SendNotifyMessage Lib "user32" _
    Alias "SendNotifyMessageA" (ByVal hwnd As Long, _
    ByVal msg As Long, ByVal wParam As Long, _
    ByVal lParam As Long) As Long
Private Declare Function SetDefaultPrinter Lib "winspool.drv" _
    Alias "SetDefaultPrinterA" (ByVal pszPrinter As String) As Boolean
Private Const WM_SETTINGCHANGE = &H1A
Private Const HWND_BROADCAST = &HFFFF&