Stampare il contenuto di una DrawingArea: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 227: | Riga 227: | ||
End With | 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. | |||
<BR>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" | |||
<FONT Color=gray>' ''Assegna le due "DrawingArea" al medesimo Gruppo di Eventi:''</font> | |||
Object.Attach(DrawingArea1, Me, "DrAr") | |||
Object.Attach(DrawingArea2, Me, "DrAr") | |||
'''End''' | '''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 | |||
<FONT Color=gray>' ''Imposta il numero delle pagine da stampare:''</font> | |||
.Count = 2 | |||
.GrayScale = False | |||
<FONT Color=gray>' ''.OutputFile = "/tmp/prova.pdf"''</font> | |||
.Print | |||
End With | |||
'''End''' | |||
'''Public''' Sub Printer1_Draw() | |||
<FONT Color=gray>' ''Incrementa il numero della pagina da stampare (il numero della prima pagina da stampare non deve essere = 0)":''</font> | |||
inc n | |||
<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 = 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''' | |||
Versione delle 11:11, 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
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