Você está na página 1de 42

1 - Mtodo Line :

Con este mtodo podemos dibujar Lneas y rectngulos en un objeto donde se permita utilizar dicho mtodo, como por ejemplo en los Formularios, los controles PictureBox, el objeto Printer. Los parmetros de Line son: El_Objeto.Line (X1, Y1) - ( X2, Y2), El_Color, BF

Donde El_Objeto es donde vamos a dibujar. Los primeros dos parmetros son las coordenadas para X e Y, luego el color de la lnea y por ltimo el parmetro BF al igual que el color, es un parmetro de tipo opcional, y aqu podemos pasar como valor: B o BF o ningn valor Si pasamos B, se dibujar un rectngulo sin relleno. Si pasamos BF el rectngulo tendr de relleno el color especificado en el parmetro Color. Si no pasamos nada se dibuja una lnea Ejemplos: Lo siguiente dibuja una lnea de color Azul en el formulario:

Me.ScaleMode = vbPixels Me.Line (10, 10)-(100, 100), vbBlue

Como se ve en el ejemplo anterior, los valores que tomar y utilizar LINE para las coordenadas X e Y, sern los establecidos en el ScaleMode del Objeto donde dibujar, en este caso se coloc en Pixeles ( vbPixels )

Este otro dibuja una lnea horizontal y otra vertical a lo ancho y alto del Formulario, al mover el puntero del mouse. A la primer lnea se le aplica el color verde, a la la lnea horizontal el color Rojo, utilizando las constantes de color de vb. ( VbgGreen y VbRed )

Option Explicit Private Sub Form_MouseMove(Button As Integer, _ Shift As Integer, _ X As Single, _ Y As Single) ' Limpia el Form Cls 'Dibuja la lnea vertical Line (X, ScaleTop)-(X, ScaleHeight), vbGreen 'Dibuja la lnea Horizontal Line (Me.ScaleLeft, Y)-(Me.ScaleWidth, Y), vbRed End Sub

En este otro ejemplo, se dibuja en el formulario, una cantidad x de lineas con colores aleatorios, utilizando la funcin Rnd de visual basic para generar el color aleatorio y para la cantidad de lineas :

colocar un control timer Cdigo fuente en el formulario


Option Explicit Private Sub Form_Load() Form1.BackColor = vbBlack Form1.ScaleHeight = 100 Form1.ScaleWidth = 100 Timer1.Interval = 500 End Sub Private Dim Dim Dim Sub Timer1_Timer() x As Long x1 As Long, x2 As Long y1 As Long, y2 As Long

Dim Color As Long ' si el form est minimizado sale If Form1.WindowState = vbMinimized Then Exit Sub EndIf ' limpia el formulario Me.Cls

' Int(Rnd * 50) + 1, es la cantidad de lineas For x = 0 To Int(Rnd * 50) + 1 DoEvents ' valores x e y para la linea actual x1 = Int(Rnd * 101) x2 = Int(Rnd * 101) y1 = Int(Rnd * 101) y2 = Int(Rnd * 101) ' color aleatorio de 1 a 15 que luego se usa con Qbcolor Color = Int(Rnd * 15) ' dibuja la linea Form1.Line (x1, y1)-(x2, y2), QBColor(Color) Form1.Line (x1, y2)-(x2, y1), QBColor(Color) Form1.Line (x2, y1)-(x1, y2), QBColor(Color) Form1.Line (y1, y2)-(x1, x2), QBColor(Color) Next x End Sub

Este cdigo dibuja lineas, como si fuese un lapiz, es deicir al mantener presionado el mouse en el formulario:

Option Explicit Dim Flag As Boolean Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) 'Establece el CurrentX y el CurrentY CurrentX = X CurrentY = Y Flag = True End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If Flag = False Then Exit Sub End If 'Dibuja la linea Line -(X, Y) End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Flag = False

End Sub

Lo siguiente dibuja un rectngulo sin relleno de color Rojo, pasndole la B como parmetro al mtodo Line

Me.ScaleMode = vbPixels Me.Line (10, 10)-(100, 100), vbRed, B

Ahora, en ves de especificar B, se indica el valor BF para rellenar el rectngulo :

Me.ScaleMode = vbPixels Me.Line (10, 10)-(100, 100), vbRed, BF

Cuando se dibujan rectngulos, es decir se utiliza B o BF, X1 , Y1, X2 e Y2 sera equivalente a : El_Objeto.Line (Izquierda, Arriba) - (Ancho, Alto).

El siguiente ejemplo dibuja una lnea vertical de color verde una al lado de la otra en todo el ancho del formulario, en un bucle:

Private Sub Form_Paint() Me.ScaleMode = vbPixels For i = 0 To Me.ScaleWidth Step 10 Line (i, 10)-(i, Me.ScaleHeight - 10), vbGreen Next End Sub

PropiedadCurrentX y CurrentY
CurrentX devuelve o establece las coordenadas horizontales para el siguiente mtodo de dibujo. CurrentY devuelve o establece las coordenadas verticales para el siguiente mtodo de dibujo, en este caso para el mtodo Line. Lo siguiente, dibuja al presionar un Command1, un rectngulo de 25 pixeles de ancho por 50 pixeles de alto. Y la posicin izquierda y la posicin superior (x1 e y1), es decir el CurrentX y el CurrentY, se puede ver como no cambian su valor, y se mantienen igual. Es decir, la primera ves que se presiona para dibujar el primer rectngulo, Currentx y Currenty valen 0. Luego la segunda ves, Currentx tiene el valor 25 y Currenty el valor 50. si se sigue

presionando el Command1, mientras no se cambie explicitamente el valor , currentx y Currenty mantendrn dichos valores, x2 e y2.

Private Sub Command1_Click() Me.Line (CurrentX, CurrentY)-(25, 50), vbRed, B MsgBox "Pos x: " &CurrentX MsgBox "Pos y: " &CurrentY End Sub Private Sub Form_Load() Me.ScaleMode = vbPixels End Sub

Siguiendo el ejemplo anterior, si quisieramos que las coordenadas x2 e y2 sean relativas a x1 e y1, podemos utilizar la palabra reservada Step. Este cdigo es exactamente igual al anterior, con la diferencia de que se utiliza Step para especificar el Currentx y el Currenty para que x2 e y2 sea relativo a x1 e y1, el resultado sera esto:

Este es igual al anterior pero la posicin Superior (y1) es fija, y lo que se desplaza es la posicin horizontal, es decir el CurrentX, y cada ves que se presione el Command1 , el Currentx (la posicin izq ) se incrementar de 25 en 25 pixeles.

Private Sub Command1_Click() Me.Line (CurrentX, 20)-Step(25, 50), vbRed, B End Sub Private Sub Form_Load() Me.ScaleMode = vbPixels End Sub

Tambin se podra haber hecho lo mismo sin utilizar Step:


Private Sub Command1_Click() Me.Line (CurrentX, 0)-(CurrentX + 25, 50), vbRed, B End Sub Private Sub Form_Load() ScaleMode = vbPixels End Sub

Este otro ejemplo, dibuja un cuadrado uno al lado del otro , a lo ancho del formulario, el rectngulo es de 10 pixeles de ancho por 10 pixeles de alto, y cada cuadrado est separado por 5 pixeles ente uno y otro.

Private Sub Form_Load() Dim Izquierda As Single Me.ScaleMode = vbPixels Me.AutoRedraw = True For Izquierda = 0 To Me.ScaleWidth Step 15 Me.Line (Izquierda, 10)-Step(10, 10), vbBlue, B Next End Sub

Este otro dibuja rectngulos de 25 x 25 pixeles uno al lado del otro, en todo el formulario mediante dos bucles For. El primer bucle es para los rectngulos horizontales y el otro para los verticales.

Private Sub Command1_Click() Me.Cls For Horizontal = 0 To ScaleWidth Step 30 For vertical = 0 To ScaleHeight Step 30 Line (Horizontal, vertical)-Step(25, 25), &H808080, B Next Next End Sub Private Sub Form_Load() Me.ScaleMode = vbPixels End Sub

Dibujar cuadrcula

Lo siguiente dibuja una cuadracula mediante el mtodo Line en el objeto indicado, puede ser un picturebox o formulario, indicando la cantidad de cuadros para la forma horizontal y la cantidad para el vertical.

Cdigo fuente en el formulario


OptionExplicit Sub Dibujar_cuadricula( _ Objeto As Object, _ CountX As Single, _ CountY As Single, _ Optional x_Color As Long = vbBlack, _ Optional y_Color As Long = vbBlack) Dim i As Integer Dim mx As Long Dim my As Long ' limpiarobjeto Objeto.Cls mx = CLng(Objeto.ScaleWidth / CountX) my = CLng(Objeto.ScaleHeight / CountY) ' cambiar color del lpiz Objeto.ForeColor = x_Color ' dibujar las lneas verticales de la cuadricula For i = 0 To CountX Objeto.Line (i * mx, 0)-(i * mx, Objeto.ScaleHeight) Next i Objeto.ForeColor = y_Color ' dibujar las lneas horizontales de la cuadricula For i = 0 To CountY Objeto.Line (0, i * my)-(Objeto.ScaleWidth, i * my)

Next i End Sub Private Sub Form_Load() With Me .BackColor = vbWhite .ForeColor = vbBlue .FontSize = 12 .AutoRedraw = True End With Call Dibujar_cuadricula(Me, 25, 25, vbBlue, vbRed) 'CallDibujar_cuadricula(Me, 5, 10, vbBlue, vbRed) 'CallDibujar_cuadricula(Me, 25, 50, vbBlue, vbRed) End Sub

Propiedad DrawWidth
Para establecer el grosor de la lnea de dibujo se utiliza la propiedad DrawWidth. Este ejemplo dibuja lneas una al lado de la otra, separadas por 20 pixeles, mediante un bucle y va incrementando el DrawWidth en 1 en cada pasada. El dibujo se realiza en un control PictureBox llamado Picture1

Private Sub Command1_Click() Picture1.Cls Picture1.ScaleMode = vbPixels For i = 0 To ScaleWidth Step 25 Picture1.Line (i, 10)-(i, Picture1.ScaleHeight - 10), vbGreen Picture1.DrawWidth = Picture1.DrawWidth + 1 Next Picture1.DrawWidth = 1 End Sub

Este otro ejemplo dibuja un borde y un degradado en un formulario utilizando el mtodo Line, como muestra la siguiente captura:

Para crear le ejemlo colocar la propiedad BorderStyle del formulario en 0 - None, y pegar el siguiente cdigo:

Private Sub Form_Load() With Me 'Algunas propiedades del formulario .AutoRedraw = True

.ScaleMode = 3 .FontSize = 16 .ForeColor = &HC0FFFF End With End Sub

Private Sub Form_Resize() 'Esto dibuja el degradado al formulario Degradado Me 'Esto dibuja el borde al formulario Call Dibujar_Borde End Sub Sub Dibujar_Borde() Me.DrawStyle = 0 Me.DrawWidth = 10 Line (0, 0)-(ScaleWidth - 1, ScaleHeight - 1), &HFFC0C0, B End Sub Sub Degradado(vForm As Form) Dim intContador As Integer vForm.DrawStyle = vbInsideSolid vForm.DrawWidth = 2 'vForm.ScaleHeight = 256 For intContador = 0 To 255 vForm.Line (0, intContador)-(Screen.Width, _ intContador - 1), _ RGB(0, 0, 255 - intContador), B Next Me.CurrentX = 20 Me.CurrentY = 20 Me.Print " Ejemplo para dibujar un borde a un formulario " End Sub

2 - Mtodo Circle

El mtodo Circle permite dibujar un crculo, una elipse o un arco sobre un objeto. La sintaxis del mtodo es la siguiente: EL_Objeto.Circle (Step As Integer, X As Single, Y As Single, Radius As Single, Color As Long, Start As Single, End As Single, Aspect As Single) Los valores para X e Y especifican el punto donde estar el centro del crculo a dibujar. Radius es el valor del radio del mismo. El parmetro es obligatorio. Color: Valor que indica el color que tendr el crculo o elipse para su contorno. Se puede pasar cualquier valor admitido en visual basic, por ejemplo un Long, un valor Rgbetc.. Los parmetros Start y End son opcionales , y se utilizan para dibujar parte de una elipse o crculo Por ltimo el parmetro Aspect, se utiliza para definir el aspecto del crculo. Este valor es opcional. Ver ejemplos mas abajo.

El siguiente ejemplo crea un crculo en el centro de un control PictureBox, con un radio de 50 pixeles.

Private Sub Command1_Click() Picture1.Cls With Picture1 Picture1.Circle (.ScaleWidth / 2, .ScaleHeight / 2), _ 50, _ vbBlue End With End Sub Private Sub Form_Load()

Picture1.ScaleMode = vbPixels End Sub

Este ejemplo dibuja un crculo con un radio aleatorio entre 10 y 100 pixeles, al hacer click en el formulario, es decir el centro del crculo ( x1 e y1 ), son los valores x e y del evento MouseDown del Form:

Private Sub Form_Load() ScaleMode = vbPixels Me.DrawWidth = 2 End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Circle (X, Y), Int((100 - 10 + 1) * Rnd + 10), vbRed End Sub

Rellenar las circunferencias


Para esto se utiliza las propiedades FillColor y FillStyle. FillColor es el color de relleno, para FillStyle ver las opciones de estilos para los rellenos: 0 - Slido, 1 - transparente, 2 Lnea Horizontal, 3 - Lnea Vertical etc.. Un ejemplo: este es igual al anterior, pero rellena el crculo de un color aleatorio, siempre y cuando la propiedad FillStyle no sea transparente: Colocar un Command1 y un Combo1 en el formulario:

Private Sub Combo1_Click() Me.FillStyle = Combo1.ListIndex End Sub Private Sub Command1_Click() Me.Cls End Sub Private Sub Form_Load() ScaleMode = vbPixels 'Grosor de la lnea Me.DrawWidth = 2 'Opciones de With Combo1 .AddItem .AddItem .AddItem .AddItem .AddItem .AddItem .AddItem .AddItem End With estilo de relleno " " " " " " " " 0 1 2 3 4 5 6 7 Solido " Transparente " Linea Horizontal " Linea Vertical " Diagonal Arriba " Diagonal Abajo " Cross " Diagonal Cross "

Command1.Caption = "Limpiar" End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) 'color de relleno aleatorio

Me.FillColor = RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd)) 'Dibuja el crculo Circle (X, Y), Int((50 - 10 + 1) * Rnd + 10), _ RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd)) End Sub

Dibujar Elipses
Para dibujar Elipses se debe especificar en el parmetro Aspecto los siguientes valores. Por ejemplo si pasamos un 1, el crculo ser una circunferencia perfecta, si pasamos 0.5 , el radio horizontal del mismo ser el doble que el radio vertical, si pasamos un 2 lo contrario.

Para el ejemplo del grfico, colocar un Combo1 y este cdigo en el Form:

Private Sub Form_Load() ScaleMode = vbPixels 'Grosor de la linea Me.DrawWidth = 2 For i = 0.1 To 2.1 Step 0.1 Combo1.AddItem i Next Combo1 = Combo1.List(0)

End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Circle (X, Y), Int((50 - 10 + 1) * Rnd + 10), _ RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd)), , , CSng(Combo1) End Sub

3 - Mtodo Point y mtodo Pset :


El mtodo Point lo que hace es devolver , como un nmero entero ( un Long ), el color RGB del punto que se le especifique, puede ser utilizado tanto en un Formulario como en un PictureBox. El mtodo Pset establece un color determinado para un punto de un objeto. El siguiente ejemplo utiliza los dos mtodos. Cargar un grfico en un Picture1 y tambin colocar un Picture2. Al hacer click en el Picture1, en el evento MouseDown, se obtendr el color de ese pixel, y ese valor se le aplicar al BackColor del Picture2, como se ve en el grfico, el punto verde es el establecido con el mtodo Pset.

Private Sub Form_Load() 'Modo de escala en pixeles Picture2.ScaleMode = vbPixels Picture1.ScaleMode = vbPixels 'Grosor del punto Picture1.DrawWidth = 3 End Sub Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Picture1.Cls ' Establece el color del Picture2 mediante el mtodo Point Picture2.BackColor = Picture1.Point(X, Y) ' Dibuja el punto Picture1.PSet (X, Y), vbGreen 'Valor Hexadecimal del color Me.Caption = "Valor del color: " &Hex(Picture2.BackColor) End Sub

Nota: la forma y variaciones en las que se dibuja el punto u otras figuras mediante los mtodos grficos, dependen de las propiedades DrawStyle y DrawMode del objeto.

Este es otro ejemplo que utiliza Pset para dibujar un punto al presionar en el formulario, tomando como valores el x e y del evento MouseDown del Form, luego se dibuja una lnea desde un punto hacia el otro punto mediante el mtodo Line

Cdigo fuente
Dim X1 As Single Dim Y1 As Single Private Sub Form_Load() AutoRedraw = True End Sub Private Sub Form_MouseDown(Button As Integer, _ Shift As Integer, _ X As Single, _ Y As Single) DrawWidth = 10 'Dibuja el punto con Psetpasandole PSet (X, Y), vbBlack If X1 <> 0 And Y1 <> 0 Then DrawWidth = 3 'Dibuja la linea Line (X1, Y1)-(X, Y), vbWhite End If X1 = X Y1 = Y End Sub el x e y donde se hizo click

Este otro ejemplo dibuja puntos en el formulario en forma aleatoria Colocarle al formulario la propiedad WindowState en Maximized y tambien agregar un control CommandButton Cdigo fuente en el formulario
Dim Tiempo As Long Private Sub Command1_Click()

' dibuja los puntos en el formulario CallDibujar_Puntos(vbBlue) ' dibuja los puntos en el formulario Call Dibujar_Puntos(vbButtonFace) End End Sub FunctionDibujar_Puntos(Color As Long) DimPosicion_X DimPosicion_Y Tiempo = Timer + 5 While Tiempo >= Timer ' valores para la posicin x e y Posicion_X = Rnd * ScaleWidth Posicion_Y = Rnd * ScaleHeight ' Dibuja el punto en la coordenada y con el color indicado con Pset PSet (Posicion_X, Posicion_Y), Color DoEvents Wend End Function Private Sub Form_Load() ' modo de escala en pixeles y grosor del lapiz para el formulario ScaleMode = 5 DrawWidth = 10 End Sub

4 - Funcin QBColor:
Definicin de la funcin QBColor de Visual basic: Esta funcin devuelve el cdigo de color RGB de un nmero de color especificado de una lista de colores estndar predefinidos Es decir, esta funcin tiene como parmetro, un nmero entre el 0 y 15, es decir 16 valores posibles para retornar un color especifico. El siguiente ejemplo, muestra el uso de esta funcin. Lo que hace es recorer en un bucle, desde el 0 hasta el 15, y le cambia el BackColor a un arreglo de controles Label. Colocar una matriz de Label1. Label1 (0), Label1(1) .... hasta el Label1(15)

Private Sub Form_Load() Me.Caption = " Ejemlpo de la funcin QBColor" Dim i As Integer For i = 0 To 15 ' Asigna el color devuelto por la funcin QBColor _ al color de fondo del Label Label1(i).BackColor = QBColor(i) ' Asigna el caption Label1(i).Caption = " Valor de QBColor: >> " & i Next i End Sub

Al ejecutar el formulario se ver algo por el estilo:

Nota: cualquier valor que no est entre el 0 y el 15, producir error.

1 - Funcin LoadPicture :
Esta funcin se utiliza para cargar una imagen o grfico en un control Form, PictureBox o Image. Esta funcin requiere como parmetro obligatorio, el path del archivo de imagen a cargar en el objeto. Por ejemplo lo siguiente carga un grfico en un control PictureBox:

Picture1.Picture = LoadPicture("c:\archivo.bmp")

Lo mismo sera para un control Image o Formulario, o cualquier objeto que soporte la carga de un archivo de imagen de formato compatible a las que soporta Visual basic ( BMP, JPG, GIF, WMF, algunos ICO etc..) , no as los archivos PNG o TIFF por ejemplo, ya para estos ltimos habra que utilizar el Api de windows o algn componente externo, para poder leerlos. Nota: En este enlace hay un Mdulo de clase que permite visualizar grficos e imgenes de tipo PNG

Para cargar en un control Image:

Image1.Picture = LoadPicture("c:\archivo.bmp")

Para cargar en un Form:

El_Formulario.Picture = LoadPicture( La ruta)

Tambin hay otras propiedades de algunos controles, que requieren por lo general el uso de esta funcin para cargar un archivo grfico a dicha propiedad, como es el caso de: La propiedad Icon de los formularios. La propiedad MouseIcon para establecer un icono personalizado al mouse. La propiedad DragIcon que permite establecer el icono que se va a mostrar como puntero en una operacin de arrastrar y colocar, y algunas otras. lo siguiente establece un archivo de cono al puntero del Mouse para el formulario:

Me.MousePointer = vbCustom Me.MouseIcon = LoadPicture(La_Ruta_Del_Icono)

Para establecer el cono en un control TextBox:

Text1.MousePointer = vbCustom Text1.MouseIcon = LoadPicture(La_Ruta_Del_Icono)

Adems de los controles, se pueden cargar archivos con la funcin LoadPicture, por ejemplo en los siguientes tipos de variables: IPictureDisp, Picture stdPicture. Aclarar que al cargar un grfico en la variable, se debe establecer con la instruccin Set, por ejemplo:

Dim La_Imagen As Picture Set La_Imagen = LoadPicture("c:\windows\plumas.bmp") Picture1.Picture = La_Imagen

Lo anterior carga en el la variable " La_Imagen " el archivo grfico, y luego se puede pasar dicha variable a un objeto que tenga la propiedad Picture, en este caso se paso un control Picture1.

Para eliminar de la memoria la variable, se utiliza el valor Nothing tambin con la instruccin Set , por ejemplo:

If Not La_Imagen Is Nothing Then 'Descarga la variable de la memoria Set La_Imagen = Nothing End If

Capturar el error 53. Cuando cargamos un archivo con la funcin, y el path del archivo no existe, es decir que no se encuentra el fichero, se produce el error 53.

Un ejemplo para capturar el error:

On Error GoTo errSub Picture1.Picture = LoadPicture(Ruta) Exit Sub 'Error errSub:

If Err.Number = 53 Then MsgBox "No se puede cargar el archivo, verifique la ruta", vbCritical EndIf

2 - Mtodo SavePicture:
Este mtodo lo que hace es guarda en un archivo en disco, un grfico cargado en un control Form, PictureBox o un control Image. Este posee dos parmetros, uno que especifica el Objeto Picture, y otro la ruta del archivo a generar Savepicture Picture As IPictureDisp,FileName as String

Su uso es muy simple. A continuacin una serie de ejemplos: Esto lo que es cargar en un control Image, un grfico del disco, y luego mediante otro botn, utilizando un control CommonDialog, guarda el archivo cargado en el Image en la ruta especificada: Colocar un Control CommonDialog1, un control Image1 y dos controles CommandButton, Command1 y Command2:

Cdigo en el formulario:
'Botn que carga elel archivo de imagen en el control Private Sub Command1_Click() On Error GoTo errSub With CommonDialog1 .DialogTitle = "Seleccionar un archivo" .Filter = "Archivos BMP|*.bmp|Archivos JPG|*.bmp|Todos|*.*" .ShowOpen If .FileName = "" Then Exit Sub Image1.Picture = LoadPicture(.FileName) End With Exit Sub 'Error errSub: If Err.Number = 53 Then MsgBox "No se puede cargar dicho archivo, verifique la ruta", vbCritical EndIf End Sub 'Botn que guarda el contenido del control Image en un nuevo archivo Private Sub Command2_Click() With CommonDialog1 .DialogTitle = "Guardar el archivo" Image

.Filter = "Todos los Archivos|*.*" .ShowSave If .FileName = "" Then MsgBox "No se especific ningn nombre", vbCritical End If If Image1.Picture <> 0 Then SavePicture Image1.Picture, .FileName Else MsgBox "No hay un grfico cargado para poder guardar", vbExclamation End If End With End Sub Private Sub Form_Load() Command1.Caption = "Abrir" Command2.Caption = "Guardar" End Sub

Este otro ejemplo, guarda el contenido del portapapeles de windows, en un nuevo archivo de tipo BMP. Nota, debe haber una imagen vlida en el ClipBoard, si no dar error. Para probar, se puede copiar al portapapeles la imagen de la pantalla presionando la tecla PrintScreen, y luego ejecutar el siguiente cdigo para generar el archivo

IfClipboard.GetFormat(vbCFBitmap) = True Then 'Guarda la imagen SavePictureClipboard.GetData(vbCFBitmap), "c:\Archivo.BMP" Else 'Error: no coincide el Formato MsgBox "La imagen del portapales no es vlida", vbCritical, "No se pudo guardar" EndIf

3 - El Mtodo PaintPicture de Visual basic

La definicin de este mtodo es la siguiente:


El mtodo PaintPicture permite dibujar el contenido de un archivo de grficos en un Formulario, en un PictureBox o un objeto Printer.

La sintxis del mtodo es la siguiente:


El_objeto.PaintPictureLa_Imagen, x1, y1, Ancho1, Alto1, x2, y2, Ancho2, Alto2, Opecode

El_Objeto: Es como se coment, donde vamos a dibujar el grfico, puede ser un form, un picture o en el objeto Printer La_Imagen Este parmetro es de tipo StdPicture, y es la imagen a dibujar. Los formatos pueden ser un archivo Gif, Bmp, Jpg, Wmf, Dib, Ico . Esta imagen puede estar cargada en un control, por ejemplo en un Picture, Form, Image, o tambin en una variable de tipo StdPicture, IpictureDisp o de tipo Picture. Ver mas adelante un ejemplo de esto ltimo de como utilizar grficos cargados en variables X1 e y1: Son las coordenadas de destino, es decir la posicin Izquierda y Arriba ( Left - Top ), donde se presentar la imagen a dibujar en el objeto destino Ancho1 y Alto1: Estos parmetros especifican el ancho y alto que tendr la imagen a dibujar. Estos parmetros son opcionales, y si se omiten, la imagen se dibujar en el objeto con las dimensiones que tenga. x2 e y2 :

Son las coordenadas a tomar en la imagen, es decir es la zona de recorte de la misma. Con estos parmetros podemos copiar un trozo del grfico, si se omite, ya que es opcional, se toma la imagen completa. Ancho1 y Ancho2: Al igual que x2 e y2 son opcionales, y determinan el ancho y alto de la imagen en el objeto destino

Ejemplos:
Cargar en un control PictureBox un grfico. Luego al presionar un command1, se copiar la imagen del Picture en el formulario.

El cdigo del CommandButton sera:

Private Sub Command1_Click() 'Copia el grfico en el formulario Me.PaintPicture Picture1.Picture, 0, 0 End Sub

Como se ve en el cdigo, indicamos que copie la imagen del picture1 en el formulario, es decir en el primer parmetro le pasamos la propiedad Picture del control. Luego, se indica la posicin izquierda y Arriba ( Left - Top ) en el objeto destino, en este caso el Form. Los dems parmetros son opcionales, y como en este caso se omitieron, la imagen se copiar con las dimensiones que tenga, es decir una copia exacta. Si en cambio en ves de especificar 0 para x y 0 para y, le especificaramos 500, y 500, el resultado sera el siguiente:

Importante. Los valores para las dimensiones y posiciones del mtodo PaintPicture, ya sea para las coordenadas x1, y1, ancho1, alto1, ancho2 y alto2, depende de la propiedad ScaleMode del objeto destino. En el ejemplo anterior, se asume que se copi en la posicin izquierda y Top, usando Twips como medida, por lo que si haces la prueba y cambias la propiedad ScaleMode del formulario, por ejemplo a vbPixels, la imagen se copiar tomando dicho modo de escala, es decir en pixeles. Lo mas comn, es trabajar con pixeles, es mas cmodo.

Ejemplo 2:
Este ejemplo es igual al anterior, pero se utilizarn cuatro controles TextBox para indicar la posicin x1, y1, ancho1 y ancho2.

Nota: el cdigo no tiene una rutina de error para comprobar que algunos valores sean correctos, es decir si por ejemplo colocamos un valor que no sea numrico, dar error. tambin se producir un error en tiempo de ejecucin , si pasamos a PaintPicture, en Ancho1 y Alto1, el valor 0 Cdigo fuente en el formulario:

Private Sub Command1_Click() 'Limpia el contenido del formulario Me.Cls 'Copia el grfico en el formulario con los valores Me.PaintPicture Picture1.Picture, CSng(Text1), _ CSng(Text2), _ CSng(Text3), _ CSng(Text4) End Sub Private Sub Form_Load() ' Modo de escala del formulario en pixeles Me.ScaleMode = vbPixels End Sub

Ejemplo 3

Lo siguiente copia el grfico cargado en un PictureBox llamado Pic_Origen, a otro PictureBox llamado Pic_Destino.

Private Sub Command1_Click() 'Copia el grfico con el ancho y alto que tenga _ Pic_Destino Pic_Destino.PaintPicture Pic_Origen, 0, 0, _ Pic_Destino.ScaleWidth, _ Pic_Destino.ScaleHeight End Sub

Como se ve, en los parmetros que especifican el alto y ancho, se pas las dimensiones que tenga Pic_destino, ( ScaleWidth y ScaleHeight )

Ejemplo 4 - Dibujar con PaintPicture un grfico centrado

Para dibujar una imagen centrada, por ejemplo en un formulario, podemos cargar la misma en una variable, como se coment antes, que sea de tipo Picture, IpictureDisp o StdPicture, y luego pasarla como parmetro a PaintPicture, y en los parmetros X1 e Y1 ( posicin Left y Top ) lo siguiente :

'Variable de tipo Picture para cargar mediante LoadPicture en _ tiempo de ejecucin un grfico DimUna_Imagen As Picture Private Sub Command1_Click() Dim Pos_x As Single DimPos_y As Single 'Limpia el formulario Me.Cls 'Carga en la variable la imagen Set Una_Imagen = LoadPicture("c:\bart.jpg") ' Obtiene la posicin x e y para centrar la imagen Pos_x = (Me.ScaleWidth - ScaleX(Una_Imagen.Width, vbHimetric, vbPixels)) / 2 Pos_y = (Me.ScaleHeight - ScaleY(Una_Imagen.Height, vbHimetric, vbPixels)) / 2 ' Dibuja el grfico centrado en el formulario Me.PaintPictureUna_Imagen, Pos_x, Pos_y End Sub Private Sub Form_Load() ' Modo de escala en pixeles Me.ScaleMode = vbPixels Me.Caption = " Dibujar imagen centrada " End Sub Private Sub Form_Unload(Cancel As Integer) 'Elimina la imagen/Variable If Not Una_Imagen Is Nothing Then Set Una_Imagen = Nothing End Sub

El resultado al presionar el commandButton sera algo por el estilo:

En el cdigo anterior, se declara una variable de tipo Picture para almacenar el grfico mediante la funcin LoadPicture. Pero como es una variable de objeto, se debe utilizar la palabra clave Set. Tambin como se coment, el grfico a cargar debe ser un formato de imagen de los que soporta visual basic: bmp, gif, jpg etc... , no asi los Png o los tif por decir algunos. Luego en Pos_x y Pos_y se calcula el centro del formulario, restando al ancho del form, el ancho de la imagen dividido por 2 Nota: La propiedad Width y Height de la imagen, no devuelve un valor en pixeles, si no en una medida llamada Himetric. Por ese motivo se utiliza la funcin Scalex y Scaley para convertir el valor de dicha escala a pixeles, ya que en el FormLoad se estableci el modo de escala del Formulario, que en este caso es donde se va a dibujar, en vbPixels. Aclaro que no se si es la nica forma de convertir esto, pero al menos es la que conozco.

Ejemplo 5 - Recortar y estirar una imagen - Parmetros X2, y2 , Ancho2 y Alto2


Ahora se ve un ejemplo para ver estos parmetros opcionales que no se vieron en los ejemplos anteriores, y que los mismos permiten seleccionar partes de la imagen a copiar en el objeto destino, es decir un rea especfica. Si no se entiende demasiado, seguro viendo la siguiente imagen se aclara un poco el tema:

Para el ejemplo colocar un Picture llamado Pic_Origen y cargarle un grfico. Agregar otro PictureBox llamado Pic_Destino. Tambin Cuatro TextBox en un arreglo: Text1(0), Text1(1), Text1(2) y Text1(3), para la posicin x, posicin y, para el ancho ancho y alto respectivamente. Estos valores sern en pixeles, y esos mismos valores se utilizarn para la funcin PaintPicture para dibujar dicha rea

Cdigo fuente en el formulario:


Option Explicit Private Sub Dibujar_Imagen(x As Single, y As Single, _ ancho As Single, alto As Single) ' Limpia - Borra los dos picture Pic_Destino.Cls Pic_Origen.Cls 'dibuja el cuadrado en el Picture Origen Pic_Origen.Line (x, y)-Step(ancho, alto), vbRed, B

'Dibuja la porcin de imagen en Pic_Destino Pic_Destino.PaintPicture Pic_Origen.Picture, 0, 0, , , x, _ y, _ ancho, _ alto End Sub Private Sub Form_Load() ' Escala en pixeles para los dos Picture Box Pic_Destino.ScaleMode = vbPixels Pic_Origen.ScaleMode = vbPixels 'Para que al dibujar con Line y PaintPicture mantenga la imagen Pic_Origen.AutoRedraw = True Pic_Destino.AutoRedraw = True 'algunos Text1(0) Text1(1) Text1(2) Text1(3) End Sub valores iniciales = 10 = 10 = 50 = 50

Private Sub Text1_Change(Index As Integer) On Local Error Resume Next 'Llama a la sub que dibuja con PaintPicture Call Dibujar_Imagen(CSng(Text1(0)), _ CSng(Text1(1)), _ CSng(Text1(2)), _ CSng(Text1(3))) End Sub

El ejemplo anterior, al colocar valores en los TextBox para los ejes x e y, el ancho y alto, se dibuja mediante el mtodo Line el recuadro ( rea ) en el picture origen, luego se le pasan esos mismos valores a la funcin PaintPicture que dibuja esa porcin de imagen en el otro PictureBox

Ejemplo 6 - Estirar una imagen haciendo un efecto de Zoom


El siguiente ejemplo es similar al anterior, con la diferencia de que se captura un rea de un grfico cargado en un picture, y se dibuja en otro picturebox, pero estirando la imagen como si fuese un zoom. Para capturar el rea se utiliza un shape que se posiciona al mover el puntero del mouse sobre el picture que tiene la imagen:

Colocar dos PictureBox y un control shape. A un Picture renombrarlo a Pic_Origen y cargarle un grfico. Al otro picture renombrarlo a Pic_destino que es donde se copiar la porcin de la imagen. El shape dejarlo con el nombre Shape1

Cdigo fuente en un formulario

Option Explicit Dim Ancho As Single Dim Alto As Single Private Sub Form_Load() ' Algunas propiedades para el shape With Shape1 .Width = 500

.Height = 500 .BorderWidth = 2 .BorderColor = vbRed 'Coloca el shape dentro de Pic_Origen Set .Container = Pic_Origen End With Ancho = Shape1.Width Alto = Shape1.Height End Sub Private Sub Pic_Origen_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) ' Mueve el Shape en el centro del puntero del mouse Shape1.Move X - Ancho / 2, Y - Alto / 2 'Dibuja en Pic_Destino Pic_Destino.PaintPicturePic_Origen, 0, 0, _ Pic_Destino.ScaleWidth, Pic_Destino.ScaleHeight, _ (X - Ancho / 2), (Y - Alto / 2), Ancho, Alto End Sub

Dibujar un fondo ( imagen JPG , BMP ) a un formulario o picturebox


Este es un simple cdigo fuente que utiliza la funcin PaintPicture para dibujar un grfico JPG para el fondo del formulario y otra imagen para un picbox alineado en la parte superior. En este caso , se dibuja el fondo en los eventos Resize del formulario y del picturebox superior que acta como simple men de opciones. Descargar

Você também pode gostar