Newsgroup: it.comp.lang.visual-basic
Titolo: [!] Stampa con le API

<ironic>
Se state cercando un modo di ottenere un foglio con sopra disegnate
delle api, questo post non fa per voi.
</ironic>
In una sera insonne, anziche' andare a dormire mi sono messo a fare
esperimenti col VB per cercare un modo per ottenere un oggetto Printer
dato un handle ad un DC della stampante.
Naturalmente non ci sono riuscito, ma da quella sera ne e' scaturito
questo esempio di come eseguire una stampa utilizzando le API.
Sperando che possa servire a qualcuno.
Creare un nuovo progetto.
Sul form mettere un CommandButton chiamato cmd
e un CommonDialog chiamato dlgPrn.
Option Explicit
Private Const DT_CENTER As Long = &H1
Private Const DT_VCENTER As Long = &H4
Private Const DT_WORDBREAK As Long = &H10
Private Const DT_SINGLELINE As Long = &H20
Private Const DT_WORD_ELLIPSIS As Long = &H40000
Private Const DT_END_ELLIPSIS As Long = &H8000
Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type
Private Type DOCINFO
   cbSize As Long
   lpszDocName As String
   lpszOutput As String
   lpszDatatype As String
   fwType As Long
End Type
Private Declare Function StartDoc Lib "gdi32" Alias "StartDocA" ( _
      ByVal hDC As Long, _
      lpDI As DOCINFO) As Long
Private Declare Function EndDoc Lib "gdi32" ( _
      ByVal hDC As Long) As Long
Private Declare Function StartPage Lib "gdi32" ( _
      ByVal hDC As Long) As Long
Private Declare Function EndPage Lib "gdi32" ( _
      ByVal hDC As Long) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" ( _
      ByVal hDC As Long, _
      ByVal X As Long, _
      ByVal Y As Long, _
      ByVal lpString As String, _
      ByVal nCount As Long) As Long
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" ( _
      ByVal hDC As Long, _
      ByVal lpStr As String, _
      ByVal nCount As Long, _
      lpRect As RECT, _
      ByVal wFormat As Long) As Long
Private Declare Function Rectangle Lib "gdi32" ( _
      ByVal hDC As Long, _
      ByVal nLeftRect As Long, _
      ByVal nTopRect As Long, _
      ByVal nRightRect As Long, _
      ByVal nBottomRect As Long) As Long
Private Sub cmd_Click()
   Dim bRet As Boolean
   Dim iRet As Long
   Dim hDC As Long
   Dim DI As DOCINFO
   Dim Area As RECT
   'Per prima cosa ottengo un hDC della stampante
   'dalla finestra di selezione stampanti
   dlgPrn.PrinterDefault = False
   dlgPrn.Flags = cdlPDReturnDC
   dlgPrn.ShowPrinter
   hDC = dlgPrn.hDC
   'Quindi riempio la struttura DOCINFO
   DI.cbSize = LenB(DI)
   DI.lpszDocName = "prova"   'Questo č il nome del documento
   DI.lpszOutput = vbNullString
   DI.lpszDatatype = vbNullString
   DI.fwType = 0
   'Inizializzo la stampa
   iRet = StartDoc(hDC, DI)
   iRet = StartPage(hDC)
   'Eseguo delle operazioni di stampa
   bRet = TextOut(hDC, 30, 30, "ciao", 4)
   Area.Top = 100
   Area.Bottom = 200
   Area.Left = 100
   Area.Right = 700
   bRet = Rectangle(hDC, Area.Left, Area.Top - 10, _
         Area.Right, Area.Bottom - 10)
   iRet = DrawText(hDC, "questo č un esempio di una riga che va a capo", _
         45, Area, DT_CENTER Or DT_WORDBREAK)
   'Termino la stampa
   iRet = EndPage(hDC)
   iRet = EndDoc(hDC)
End Sub
-- 
Samuele Battarra
prova il mio newsreader:
http://digilander.iol.it/battarsa/programmi/news/
ora e' disponibile la versione 1.2.9

e un CommonDialog chiamato dlgPrn.
Rivolgersi a Samuele, eseguire quanto detto sopra, salvare, zippare,
quindi inviare il tutto al WM del SC...
^___^
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

 dato un handle ad un DC della stampante.
Ottimo post, grazie.
Ciao
*Roby*
P.S.
I ringraziamenti vanno ovviamente sia a te che alla tua insonnia. :-)