Differenze tra le versioni di "Stampare il contenuto di una DrawingArea"
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 10: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.
Indice
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