imprimir un PictureBox

alejandro
09 de Mayo del 2003
Disculpen, esta es una correccion al mensaje anterior. Alguien me puede decir como puedo sacar por impresora un grafico que esta en un PictureBox, y como puedo decirle el tamano de la imprecion, Ej, carta,.
Muchas gracias y saludos
Alejandro

Observador
09 de Mayo del 2003
Bien... Es algo bastante facil... mira aqui te muestro codigo que te permite imprimir el contenido Picture de un control PictureBox....

Como ya es constumbre... Crea un nuevo proyecto Exe estandar, insertale tres controles CommandButton, tambien inserta un control PictureBox, al PictureBox cargale una imagen en tiempo de diseƱo... para que veas mejor el ejemplo, trata que no sea una imagen muy grande... una de 300 pixeles de ancho y/o alto estara bien para este ejemplo... Copea el siguiente codigo y pegalo en la seccion (General) (Declaracioines) del form... ten listo papel tamaƱo carta y oficio en la impresora y ejecutalo...


Private Sub Command1_Click()
Dim PosicionXIncialEnHoja As Integer
Dim PosicionYIncialEnHoja As Integer
PosicionXIncialEnHoja = 100
PosicionYIncialEnHoja = 100
Printer.ScaleMode = vbPixels
Printer.PaintPicture Picture1.Picture, PosicionXIncialEnHoja, PosicionYIncialEnHoja 'Los demas argumentos no son necesarios
Printer.EndDoc
End Sub

Private Sub Command2_Click()
Dim PosicionXIncialEnHoja As Integer
Dim PosicionYIncialEnHoja As Integer
PosicionXIncialEnHoja = 100
PosicionYIncialEnHoja = 100
Printer.PaperSize = vbPRPSLetter 'TamaƱo carta, 216 x 279 mm
Printer.ScaleMode = vbPixels

Printer.PaintPicture Picture1.Picture, PosicionXIncialEnHoja, PosicionYIncialEnHoja, Printer.ScaleWidth - 200, Printer.ScaleHeight - 200
Printer.EndDoc
End Sub

Private Sub Command3_Click()
Dim PosicionXIncialEnHoja As Integer
Dim PosicionYIncialEnHoja As Integer
PosicionXIncialEnHoja = 100
PosicionYIncialEnHoja = 100
Printer.PaperSize = vbPRPSLegal 'TamaƱo Oficio, 216 x 356 mm
Printer.ScaleMode = vbPixels

Printer.PaintPicture Picture1.Picture, PosicionXIncialEnHoja, PosicionYIncialEnHoja, Printer.ScaleWidth - 200, Printer.ScaleHeight - 300
Printer.EndDoc
End Sub

Private Sub Form_Load()
Command1.Caption = "Imprimir en tamaƱo real"
Command2.Caption = "Imprimir en tamaƱo carta"
Command3.Caption = "Imprimir en tamaƱo oficio"

'Por si las moscas no tienes medidas en pixel, pues se cambian medidas a pixel (me es mas facil trabajar en pixeles)
Me.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels
Picture1.AutoSize = True
End Sub

Bien... ¿que te parecio?... ta Gûeno... ¡no!...

Bueno... ahi estan 3 opciones pero puedes modificarlas y cambiar el tamaƱo de papel, si quieres... La desicion es tuya... (Codigo probado en VB5)...

Observacion: Ahora que me acuerdo la imagen que

Bye...

Observador
09 de Mayo del 2003
Bien... Ahora ue me acuerdo, la imagen que quieres imprimir esta realizada con metodos graficos... y lo que le mando a la impresora no es la "image", si la "image" sino el Picture, eso te puede dar problemas...

Para ello existen dos soluciones, y la mas facil es antes de cada eveto click asignale coloca este codigo:

Picture1.Picture = Picture1.Image

Veamos como quedaria el codigo del evento click del Commmand1:

Private Sub Command1_Click()
Dim PosicionXIncialEnHoja As Integer
Dim PosicionYIncialEnHoja As Integer

Picture1.Picture = Picture1.Image

PosicionXIncialEnHoja = 100
PosicionYIncialEnHoja = 100
Printer.ScaleMode = vbPixels
Printer.PaintPicture Picture1.Picture, PosicionXIncialEnHoja, PosicionYIncialEnHoja 'Los demas argumentos no son necesarios
Printer.EndDoc
End Sub

y agregale esa linea a los eventos click de los demas CommandButton...

Lo que pasa es que el ejemplo funciona bien porque le asignamos una imagen en tiempo de diseƱo, pero como tu vas a imprimir una imagen creada (no cargada) en tiempo de ejecucion... por eso es que el ejemplo funciona bien... pero cuando quisieras adaptar el codigo a tu programa no imprimiria nada y hasta prodria generar error... ya que la propiedad Picture del control Picture1 no tendria nada...

Ahora si... Listo... y cualquier duda con respecto a ese codigo pues por aqui voy a andar...

alejandro
09 de Mayo del 2003
Hola, solo me quedo un problema, te lo explico rapido.
El codigo que tengo hasta ahora esta al final, y le hice algunos cambios al codigo que tu me enviaste. El Command3 lo utilizo para graficar la funcion en el PictureBox, es decir de tu ejemplo eliminie algunos command.
Me grafica bien en el PictureBox, pero al tirar a la impresora el paso "Picture1.Picture = Picture1.Image" , me borra el grafico del PictureBox, es decir al final solo me imprime el PictureBox pero sin funcion. (esto lo vi ya que si dejo esa instruccion me borra la funcion graficada y si la saco, no me borra la funcion, pero no me imprime nada, marca error)

El PictureBox lo tengo seteado para graficar con "SCaleMode=0-User" ya que estoy graficando una funcion.

Asi me quedo el codigo hasta ahora.

Dim x, y

Private Sub Command3_Click()

Picture1.Line (-12.6, 0)-(12.6, 0), vbRed
Picture1.Line (0, 1.2)-(0, -1.2), vbRed
For x = -12.6 To 12.6 Step 0.01
y = Sin(x)
Picture1.PSet (x, y), vbBlue
Next
End Sub

Private Sub Command1_Click()

Dim PosicionXIncialEnHoja As Integer
Dim PosicionYIncialEnHoja As Integer
Picture1.Picture = Picture1.Image
PosicionXIncialEnHoja = 100
PosicionYIncialEnHoja = 100
Printer.ScaleMode = vbUser
Printer.PaintPicture Picture1.Picture, PosicionXIncialEnHoja, PosicionYIncialEnHoja 'Los demas argumentos no son necesarios
Printer.EndDoc
End Sub

Private Sub Command2_Click()
Dim PosicionXIncialEnHoja As Integer
Dim PosicionYIncialEnHoja As Integer
Picture1.Image = Picture1.Picture
PosicionXIncialEnHoja = 100
PosicionYIncialEnHoja = 100
Printer.PaperSize = vbPRPSLetter 'TamaƱo carta, 216 x 279 mm
Printer.ScaleMode = vbPixels

Printer.PaintPicture Picture1.Picture, PosicionXIncialEnHoja, PosicionYIncialEnHoja, Printer.ScaleWidth - 200, Printer.ScaleHeight - 200
Printer.EndDoc
End Sub


Private Sub Form_Load()
Command1.Caption = "Imprimir en tamaƱo real"
Command2.Caption = "Imprimir en tamaƱo carta"
Command3.Caption = "graficar"

'Por si las moscas no tienes medidas en pixel, pues se cambian medidas a pixel (me es mas facil trabajar en pixeles)
Me.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels
Picture1.AutoSize = True
End Sub


Muchas gracias por tu ayuda
Saludos
Alejandro