Differenze tra le versioni di "Stampare il contenuto di una DrawingArea"
Da Gambas-it.org - Wikipedia.
Riga 4: | Riga 4: | ||
* viene richiamato l'evento ''_Draw()'' della Classe ''Printer'' per ogni pagina da stampare; | * 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. | * 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() | '''Public''' Sub DrawingArea1_Draw() | ||
Riga 49: | Riga 52: | ||
'''End''' | '''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: ||#Note|1|| | ||
+ | '''Public''' Sub Form_Show() | ||
+ | |||
+ | Me.Center | ||
+ | |||
+ | DrawingArea1.Resize(1653, 2338) <FONTcolor=gray>' ''Dimensioni in pixel di un foglio A4 a 200 DPI''</font> | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub DrawingArea1_Draw() | ||
+ | |||
+ | Paint.Begin(DrawingArea1) | ||
+ | |||
+ | disegna() | ||
+ | |||
+ | Paint.End | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub disegna() | ||
+ | |||
+ | Dim X, Y As Float | ||
+ | Dim dx, dy, DXT As Float | ||
+ | Dim IH, IW As Float | ||
+ | |||
+ | |||
+ | <FONTcolor=gray>' ''Calcolo risolutore per linee e quadrati:''</font> | ||
+ | dx = DrawingArea1.W / 211 | ||
+ | dy = DrawingArea1.H / 297 | ||
+ | |||
+ | |||
+ | X = 20 * dx <FONTcolor=gray>' ''bordo di 20 mm''</font> | ||
+ | Y = 20 * dy <FONTcolor=gray>' ''bordo di 20 mm''</font> | ||
+ | |||
+ | Paint.Font.Name = "Ubuntu" | ||
+ | |||
+ | Paint.Font.Size = RIDIMENSIONA(11) | ||
+ | |||
+ | Paint.drawText("Testo Qualsiasi", X, y + Paint.Font.TextHeight("Testo Qualsiasi")) | ||
+ | |||
+ | <FONTcolor=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> | ||
+ | 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 Button2_Click() | ||
+ | |||
+ | If Printer1.Configure() Then Return | ||
+ | |||
+ | With Printer1 | ||
+ | .FullPage = True | ||
+ | .Orientation = 0 | ||
+ | .Resolution = 200 | ||
+ | .PaperHeight = 297 | ||
+ | .PaperWidth = 211 | ||
+ | <FONT color=gray>'''.OutputFile = "/tmp/file.pdf"''' ' ''Se si vuole una stampa su file .PDF, attivare questa riga''</font> | ||
+ | .Print | ||
+ | End With | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub Printer1_Begin() | ||
+ | |||
+ | disegna() | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | |||
+ | =Note= | ||
+ | [1] Il codice è stato realizzato dall'utente [http://www.gambas-it.org/smf/index.php?action=profile;u=28 fsurfing] del forum di [http://www.gambas-it.org www.gambas-it.org] |
Versione delle 09:33, 2 feb 2014
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_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: ||#Note|1||
Public Sub Form_Show() Me.Center DrawingArea1.Resize(1653, 2338) <FONTcolor=gray>' Dimensioni in pixel di un foglio A4 a 200 DPI</font> End Public Sub DrawingArea1_Draw() Paint.Begin(DrawingArea1) disegna() Paint.End End Public Sub disegna() Dim X, Y As Float Dim dx, dy, DXT As Float Dim IH, IW As Float <FONTcolor=gray>' Calcolo risolutore per linee e quadrati:</font> dx = DrawingArea1.W / 211 dy = DrawingArea1.H / 297 X = 20 * dx <FONTcolor=gray>' bordo di 20 mm</font> Y = 20 * dy <FONTcolor=gray>' bordo di 20 mm</font> Paint.Font.Name = "Ubuntu" Paint.Font.Size = RIDIMENSIONA(11) Paint.drawText("Testo Qualsiasi", X, y + Paint.Font.TextHeight("Testo Qualsiasi")) <FONTcolor=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> 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 Button2_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 questa riga .Print End With End Public Sub Printer1_Begin() disegna() End
Note
[1] Il codice è stato realizzato dall'utente fsurfing del forum di www.gambas-it.org