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

Da Gambas-it.org - Wikipedia.
Riga 52: Riga 52:
 
   
 
   
 
  '''End'''
 
  '''End'''
 +
  
  
Riga 137: Riga 138:
 
    
 
    
 
  '''End'''
 
  '''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 in fase di mero disegno all'interno della ''DrawingArea'' prescelta:
 +
'''Public''' Sub DrawingArea1_Draw() 
 +
     
 +
  With Paint 
 +
    .Brush = Paint.Color(Color.Red) 
 +
    .MoveTo(100, 100) 
 +
    .RelLineTo(0, 100) 
 +
    .Stroke 
 +
    .DrawText("DrawingArea1", 10, 10, 20, 20) 
 +
    .End 
 +
  End With 
 +
     
 +
'''End''' 
 +
     
 +
 +
'''Public''' Sub DrawingArea2_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 = 0 
 +
    .Paper = 2 
 +
    .Resolution = Desktop.Resolution 
 +
    .GrayScale = False 
 +
    .Print 
 +
  End With 
 +
     
 +
'''End''' 
 +
     
 +
     
 +
'''Public''' Sub Printer1_Draw() 
 +
     
 +
  Dim n As Byte 
 +
 
 +
  n = Val(InputBox("Quale DrawingArea vuoi stampare ?")) 
 +
     
 +
<FONT Color=gray>' ''Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":''</font>
 +
  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 = "1" 
 +
  Else 
 +
    mx = 200 
 +
    my = 200 
 +
    rY = 200 
 +
    dX = 200 
 +
    dY = 200 
 +
    dS = "2" 
 +
  Endif 
 +
     
 +
  With Paint 
 +
    .Begin(Printer1) 
 +
    .Brush = Paint.Color(Color.Red) 
 +
    .MoveTo(mx, my) 
 +
    .RelLineTo(0, rY) 
 +
    .Stroke 
 +
    .DrawText("DrawingArea" & dS, dX, dY, 20, 20) 
 +
    .End 
 +
  End With 
 +
     
 +
'''End''' 
 +
  
  

Versione delle 10:42, 17 lug 2015

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/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: |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 = 0
    .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 in fase di mero disegno all'interno della DrawingArea prescelta:

Public Sub DrawingArea1_Draw()  
     
 With Paint  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(100, 100)  
   .RelLineTo(0, 100)  
   .Stroke  
   .DrawText("DrawingArea1", 10, 10, 20, 20)  
   .End  
 End With  
     
End  
     

Public Sub DrawingArea2_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 = 0  
   .Paper = 2  
   .Resolution = Desktop.Resolution  
   .GrayScale = False  
   .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 = "1"  
 Else  
   mx = 200  
   my = 200  
   rY = 200  
   dX = 200  
   dY = 200  
   dS = "2"  
 Endif  
     
 With Paint  
   .Begin(Printer1)  
   .Brush = Paint.Color(Color.Red)  
   .MoveTo(mx, my)  
   .RelLineTo(0, rY)  
   .Stroke  
   .DrawText("DrawingArea" & 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