imprimir PictureBox

alejandro
09 de Mayo del 2003
Hola, solo me quedo un problema, lo explico rapido.
El codigo que tengo hasta ahora esta al final, y le hice algunos cambios al codigo que 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



Observador
09 de Mayo del 2003
Bien... eso se debe a que el control Picture1 tiene la propiedad AutoRedraw = False (pense que la tendrias en True), la solucion es cambiarle esa propiedad a True... puedes hacerlo en tiempo de diseño.... sino, pues lo hacemos por codigo...

Mira... este codigo es el que tu tienes en el evento Load del Form... solo que le agregue la linea Picture1.AutoRedraw = True

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
Picture1.AutoRedraw = True 'Linea agregada
End Sub

Mira... en el evento Command2_Click modificaste una linea y la modificaste mal... La linea erronea es:

Picture1.Image = Picture1.Picture

Eso no se puede hacer, genera error, Uso no valido de la propiedad...

Esa linea la debes modificar por la siguiente:

Picture1.Picture = Picture1.Image

lo que haria que el codigo del evento Command2_Click quedara asi:

Private Sub Command2_Click()
Dim PosicionXIncialEnHoja As Integer
Dim PosicionYIncialEnHoja As Integer
Picture1.Picture = Picture1.Image 'OJO CON ESTA LINEA, ESTABA ALREVES, EL CODIGO ES: Picture1.Picture = Picture1.Image
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

Y bueno... dices que estas usando la propiedad ScaleMode = 0 - Usuario, pues te recomiendo que cambies las posiciones (magen o bordes) de la imagen en el objeto printer... es decir, eso que yo puse PosicionXIncialEnHoja = 100 y PosicionYIncialEnHoja = 100, modificalas a valores validos para tu escala... ya que, por ejemplo, si tu escala es de -12 hasta 12 en X, la posicion 100, no esta en un area visible, asi no se imprimira nada en la hoja, se imprmira en la posicion 100, que esta my a la derecha de la hoja...

Bueno... a ver si me di a entender... (Codigo probado en VB5)

alejandro
09 de Mayo del 2003
Funciono perfecto como tu dices, me parece que en algun momento use esa propiedad, pero se nota que fue en el lugar equivocado.
Te agradezco mucho tu ayuda.
Saludos
Alejandro

Observador
09 de Mayo del 2003
Ok...

Bueno... pues que bien que ya te salio...

Suerte y hasta pronto...