Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/12/2009, 22:21
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Como exportar..... ?????

No se si se puede escribir texto sobre un control image. De todas formas he preparado una sub que debería solucionar tu problema.
Me ha costado pero al final lo he logrado. El tema era dejarte usar tu control image para que no tengas que cambiar nada, ya que imagino que usas un image para que se adapte la imagen cargada al tamaño del control, cosa que no hace el picturebox.

Aunque parezca complicado es facil de usar.

Código vb:
Ver original
  1. Sub EscribeEnControlImage(ByRef ControlImage As Image, _
  2. ByVal PosX As Long, ByVal PosY As Long, ByVal Texto As String, _
  3. Optional ByVal ColorTexto As ColorConstants = vbWhite, _
  4. Optional ByVal ColorFondo As ColorConstants = vbBlack, _
  5. Optional ByVal TamanioTexto As Currency = 8.25, _
  6. Optional ByVal FuenteTexto As String = "MS Sans Serif")
  7.  
  8.   Dim PicTemp1 As VB.PictureBox
  9.   Dim PicTemp2 As VB.PictureBox
  10.  
  11.   Set PicTemp1 = Controls.Add("VB.PictureBox", "PicTemp1EscribeEnControlImage", ControlImage.Container)
  12.   Set PicTemp2 = Controls.Add("VB.PictureBox", "PicTemp2EscribeEnControlImage", ControlImage.Container)
  13.   PicTemp2.Height = ControlImage.Height
  14.   PicTemp2.Width = ControlImage.Width
  15.   PicTemp1.Picture = ControlImage.Picture
  16.   PicTemp1.AutoSize = True
  17.   PicTemp2.AutoRedraw = True
  18.  
  19.   ' COLORFONDO = -1 DEJA EL FONDO TRANSPARENTE Y SOLO MUESTRA EL TEXTO
  20.  If ColorFondo <> -1 Then
  21.     PicTemp2.FontTransparent = False
  22.     PicTemp2.BackColor = ColorFondo
  23.   End If
  24.  
  25.   PicTemp2.PaintPicture PicTemp1.Picture, 0, 0, PicTemp2.ScaleWidth, PicTemp2.ScaleHeight, _
  26.   0, 0, PicTemp1.ScaleWidth, PicTemp1.ScaleHeight
  27.   Controls.Remove ("PicTemp1EscribeEnControlImage")
  28.   PicTemp2.ForeColor = ColorTexto
  29.   PicTemp2.CurrentX = PosX
  30.   PicTemp2.CurrentY = PosY
  31.   PicTemp2.Font.Size = TamanioTexto
  32.   PicTemp2.Font.Name = FuenteTexto
  33.   PicTemp2.Print Texto
  34.   Set ControlImage.Picture = PicTemp2.Image
  35.   Controls.Remove "PicTemp2EscribeEnControlImage"
  36. End Sub
Imaginando que tu control image se llama "Image1" y que tienes ya colocado sobre él un label llamado "Label1".
Esta línea básica debería pintar el label en el control image con el mismo tamaño y color de letra y color de fondo del label.


Código vb:
Ver original
  1. Private Sub Command1_Click()
  2.   EscribeEnControlImage Image1, _
  3.   Label1.Left - Image1.Left, Label1.Top - Image1.Top, _
  4.   Label1.Caption, _
  5.   Label1.ForeColor, Label1.BackColor, _
  6.   Label1.FontSize, _
  7.   Label1.FontName
  8. End Sub

En mis pruebas el label dibujado quedaba un poco desplazado de posición, pero eso ajustalo tu como quieras, calculando el margen de error o metiendo las coordenadas exactas a mano.

La sub pasa la imagen a un picturebox, escribe el texto y devuelve la imagen al control image.

Lo malo es que el picturebox no tiene propiedad stretch y he tenido que "stretcharlo" yo mismo, ya que si no las coordenadas no coinciden y la imagen devuelta tiene el tamaño original y el texto descolocado.

Lo que más me ha costado ha sido aprender lo básico para crear y eliminar pictureboxes en tiempo de ejecución sin hacerte añadir al menos uno para usar de matriz.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 30/12/2009 a las 01:15 Razón: Añadir opcional "Fuente del texto" y renombrar variables para evitar conflictos