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

Da Gambas-it.org - Wikipedia.
Riga 23: Riga 23:
 
     .Resolution = Desktop.Resolution
 
     .Resolution = Desktop.Resolution
 
     .GrayScale = False
 
     .GrayScale = False
  <FONT color=gray>' ''Volendo, si può stampare/creare un file .pdf o .ps, anziché stampare''
+
  <FONT color=gray>' ''Volendo, si può stampare/creare un file .pdf o .ps, anziché stampare su foglio con la stampante, inserendo questa riga di comando:''
' ''su foglio con la stampante, inserendo questa riga di comando:''
 
 
   ' '''''.OutputFile = "/percorso/del/mio/file.pdf"'''''</font>
 
   ' '''''.OutputFile = "/percorso/del/mio/file.pdf"'''''</font>
 
     .Print
 
     .Print
Riga 56: Riga 55:
  
 
==Stampare garantendo la corrispondenza fra testo mostrato sulla ''DrawingArea'' e testo stampato==
 
==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]]|
+
Nel caso sia necessaria una precisa corrispondenza fra quanto mostrato sulla ''DrawingArea'' e quanto stampato, è possibile utilizzare il seguente codice esemplificativo: <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
 
  '''Public''' Sub Form_Show()
 
  '''Public''' Sub Form_Show()
 
   
 
   
Riga 96: Riga 95:
 
   Paint.drawText("Testo Qualsiasi", X, y + Paint.Font.TextHeight("Testo Qualsiasi"))
 
   Paint.drawText("Testo Qualsiasi", X, y + Paint.Font.TextHeight("Testo Qualsiasi"))
 
   
 
   
  <FONT color=gray>' ''Disegnamo un rettangolo intorno al testo,''
+
  <FONT color=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>
' ''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.Rectangle(X, Y, Paint.Font.TextWidth("Testo Qualsiasi"), Paint.Font.TextHeight("Testo Qualsiasi"))
 
   Paint.Stroke
 
   Paint.Stroke
Riga 322: Riga 319:
 
        
 
        
 
  '''End'''
 
  '''End'''
 
  
  

Versione delle 20:40, 24 mar 2021

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 stampare 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 = .Portrait
    .Paper = .A4
    .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/del/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: [Nota 1]

Public Sub Form_Show()

 Me.Center
 
 DrawingArea1.Resize(1653, 2338)   ' Dimensioni in pixel di un foglio A4 a 200 DPI
 
End


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


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

' Calcolo risolutore per linee e quadrati:
  dx = DrawingArea1.W / 211
  dy = DrawingArea1.H / 297

 
  X = 20 * dx   ' bordo di 20 mm
  Y = 20 * dy   ' bordo di 20 mm

  Paint.Font.Name = "Ubuntu"

  Paint.Font.Size = RIDIMENSIONA(11)

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

' 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:
  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 Button1_Click()

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

End


Public Sub Printer1_Begin()
 
 disegna()
 
End


Stampare il contenuto di una determinata DrawingArea scelta fra 2 o più

Se sul Form sono presenti due o più oggetti DrawingArea e si intende stampare solo il contenuto di una DrawingArea fra quelle, si potrà adottare un codice del seguente tenore, che tende a riconfermare nelle funzioni e proprietà di stampa i dati del disegno utilizzati all'interno della DrawingArea prescelta:

Public Sub Form_Open()
 
 DrawingArea1.Name = "DrawingArea 1"
 DrawingArea2.Name = "DrawingArea 2"
 
' Assegna le due "DrawingArea" al medesimo Gruppo di Eventi:
 Object.Attach(DrawingArea1, Me, "DrAr")
 Object.Attach(DrawingArea2, Me, "DrAr")
   
End  
     
 
Public Sub DrAw_Draw()  
     
 With Paint  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(200, 200)  
   .RelLineTo(0, 200)  
   .Stroke  
   .DrawText("DrawingArea2", 200, 200, 20, 20)  
   .End  
 End With  
      
End  
     
     
Public Sub Button1_Click()  
     
 With Printer1  
   .Configure  
   .Orientation = .Portrait
   .Paper = .A4
   .Resolution = Desktop.Resolution  
   .GrayScale = False
' .OutputFile = "/tmp/prova.pdf"
   .Print  
 End With  
      
End  
     
     
Public Sub Printer1_Draw()  
     
 Dim n As Byte  
 
  n = Val(InputBox("Quale DrawingArea vuoi stampare ?"))  
     
' Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":
  Stampa(n)
     
End
     
     
Private Procedure Stampa(d As Byte)  
     
 Dim mx, my, rY, dx, dy As Integer  
 Dim dS As String  
     
 If d = 1 Then  
   mx = 100  
   my = 100  
   rY = 100  
   dX = 10  
   dY = 10  
   dS = DrawingArea1.Name
 Else  
   mx = 200  
   my = 200  
   rY = 200  
   dX = 200  
   dY = 200  
   dS = DrawingArea1.Name
 Endif  
     
 With Paint  
   .Begin(Printer1)  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(mx, my)  
   .RelLineTo(0, rY)  
   .Stroke  
   .DrawText(dS, dX, dY, 20, 20)  
   .End  
 End With  
     
End


Stampare il contenuto di due o più DrawingArea ciascuno su una pagina

Riprendendo il codice precedente, si stamperà il contenuto di ciascuna DrawingAea su una differente pagina.
Quindi in questo caso saranno stampate in totale 2 pagine: sulla prima sarà stampato il contenuto della prima DrawingAea, e sulla seconda pagina sarà stampato il contenuto della seconda DrawingAea.

Private n As Short


Public Sub Form_Open()
 
 DrawingArea1.Name = "DrawingArea 1"
 DrawingArea2.Name = "DrawingArea 2"
 
' Assegna le due "DrawingArea" al medesimo Gruppo di Eventi:
 Object.Attach(DrawingArea1, Me, "DrAr")
 Object.Attach(DrawingArea2, Me, "DrAr")
   
End  
     
 
Public Sub DrAw_Draw()  
     
 With Paint  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(200, 200)  
   .RelLineTo(0, 200)  
   .Stroke  
   .DrawText("DrawingArea2", 200, 200, 20, 20)  
   .End  
 End With  
      
End  
     
     
Public Sub Button1_Click()  
     
 With Printer1  
   .Configure  
   .Orientation = .Portrait
   .Paper = .A4
   .Resolution = Desktop.Resolution
' Imposta il numero delle pagine da stampare:
   .Count = 2
   .GrayScale = False
' .OutputFile = "/tmp/prova.pdf"
   .Print  
 End With  
      
End  
     
     
Public Sub Printer1_Draw()  
     
' Incrementa il numero della pagina da stampare (il numero della prima pagina da stampare non deve essere = 0):
 inc n
     
' Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":
 Stampa(n)
     
End
     
     
Private Procedure Stampa(d As Byte)  
     
 Dim mx, my, rY, dx, dy As Integer  
 Dim dS As String  
     
 If d = 1 Then  
   mx = 100  
   my = 100  
   rY = 100  
   dX = 10  
   dY = 10  
   dS = DrawingArea1.Name
 Else  
   mx = 200  
   my = 200  
   rY = 200  
   dX = 200  
   dY = 200  
   dS = DrawingArea1.Name
 Endif  
     
 With Paint  
   .Begin(Printer1)  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(mx, my)  
   .RelLineTo(0, rY)  
   .Stroke  
   .DrawText(dS, dX, dY, 20, 20)  
   .End  
 End With  
     
End


Note

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