Newsgroup: it.comp.lang.visual-basic
Titolo: [?] dialogo stampa formato

Vorrei settare su una finestra di dialogo stampa il formato del foglio a
seconda delle mie esigenze (a3, a4, ecc.) impostando la finestra da codice e
quindi in base a specifiche caratteristiche del file da stampare affichè
nella combobox della finestra di dialogo compaia il formato da me impostato
con il codice. Spero di essere stato chiaro. Grazie a chi potrà aiutarmi.
Ciao Francesco


Se la selezion viene fatta dal programma e non e' consentita
all' utente, a che serve una finestra di dialogo ?
ciao, hal

 ha scritto

a illuderlo :)
com.monolog.ocx

com.monolog.ocx
lol
ecco una nuova classe per .net :)

 ecco una nuova classe per .net :)
piu' che net, web...


Perchè in base al tipo di file aperto dall'utente cambia  il formato del
foglio poichè l'utente potrebbe scegliere il formato sbagliato e il file non
verrebbe stampato correttamente mentre settandolo da codice l'utente non
dovrebbe preoccuparsi di cambiare il formato poichè è già selezionato quello
giusto. E' possibile? Perchè non ho trovato nulla in merito...
Ciao Francesco

 piu' che net, web...
Wow! Mi ha risposto oltre che il famigerato hal1961 anche pal.... da non
crederci!!!
Ciao Francesco
P.S. non è che questa è l'ultima volta che mi rispondete?


appunto, quindi, scusa se insisto, non serve un dialogo.
o intendevi dell' altro ?
ciao, hal

P.S. non è che questa è l'ultima volta che mi rispondete?
figurati se ci lasciamo scappare un tipo simpatico ;-)

 ciao, hal
Effettivamente il dialogo per questo non serve a molto perchè l'utente deve
premere solo "ok" però permette all'utente di fare altre scelte (stampante,
orientamento, ecc..), mentre questa vorrei che fosse settata da codice (per
non creare problemi)e che compaia anche il settaggio nella finestra di
dialogo quindi in base al file aperto deve stampare in un formato o
nell'altro.
Ciao Francesco


Grazie per il simpatico!
Ciao Francesco

 P.S. non è che questa è l'ultima volta che mi rispondete?
se ti vanno bene risposte come queste... :)

 predefinita , io tramite codice, prima di ogni stampa.
Vecchio post. Sto pensando di utilizzarlo come firma.
=======================================
'Costanti per la struttura DevMode
Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
'Costanti per security e access rights (NT)
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const PRINTER_ACCESS_ADMINISTER = &H4
Private Const PRINTER_ACCESS_USE = &H8
Private Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)
'Costanti di selezione usati da DevMode
Private Const DM_MODIFY = 8
Private Const DM_IN_BUFFER = DM_MODIFY
Private Const DM_COPY = 2
Private Const DM_OUT_BUFFER = DM_COPY
Private Const DM_DUPLEX = &H1000&
Private Const DMDUP_SIMPLEX = 1
Private Const DMDUP_VERTICAL = 2
Private Const DMDUP_HORIZONTAL = 3
Private Const DM_ORIENTATION = &H1&
Private PageDirection As Integer
'------USER DEFINED TYPES
'La struttura DevMode contiene i parametri di stampa.
'Questo rappresenta solo la porzione pubblica della struttura DevMode.
'  La struttura DevMode completa contiene sezione privata di lunghezza
'  variabile che cambia in contenuto in base al driver di stampa.
'NON usare mai questo UDT per chiamate dirette all'API.
'  Occorre sempre combinarlo in una struttura DevMode completa e utilizzare
'  questa per la chiamata.
Private Type DEVMODE
    dmDeviceName As String * CCHDEVICENAME
    dmSpecVersion As Integer
    dmDriverVersion As Integer
    dmSize As Integer
    dmDriverExtra As Integer
    dmFields As Long
    dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
    dmScale As Integer
    dmCopies As Integer
    dmDefaultSource As Integer
    dmPrintQuality As Integer
    dmColor As Integer
    dmDuplex As Integer
    dmYResolution As Integer
    dmTTOption As Integer
    dmCollate As Integer
    dmFormName As String * CCHFORMNAME
    dmLogPixels As Integer
    dmBitsPerPel As Long
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
    dmICMMethod As Long        ' // Windows 9x
    dmICMIntent As Long        ' // Windows 9x
    dmMediaType As Long        ' // Windows 9x
    dmDitherType As Long       ' // Windows 9x
    dmReserved1 As Long        ' // Windows 9x
    dmReserved2 As Long        ' // Windows 9x
End Type
Private Type PRINTER_DEFAULTS
'Nota:
'  La definizione della struttura Printer_Defaults contenuta
'  nell'API viewer di VB5 non è corretta
'  -> pDevMode è stato cambiato in LONG.
    pDatatype As String
    pDevMode As Long
    DesiredAccess As Long
End Type
'------DICHIARAZIONI
Private Declare Function OpenPrinter Lib "winspool.drv" _
            Alias "OpenPrinterA" ( _
            ByVal pPrinterName As String, _
            phPrinter As Long, _
            pDefault As PRINTER_DEFAULTS) As Long
Private Declare Function SetPrinter Lib "winspool.drv" _
            Alias "SetPrinterA" ( _
            ByVal hPrinter As Long, _
            ByVal Level As Long, _
            pPrinter As Any, _
            ByVal Command As Long) As Long
Private Declare Function GetPrinter Lib "winspool.drv" _
            Alias "GetPrinterA" ( _
            ByVal hPrinter As Long, _
            ByVal Level As Long, _
            pPrinter As Any, _
            ByVal cbBuf As Long, _
            pcbNeeded As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
            Alias "RtlMoveMemory" ( _
            hpvDest As Any, _
            hpvSource As Any, _
            ByVal cbCopy As Long)
Private Declare Function ClosePrinter Lib "winspool.drv" ( _
            ByVal hPrinter As Long) As Long
'La dichiarazione di DocumentProperties è stata modificata :
'  i parametri pDevModeOutput e pDevModeInput sono in genere dichiarati ByRef.
'  Vengono qui dichiarati ByVal allo scopo di utilizzare la struttura Printer_Info_2.
'  La struttura contiene una variabile di tipo LONG che riporta il puntatore alla
'  struttura DevMode. Il valore LONG deve essere passato ByVal.
'  Generalmente la funzione viene chiamata con un array di byte che contengono la
'  struttura DevMode; l'array di byte viene passato ByRef.
Private Declare Function DocumentProperties Lib "winspool.drv" _
            Alias "DocumentPropertiesA" ( _
            ByVal hwnd As Long, _
            ByVal hPrinter As Long, _
            ByVal pDeviceName As String, _
            ByVal pDevModeOutput As Any, _
            ByVal pDevModeInput As Any, _
            ByVal fMode As Long) As Long
Private Sub SetOrientation(NewSetting As Long, chng As Integer, ByVal frm As Form)
Dim PrinterHandle As Long
Dim PrinterName As String
Dim pd As PRINTER_DEFAULTS
Dim MyDevMode As DEVMODE
Dim Result As Long
Dim Needed As Long
Dim pFullDevMode As Long
Dim pi2_buffer() As Long   ' Blocco di memoria per la struttura Printer_Info_2
   PrinterName = Printer.DeviceName
   If PrinterName = "" Then
      Exit Sub
   End If
   pd.pDatatype = vbNullString
   pd.pDevMode = 0&
   'Printer_Access_All è richiesto per la sicurezza in NT
   pd.DesiredAccess = PRINTER_ALL_ACCESS
   Result = OpenPrinter(PrinterName, PrinterHandle, pd)
   'la prima chiamata a GetPrinter restituisce la grandezza, in byte, del buffer richiesto.
   'Il valore viene diviso per 4 dato che ogni elemento di pi2_buffer è un long.
   Result = GetPrinter(PrinterHandle, 2, ByVal 0&, 0, Needed)
   ReDim pi2_buffer((Needed \ 4))
   Result = GetPrinter(PrinterHandle, 2, pi2_buffer(0), Needed, Needed)
   'Il settimo elemento di pi2_buffer è il puntatore ad un blocco di memoria
   'che contiene la struttura DevMode (inclusa la porzione PRIVATE).
   pFullDevMode = pi2_buffer(7)
   'Copia la porzione pubblica della struttura DevMode
   'completa nella struttura DevMode utile
   Call CopyMemory(MyDevMode, ByVal pFullDevMode, Len(MyDevMode))
   'effettua le modifiche del caso
   MyDevMode.dmDuplex = NewSetting
   MyDevMode.dmFields = DM_DUPLEX Or DM_ORIENTATION
   MyDevMode.dmOrientation = chng
   'Ricopia la struttura DevMode nella strutura completa
   Call CopyMemory(ByVal pFullDevMode, MyDevMode, Len(MyDevMode))
   'Copia le modifiche alla porzione pubblica di DevMode nella porzione privata
   Result = DocumentProperties(frm.hwnd, _
                PrinterHandle, _
                PrinterName, _
                ByVal pFullDevMode, _
                ByVal pFullDevMode, _
                DM_IN_BUFFER Or DM_OUT_BUFFER)
   'Aggiorna le proprietà predefinite
   Result = SetPrinter(PrinterHandle, 2, pi2_buffer(0), 0&)
   Call ClosePrinter(PrinterHandle)
   'Nota: Dopo l'esecuzione di Set Printer(), le modifiche vengono applicate
   '      solo alla stampante di sistema - non aggiornano l'oggetto Printer
   '      di VB. Quindi si può rendere necessario resettare l'oggetto printer
   '      per conformarlo alle caratteristiche impostate tramite DevMode.
   Dim p As Printer
   For Each p In Printers
      If p.DeviceName = PrinterName Then
         Set Printer = p
         Exit For
      End If
   Next p
   Printer.Duplex = MyDevMode.dmDuplex
End Sub
Public Sub PrinterOrientation_Landscape(ByVal frm As Form)
   PageDirection = 2
   Call SetOrientation(DMDUP_SIMPLEX, PageDirection, frm)
End Sub
Public Sub ResetPrinterOrientation(ByVal frm As Form)
   If PageDirection = 1 Then
       PageDirection = 2
   Else
       PageDirection = 1
   End If
   Call SetOrientation(DMDUP_SIMPLEX, PageDirection, frm)
End Sub
Public Sub PrinterOrientation_Portrait(ByVal frm As Form)
    PageDirection = 1
    Call SetOrientation(DMDUP_SIMPLEX, PageDirection, frm)
End Sub


Errata corrige:
Wow! Mi hanno risposto oltre che il famigerato hal1961 anche il famigerato
pal.... da non crederci!
(volevo scrivere anche il programmatore piů bravo in assoluto, il re del VB,
il principe delle Api... ma non l'ho fatto per non fare un torto a hal1961
;-))))
Ciao Francesco
P.S. Penso che cosě vada bene!


[cut]
Grazie! Spero che mi sarà d'aiuto.
Ciao Frncesco


Funge e come!! Dovrebbero farti un monumento!!!;)))
Ciao Francesco

Funge e come!! Dovrebbero farti un monumento!!!;)))
Io mi tocco ;-)
Spesso il modello non e' in grado di contemplare l' opera :-P
ciao, hal