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

Da Gambas-it.org - Wikipedia.
Riga 143: Riga 143:
 
==Stampare il contenuto di una determinata DrawingArea scelta fra 2 o più==
 
==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:
 
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 DrawingArea1_Draw()
+
  '''Public''' Sub Form_Open()
     
+
 
   With Paint 
+
   DrawingArea1.Name = "DrawingArea 1"
    .Brush = Paint.Color(Color.Red) 
+
  DrawingArea2.Name = "DrawingArea 2"
    .MoveTo(100, 100)
+
 
    .RelLineTo(0, 100) 
+
<FONT Color=gray>' ''Assegna le due "DrawingArea" al medesimo GRuppo di Eventi:''</font>
    .Stroke 
+
  Object.Attach(DrawingArea1, Me, "DrAr")
    .DrawText("DrawingArea1", 10, 10, 20, 20)
+
  Object.Attach(DrawingArea2, Me, "DrAr")
     .End 
+
      
  End With 
 
     
 
 
  '''End'''   
 
  '''End'''   
 
        
 
        
+
 
  '''Public''' Sub DrawingArea2_Draw()   
+
  '''Public''' Sub DrAw_Draw()   
 
        
 
        
 
   With Paint   
 
   With Paint   
Riga 178: Riga 176:
 
     .Paper = .A4
 
     .Paper = .A4
 
     .Resolution = Desktop.Resolution   
 
     .Resolution = Desktop.Resolution   
     .GrayScale = False   
+
     .GrayScale = False
 +
  <FONT Color=gray>' ''.OutputFile = "/tmp/prova.pdf"''</font>
 
     .Print   
 
     .Print   
 
   End With   
 
   End With   
Riga 208: Riga 207:
 
     dX = 10   
 
     dX = 10   
 
     dY = 10   
 
     dY = 10   
     dS = "1" 
+
     dS = DrawingArea1.Name
 
   Else   
 
   Else   
 
     mx = 200   
 
     mx = 200   
Riga 215: Riga 214:
 
     dX = 200   
 
     dX = 200   
 
     dY = 200   
 
     dY = 200   
     dS = "2" 
+
     dS = DrawingArea1.Name
 
   Endif   
 
   Endif   
 
        
 
        
Riga 224: Riga 223:
 
     .RelLineTo(0, rY)   
 
     .RelLineTo(0, rY)   
 
     .Stroke   
 
     .Stroke   
     .DrawText("DrawingArea" & dS, dX, dY, 20, 20)   
+
     .DrawText(dS, dX, dY, 20, 20)   
 
     .End   
 
     .End   
 
   End With   
 
   End With   

Versione delle 10:42, 30 dic 2019

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: |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  



Note

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