Differenze tra le versioni di "Stampare il contenuto di una DrawingArea"

Da Gambas-it.org - Wikipedia.
Riga 4: Riga 4:
 
* viene richiamato l'evento ''_Draw()'' della Classe ''Printer'' per ogni pagina da stampare;
 
* viene richiamato l'evento ''_Draw()'' della Classe ''Printer'' per ogni pagina da stampare;
 
* sia per disegnare nella ''DrawingArea'' sia per stamparea il disegno si richiama una sub-procedura, nella quale sono presenti i necessari valori ed impostazioni.
 
* sia per disegnare nella ''DrawingArea'' sia per stamparea il disegno si richiama una sub-procedura, nella quale sono presenti i necessari valori ed impostazioni.
 +
 +
 +
===Esempio generico===
 
  '''Public''' Sub DrawingArea1_Draw()
 
  '''Public''' Sub DrawingArea1_Draw()
 
   
 
   
Riga 49: Riga 52:
 
   
 
   
 
  '''End'''
 
  '''End'''
 +
 +
 +
==Stampare garantendo la corrispondenza fra testo mostrato sulla ''DrawingArea'' e testo stampato==
 +
Nel caso sia necessaria una precisa corrispondenza fra quanto mostrato sulla ''DrawingArea'' e quanto stampato, è possibile utilizzare il seguente codice esemplificativo: ||#Note|1||
 +
'''Public''' Sub Form_Show()
 +
 +
  Me.Center
 +
 
 +
  DrawingArea1.Resize(1653, 2338)  <FONTcolor=gray>' ''Dimensioni in pixel di un foglio A4 a 200 DPI''</font>
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub DrawingArea1_Draw()
 +
 
 +
  Paint.Begin(DrawingArea1)
 +
   
 +
  disegna()
 +
 
 +
  Paint.End
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub disegna()
 +
 
 +
  Dim X, Y As Float
 +
  Dim dx, dy, DXT As Float
 +
  Dim IH, IW As Float
 +
 
 +
 +
<FONTcolor=gray>' ''Calcolo risolutore per linee e quadrati:''</font>
 +
  dx = DrawingArea1.W / 211
 +
  dy = DrawingArea1.H / 297
 +
 +
 
 +
  X = 20 * dx  <FONTcolor=gray>' ''bordo di 20 mm''</font>
 +
  Y = 20 * dy  <FONTcolor=gray>' ''bordo di 20 mm''</font>
 +
 +
  Paint.Font.Name = "Ubuntu"
 +
 +
  Paint.Font.Size = RIDIMENSIONA(11)
 +
 +
  Paint.drawText("Testo Qualsiasi", X, y + Paint.Font.TextHeight("Testo Qualsiasi"))
 +
 +
<FONTcolor=gray>' ''Disegnamo un rettangolo intorno al testo,''
 +
' ''per verificare la corrispondenza delle dimensioni del testo mostrato sullo schermo''
 +
' ''all'interno della "DrawingArea" e le dimensioni del testo stampato:''</font>
 +
  Paint.Rectangle(X, Y, Paint.Font.TextWidth("Testo Qualsiasi"), Paint.Font.TextHeight("Testo Qualsiasi"))
 +
  Paint.Stroke
 +
 +
'''End'''
 +
 +
 +
'''Public''' Function RIDIMENSIONA(size As Integer) As Integer
 +
 
 +
  If Paint.Device = DrawingArea1 Then
 +
    Return size * 2
 +
  Else
 +
    Return size
 +
  Endif
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub Button2_Click()
 +
 +
  If Printer1.Configure() Then Return
 +
   
 +
  With Printer1
 +
    .FullPage = True
 +
    .Orientation = 0
 +
    .Resolution = 200
 +
    .PaperHeight = 297
 +
    .PaperWidth = 211
 +
    <FONT color=gray>'''.OutputFile = "/tmp/file.pdf"'''  ' ''Se si vuole una stampa su file .PDF, attivare questa riga''</font>
 +
    .Print
 +
  End With
 +
 +
'''End'''
 +
 +
 +
'''Public''' Sub Printer1_Begin()
 +
 
 +
  disegna()
 +
 
 +
'''End'''
 +
 +
 +
 +
=Note=
 +
[1] Il codice è stato realizzato dall'utente [http://www.gambas-it.org/smf/index.php?action=profile;u=28 fsurfing] del forum di [http://www.gambas-it.org www.gambas-it.org]

Versione delle 09:33, 2 feb 2014

Per stampare il contenuto grafico presente in una DrawingArea, si potrà attuare il seguente procedimento:

  • si provvede a disegnare e scrivere all'interno della DrawingArea mediante l'evento _Draw();
  • si imposta la fase di stampa con la Classe Printer;
  • viene richiamato l'evento _Draw() della Classe Printer per ogni pagina da stampare;
  • sia per disegnare nella DrawingArea sia per stamparea il disegno si richiama una sub-procedura, nella quale sono presenti i necessari valori ed impostazioni.


Esempio generico

Public Sub DrawingArea1_Draw()

' Richiamiamo ai fini del disegno sulla "DrawingArea" le impostazioni presenti nella sub-procedura":
  DisegnoStampa()
  
End


Public Sub Button1_Click()

  With Printer1
    .Configure
    .Orientation = 0
    .Paper = 2
    .Resolution = Desktop.Resolution
    .GrayScale = False
' Volendo, si può stampare/creare un file .pdf o .ps, anziché stampare
' su foglio con la stampante, inserendo questa riga di comando:
  ' .OutputFile = "percorso_mio_file.pdf"
    .Print
  End With

End


Public Sub Printer1_Draw()

' Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":
  DisegnoStampa()

End


Private Procedure DisegnoStampa()

 With Paint
   .Brush = Paint.Color(Color.Red)
   .MoveTo(200, 200)
   .RelLineTo(0, 100)
   .Stroke
   .DrawText("Testo qualsiasi", 10, 10, 20, 20)
   .End
 End With

End


Stampare garantendo la corrispondenza fra testo mostrato sulla DrawingArea e testo stampato

Nel caso sia necessaria una precisa corrispondenza fra quanto mostrato sulla DrawingArea e quanto stampato, è possibile utilizzare il seguente codice esemplificativo: ||#Note|1||

Public Sub Form_Show()

 Me.Center
 
 DrawingArea1.Resize(1653, 2338)   <FONTcolor=gray>' Dimensioni in pixel di un foglio A4 a 200 DPI</font>
 
End


Public Sub DrawingArea1_Draw()
 
  Paint.Begin(DrawingArea1)
   
  disegna()
  
  Paint.End
 
End


Public Sub disegna()
 
 Dim X, Y As Float
 Dim dx, dy, DXT As Float
 Dim IH, IW As Float
 

<FONTcolor=gray>' Calcolo risolutore per linee e quadrati:</font>
  dx = DrawingArea1.W / 211
  dy = DrawingArea1.H / 297

 
  X = 20 * dx   <FONTcolor=gray>' bordo di 20 mm</font>
  Y = 20 * dy   <FONTcolor=gray>' bordo di 20 mm</font>

  Paint.Font.Name = "Ubuntu"

  Paint.Font.Size = RIDIMENSIONA(11)

  Paint.drawText("Testo Qualsiasi", X, y + Paint.Font.TextHeight("Testo Qualsiasi"))

<FONTcolor=gray>' Disegnamo un rettangolo intorno al testo,
' per verificare la corrispondenza delle dimensioni del testo mostrato sullo schermo
' all'interno della "DrawingArea" e le dimensioni del testo stampato:</font>
  Paint.Rectangle(X, Y, Paint.Font.TextWidth("Testo Qualsiasi"), Paint.Font.TextHeight("Testo Qualsiasi"))
  Paint.Stroke

End


Public Function RIDIMENSIONA(size As Integer) As Integer
 
  If Paint.Device = DrawingArea1 Then
    Return size * 2
  Else
    Return size
  Endif
 
End


Public Sub Button2_Click()

  If Printer1.Configure() Then Return
   
  With Printer1
    .FullPage = True
    .Orientation = 0
    .Resolution = 200
    .PaperHeight = 297
    .PaperWidth = 211
    .OutputFile = "/tmp/file.pdf"  ' Se si vuole una stampa su file .PDF, attivare questa riga
    .Print
  End With

End


Public Sub Printer1_Begin()
 
 disegna()
 
End


Note

[1] Il codice è stato realizzato dall'utente fsurfing del forum di www.gambas-it.org