Differenze tra le versioni di "Stampare il contenuto di una DrawingArea"
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 7: | Riga 7: | ||
===Esempio generico=== | ===Esempio generico=== | ||
− | + | Public Sub DrawingArea1_Draw() | |
− | <FONT color=gray>' '' | + | <FONT color=gray>' ''Richiama ai fini del disegno sulla "DrawingArea" le impostazioni presenti nella sub-procedura":</font> |
− | + | DisegnoStampa() | |
− | |||
− | |||
+ | End | ||
− | |||
− | + | Public Sub Button1_Click() | |
− | + | ||
− | + | With Printer1 | |
− | + | .Configure | |
− | + | .Orientation = .Portrait | |
− | + | .Paper = .A4 | |
+ | .Resolution = Desktop.Resolution | ||
+ | .GrayScale = False | ||
<FONT color=gray>' ''Volendo, si può stampare/creare un file .pdf o .ps, anziché stampare su foglio con la stampante, inserendo questa riga di comando:'' | <FONT color=gray>' ''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"''''' '</font> <SUP>[[[#Note|nota 1]]]</sup> | |
− | + | .Print | |
− | + | End With | |
− | + | End | |
− | + | Public Sub Printer1_Draw() | |
− | <FONT color=gray>' '' | + | <FONT color=gray>' ''Richiama ai fini della stampa le impostazioni presenti nella sub-procedura":</font> |
DisegnoStampa() | DisegnoStampa() | ||
− | + | End | |
− | + | Private Procedure DisegnoStampa() | |
With Paint | With Paint | ||
Riga 50: | Riga 50: | ||
End With | End With | ||
− | + | End | |
− | |||
==Stampare garantendo la corrispondenza fra testo mostrato sulla ''DrawingArea'' e testo stampato== | ==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: <SUP>[[[#Note| | + | Nel caso sia necessaria una precisa corrispondenza fra quanto mostrato sulla ''DrawingArea'' e quanto stampato, è possibile utilizzare il seguente codice esemplificativo: <SUP>[[[#Note|nota 2]]]</sup> |
− | + | Public Sub Form_Show() | |
Me.Center | Me.Center | ||
DrawingArea1.Resize(1653, 2338) <FONT color=gray>' ''Dimensioni in pixel di un foglio A4 a 200 DPI''</font> | DrawingArea1.Resize(1653, 2338) <FONT color=gray>' ''Dimensioni in pixel di un foglio A4 a 200 DPI''</font> | ||
− | + | ||
− | + | End | |
− | + | Public Sub DrawingArea1_Draw() | |
− | + | disegna() | |
− | + | ||
− | + | Paint.End | |
− | + | ||
− | + | End | |
− | + | Public Sub disegna() | |
Dim X, Y As Float | Dim X, Y As Float | ||
Dim dx, dy, DXT As Float | Dim dx, dy, DXT As Float | ||
Dim IH, IW As Float | Dim IH, IW As Float | ||
− | |||
<FONT color=gray>' ''Calcolo risolutore per linee e quadrati:''</font> | <FONT color=gray>' ''Calcolo risolutore per linee e quadrati:''</font> | ||
− | + | dx = DrawingArea1.W / 211 | |
− | + | dy = DrawingArea1.H / 297 | |
+ | |||
+ | X = 20 * dx <FONT color=gray>' ''bordo di 20 mm''</font> | ||
+ | Y = 20 * dy <FONT color=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")) | |
− | + | <FONT color=gray>' ''Disegna 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 Button1_Click() | |
− | + | If Printer1.Configure() Then Return | |
− | + | With Printer1 | |
− | + | .FullPage = True | |
− | + | .Orientation = .Portrait | |
− | + | .Resolution = 200 | |
− | + | .PaperHeight = 297 | |
− | + | .PaperWidth = 211 | |
− | + | <FONT color=gray>' '''.OutputFile = "/tmp/file.pdf"''' ''Se si vuole una stampa su file .PDF, attivare anche questa riga''</font> | |
− | + | .Print | |
− | + | End With | |
− | + | End | |
− | + | Public Sub Printer1_Begin() | |
disegna() | disegna() | ||
− | + | End | |
− | |||
==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 Form_Open() | |
− | + | ||
DrawingArea1.Name = "DrawingArea 1" | DrawingArea1.Name = "DrawingArea 1" | ||
DrawingArea2.Name = "DrawingArea 2" | DrawingArea2.Name = "DrawingArea 2" | ||
Riga 149: | Riga 145: | ||
Object.Attach(DrawingArea2, Me, "DrAr") | Object.Attach(DrawingArea2, Me, "DrAr") | ||
− | + | End | |
− | + | ||
− | + | ||
− | + | Public Sub DrAw_Draw() | |
− | + | ||
With Paint | With Paint | ||
.Brush = Paint.Color(Color.Red) | .Brush = Paint.Color(Color.Red) | ||
Riga 162: | Riga 158: | ||
.End | .End | ||
End With | End With | ||
− | + | ||
− | + | End | |
− | + | ||
− | + | ||
− | + | Public Sub Button1_Click() | |
− | + | ||
With Printer1 | With Printer1 | ||
.Configure | .Configure | ||
Riga 177: | Riga 173: | ||
.Print | .Print | ||
End With | End With | ||
− | + | ||
− | + | End | |
− | + | ||
− | + | ||
− | + | Public Sub Printer1_Draw() | |
− | + | ||
Dim n As Byte | 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> | <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 mx, my, rY, dx, dy As Integer | ||
Dim dS As String | Dim dS As String | ||
Riga 213: | Riga 209: | ||
dS = DrawingArea1.Name | dS = DrawingArea1.Name | ||
Endif | Endif | ||
− | + | ||
With Paint | With Paint | ||
.Begin(Printer1) | .Begin(Printer1) | ||
Riga 223: | Riga 219: | ||
.End | .End | ||
End With | End With | ||
− | + | ||
− | + | End | |
Riga 233: | Riga 229: | ||
− | + | Public Sub Form_Open() | |
DrawingArea1.Name = "DrawingArea 1" | DrawingArea1.Name = "DrawingArea 1" | ||
Riga 241: | Riga 237: | ||
Object.Attach(DrawingArea1, Me, "DrAr") | Object.Attach(DrawingArea1, Me, "DrAr") | ||
Object.Attach(DrawingArea2, Me, "DrAr") | Object.Attach(DrawingArea2, Me, "DrAr") | ||
− | + | ||
− | + | End | |
− | + | ||
− | + | ||
− | + | Public Sub DrAw_Draw() | |
− | + | ||
With Paint | With Paint | ||
.Brush = Paint.Color(Color.Red) | .Brush = Paint.Color(Color.Red) | ||
Riga 255: | Riga 251: | ||
.End | .End | ||
End With | End With | ||
− | + | ||
− | + | End | |
− | + | ||
− | + | ||
− | + | Public Sub Button1_Click() | |
− | + | ||
With Printer1 | With Printer1 | ||
.Configure | .Configure | ||
Riga 272: | Riga 268: | ||
.Print | .Print | ||
End With | 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> | <FONT Color=gray>' ''Incrementa il numero della pagina da stampare (il numero della prima pagina da stampare '''non''' deve essere = 0):''</font> | ||
inc n | inc n | ||
− | + | ||
<FONT Color=gray>' ''Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":''</font> | <FONT Color=gray>' ''Richiamiamo ai fini della stampa le impostazioni presenti nella sub-procedura":''</font> | ||
Stampa(n) | Stampa(n) | ||
− | + | ||
− | + | End | |
− | + | ||
− | + | ||
− | + | Private Procedure Stampa(d As Byte) | |
− | + | ||
Dim mx, my, rY, dx, dy As Integer | Dim mx, my, rY, dx, dy As Integer | ||
Dim dS As String | Dim dS As String | ||
− | + | ||
If d = 1 Then | If d = 1 Then | ||
mx = 100 | mx = 100 | ||
Riga 307: | Riga 303: | ||
dS = DrawingArea1.Name | dS = DrawingArea1.Name | ||
Endif | Endif | ||
− | + | ||
With Paint | With Paint | ||
.Begin(Printer1) | .Begin(Printer1) | ||
Riga 317: | Riga 313: | ||
.End | .End | ||
End With | End With | ||
− | + | ||
− | + | End | |
==Stampare il contenuto di una DrawingArea mediante le risorse del Componente gb.media== | ==Stampare il contenuto di una DrawingArea mediante le risorse del Componente gb.media== | ||
Si potrà stampare il contenuto di una ''DrawingArea'' anche mediante le risorse del Componente gb.media: | Si potrà stampare il contenuto di una ''DrawingArea'' anche mediante le risorse del Componente gb.media: | ||
− | Private | + | Private temporaneo As String |
Riga 331: | Riga 327: | ||
Dim src, vdc, enc, snk As MediaControl | Dim src, vdc, enc, snk As MediaControl | ||
− | + | temporaneo = Temp | |
pl = New MediaPipeline | pl = New MediaPipeline | ||
Riga 341: | Riga 337: | ||
enc = New MediaControl(pl, "pngenc") | enc = New MediaControl(pl, "pngenc") | ||
snk = New MediaControl(pl, "filesink") | snk = New MediaControl(pl, "filesink") | ||
− | snk["location"] = | + | snk["location"] = temporaneo |
src.LinkTo(vdc) | src.LinkTo(vdc) | ||
vdc.LinkTo(enc) | vdc.LinkTo(enc) | ||
enc.LinkTo(snk) | enc.LinkTo(snk) | ||
− | + | ||
<FONT Color=gray>' ''Effettua la ripresa dell'immagine:''</font> | <FONT Color=gray>' ''Effettua la ripresa dell'immagine:''</font> | ||
pl.Play() | pl.Play() | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
pl.Stop() | pl.Stop() | ||
pl.Close() | pl.Close() | ||
Riga 372: | Riga 362: | ||
End | End | ||
+ | |||
Public Sub Printer1_Draw() | Public Sub Printer1_Draw() | ||
With Paint | With Paint | ||
− | .DrawImage(Image.Load( | + | .DrawImage(Image.Load(temporaneo), 0, 0) |
.End | .End | ||
End With | End With | ||
End | End | ||
+ | |||
Public Sub DrawingArea1_Draw() | Public Sub DrawingArea1_Draw() | ||
With Paint | With Paint | ||
− | .DrawImage(Image.Load("<FONT Color= | + | .DrawImage(Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>"), 0, 0) |
.DrawText("Testo qualsiasi", 200, 100) | .DrawText("Testo qualsiasi", 200, 100) | ||
.End | .End | ||
Riga 395: | Riga 387: | ||
=Note= | =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] | + | [1] Vedere anche: [[Generare un file PDF da una DrawingArea]]. |
+ | |||
+ | [2] 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 attuale delle 14:09, 27 giu 2024
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
- 1 Esempio generico
- 2 Stampare garantendo la corrispondenza fra testo mostrato sulla DrawingArea e testo stampato
- 3 Stampare il contenuto di una determinata DrawingArea scelta fra 2 o più
- 4 Stampare il contenuto di due o più DrawingArea ciascuno su una pagina
- 5 Stampare il contenuto di una DrawingArea mediante le risorse del Componente gb.media
- 6 Note
Esempio generico
Public Sub DrawingArea1_Draw() ' Richiama 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" ' [nota 1] .Print End With End Public Sub Printer1_Draw() ' Richiama 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: [nota 2]
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")) ' Disegna 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
Stampare il contenuto di una DrawingArea mediante le risorse del Componente gb.media
Si potrà stampare il contenuto di una DrawingArea anche mediante le risorse del Componente gb.media:
Private temporaneo As String Public Sub Button1_Click() Dim pl As MediaPipeline Dim src, vdc, enc, snk As MediaControl temporaneo = Temp pl = New MediaPipeline src = New MediaControl(pl, "ximagesrc") ' Assegna alla proprietà "xid" del plugin "ximagesrc" il numero idetificativo della "DrawingArea", affinché ne catturi quanto da essa visualizzato: src["xid"] = DrawingArea1.Id vdc = New MediaControl(pl, "videoconvert") enc = New MediaControl(pl, "pngenc") snk = New MediaControl(pl, "filesink") snk["location"] = temporaneo src.LinkTo(vdc) vdc.LinkTo(enc) enc.LinkTo(snk) ' Effettua la ripresa dell'immagine: pl.Play() pl.Stop() pl.Close() Print "Cattura immagine effettuata" With Printer1 .Configure .Orientation = .Portrait .Paper = .A4 .Resolution = Desktop.Resolution .GrayScale = False ' Volendo, si può stampare/creare un file .pdf, anziché stampare su foglio con la stampante, inserendo questa riga di comando: .OutputFile = "/tmp/file.pdf" .Print End With End Public Sub Printer1_Draw() With Paint .DrawImage(Image.Load(temporaneo), 0, 0) .End End With End Public Sub DrawingArea1_Draw() With Paint .DrawImage(Image.Load("/percorso/del/file/immagine"), 0, 0) .DrawText("Testo qualsiasi", 200, 100) .End End With End
Note
[1] Vedere anche: Generare un file PDF da una DrawingArea.
[2] Il codice è stato realizzato dall'utente fsurfing del forum di www.gambas-it.org