SlideShare una empresa de Scribd logo
1 de 23
1 - Descripción del control
El control ProgressBar nos permite medir el progreso de una tarea o proceso en
nuestro programa

Este control viene con el conjunto de controles que se incorporan en el ocx
MsComctl32.ocx con el nombre de Microsoft Windows Common Control 6




Una vista previa del control ProgressBar:
Si bien es posible crear barras de progreso sin utilizar un control adicional, mediante el
ProgressBar podemos implementar de una manera rápida y fácil, mediciones de
progreso de una determinada tarea




2 - Propiedad Value , Max y Min
Este control posee 3 propiedades fundamentales para trabajar en el código a la hora de
mostrar dicho progreso en la barra.



Estas tres propiedades principales son:

       Value: Propiedad que indica el valor actual de la barra, o mejor dicho del
       proceso que estamos midiendo
       Max : La Propiedad Max establece el valor máximo para la barra o proceso
       Min : Establece el valor mínimo.

Nota: Este control también posee otras propiedades, pero que no son determinantes y
que están relacionadas mas a su aspecto gráfico.



3 - Un ejemplo simple para ver como funciona el
control


Este ejemplo consite en generar un bucle For-Next desde 0 hasta 5000, y en cada
pasada del bucle, se irá asignando el valor de la misma a la propiedad Value del control.
Al Progressbar, en la propiedad Min le establecemos el valor 0. A la propiedad Max el
valor máximo del proceso y la propiedad Value tomará como valor el valor de x, la
variable del For - Next

Para el ejemplo agregar los siguientes controles en un formulario:

       1 Control Label llamado Label1
       1 Botón de comando llamado Command1
       1 Un control ProgressBar con el nombre ProgressBar1



Pegar el siguiente Código fuente en el Formulario:

Private Sub Command1_Click()

Dim x As Long


     ' Generamos un ciclo For
     For x = ProgressBar1.Min To ProgressBar1.Max

       ' Mostramos la veriable x (el value) en Label1
         Label1 = x

       ' Usamos DoEvents para poder visualizar el conteo en el Label
         DoEvents

       ' Asignamos en la propiedad Value del control ProgressBar _
         el valor de x para ir incrementando la barra de progreso
         ProgressBar1.Value = x

     Next x

End Sub



Private Sub Form_Load()

'Le asignamos las propiedades para el mínimo, máximo valor del
Progress bar
    With ProgressBar1

          .Max = 5000
          .Min = 0
          .Value = 0

     End With

End Sub




Las propiedades Min y Value pueden establecérsele valores como mínimo de 0, osea
que un valor inferior a 0 producirá un error 380 en tiempo de ejecución, la descripción
del error es:
El valor de la propiedad no es válido



El ProgressBar no tiene ninguna Propiedad para medir el porcentaje. Para el ejemplo
anterior podríamos hacerlo de esta manera, y mostrar además de la barra de progreso, un
porcentaje del mismo utilizando un control Label, como muestra este gráfico:




Private Sub Command1_Click()


'Le establecemos un valor para el máximo
ProgressBar1.Max = 50500

       For i = 0 To ProgressBar1.Max

              ' Valor actual del Progressbar
              ProgressBar1.Value = i

              ' Visualizamos el porcentaje en el Label
              Label1 = CLng((ProgressBar1.Value * 100) / ProgressBar1.Max) &
" %"


              DoEvents

       Next

End Sub




4 - Propiedad Scrolling
Para cambiar el aspecto gráfico del Progressbar, hay una propiedad llamada Scrolling.
Esta tiene 2 valores posibles, 0 y 1.

Si le colocamos esta propiedad en 0, el Progress tendrá una vista dividida por recuadros.
Si tiene el valor 1, la barra de progreso es continua, como se ve en la siguiente imagen
5 - Ejemplo 2
Ahora un ejemplo que tenga algún sentido mas práctico que el visto al comienzo (por lo
menos un poco mas de sentido)

Este consiste en agregar en un control ListBox la fecha de modificación de todos los
archivos de un directorio, y mostrar en la barra de progreso el tiempo que tarda.

Para este ejemplo hay que agregar un control DirListBox llamado Dir1, un FileListBox
File1, un Progressbar1, un Label1, un ListBox llamado List1 y un Command1 como
está en la imagen:




El código fuente del formulario es el siguiente:

Private Sub Command1_Click()
'Borrmos el contenido del ListBox
List1.Clear

'Si no hay archivos en el directorio salimos de la rutina

If File1.ListCount = 0 Then
   MsgBox "No hay archivoes en el directorio": Exit Sub
End If

'Le indicamos como valor máximo al progressbar la cantidad _
 de archivos que tiene el control

ProgressBar1.Max = File1.ListCount


For i = 0 To File1.ListCount - 1

'Agregamos la fecha de modificción del archivo en el List1 _
 con la función FileDateTime de visual basic
List1.AddItem FileDateTime(Dir1.Path & "" & File1.List(i))

'Asignamos al Value el valor de i
ProgressBar1.Value = i + 1

'Mostramos el porcentaje en el Label1
Label1 = CLng((ProgressBar1.Value * 100) / ProgressBar1.Max) & " %"


DoEvents

Next

End Sub

Private Sub Form_Load()

'Le indicamos al FileListBox que liste todos los ficheros, _
 ocultos, de sistema etc...

       With File1

           .Archive = True
           .Normal = True
           .ReadOnly = True
           .Hidden = True
           .System = True

       End With


End Sub

Private Sub Dir1_Change()
File1 = Dir1
End Sub




En el ejemplo anterior, se visualiza por medio de un DirListBox y un FileListBox, los
archivos de la pc. Al presionar el Command1 se recorre toda la lista del control File1
(mediante la propiedad List) y se recupera y se agrega con la función FileDateTime de
Visual Basic la fecha de modificación de los archivos en el control ListBox.

Nota: Tener en cuenta que al listar un directorio que tiene pocos archivos, el progreso
no se podrá visualizar ya que va a ser muy rápido, en cambio si listás un directorio con
muchos ficheros, como por ejemplo el directorio de sistema de windows ( System32 en
xp ), el progreso lo vas a poder visualizar correctamente.

Hay otras propiedades como se mencionaron para este control, pero no son importantes,
y están mas relacionadas a la visualización y disposición del mismo, como Orientation,
BorderStyle, Scrolling etc...




6 - Barra de progreso con los temas de xp


Una forma de poder aplicar los diferentes temas de windows Xp a las barras de
progreso, es mediante el siguiente control ocx gratuito que los podés descagrar desde
este enlace : Ocx Windows XP C1



Vista de los diferentes estilos

Tema Win XP OliveGreen ( verde oliva )




Tema Win XP Silver Theme ( plateado )
Tema Win XP Silver Theme ( Clásico )




Contenido

       1 - Introducción
       2 - Métodos principales del control WebBrowser
       3 - Método Navigate
       4 - Método GoBack y GoForward
       5 - Método Refresh
       6 - Método GoHome
       7 - Método Stop
       8 - Propiedades principales del control WebBrowser
       9 - Eventos principales del control WebBrowser
       10 - Evento NavigateError
       11 - Evento ProgressChange
       12 - Evento NewWindow2
       13 - Evento StatusChange
       14 - Evento NavigateComplete2
       15 - Controles necesarios para crear el Navegador
       16 - Código fuente para el navegador
       17 - Código para el botón para Navegar
       18 - Código para cuando se produce un error ( Evento NavigateError )
       19 - código para redimensionar los controles del formulario
       20 - código para mostrar en el combobox de direcciones, la Url que se está
       cargando
       21 - Abrir una nueva instancia del navegador para los popup
       22 - Código para hacer la Barra de progreso



Nota: En el siguiente enlace hay una lista de ejemplos relacionados al control
Webbrowser de vb 6.0 y vb.net : Enlaces relacionados al control webBrowser




1 - Introducción
Para crear el explorador se utiliza el Ocx ( que en realidad es una DllActivex) llamado
Microsoft Internet Controls. Este se agrega desde el menú Proyecto - componentes
Una vez que lo marcas, es decir que lo agregas al proyecto, se verá el siguiente control
en el cuadro de controles del IDE de visual basic
2 - Métodos principales del control WebBrowser
Antes de comenzar a crear el navegador de ejemplo, se describen los principales
métodos del control WebBrowser en lo que se refieren a la navegación y carga de las
páginas:

       Método Navigate
       Método GoBack
       Método GoForward
       Método Refresh
       Método GoHome
       Método Stop




3 - Método Navigate
El método Navigate es el que permite cargar una página en el control Web. El único
parámetro que necesita dicho método es la Url para cargar el documento en el control.
Por ejemplo si quisiera cargar la página de google, se haría asi



ControlWeb.Navigate "http://www.google.com"




4 - Método GoBack y GoForward
El método GoBack y el método GoForward se utilizan para navegar a la página anterior
y página siguiente (si es que las hay).




5 - Método Refresh
Método que se utiliza para actualizar la página cargada en el WebBrowser, es decir la
vuelve a recargar




6 - Método GoHome
Se utiliza para cargar la página de inicio que esté establecida en el programa Internet
explorer en la sección de opciones, este valor está guardado en el registro de Windows,
Esto es porque el control web está basado en el dicho control. Si quisieramos configurar
nuestra propia página de inicio, tendríamos que guardar la url en alguna parte, y cargarla
con el método Navigate por ejemplo
7 - Método Stop
Por último el Método Stop detiene la carga de la página que actualmente se está
cargando. Todos estos métodos, excepto el método Navigate, no requieren parámetros,
solo llamarlos para que hagan lo que tienen que hacer




8 - Propiedades principales del control WebBrowser


Las propiedades principales son:

       Propiedad LocationName
       Propiedad LocationURL



La propiedad LocationName devuelve el título de la página que cargamos en el control
webBrowser.

Por ejemplo si cargáramos la mítica web del guille: www.elguille.info , esta propiedad
devolvería: "El Guille la web de la programación etc..", es decir la descripción de la
página que está definida en las etiquetas "Title" del documento cargado

La propiedad LocationUrl lo que nos devuelve es la dirección http del documento
cargado en el control WebBrowser.

Este control tiene otras propiedades, pero para el ejemplo por ahora basta con nombrar
estas 2




9 - Eventos principales del control WebBrowser


Los principales eventos del control son:

       Evento NavigateError
       Evento ProgressChange
Evento NewWindow2
       Evento StatusTextChange
       Evento NavigateComplete2



El control web tiene muchos otros eventos aparte de estos 5, algunos sinceramente no
tengo idea para que son, pero en el ejemplo se usarán solo estos




10 - Evento NavigateError
El evento NavigateError se dispara o ejecuta cada ves que al cargar una página, se
produce un error en la carga




11 - Evento ProgressChange
El evento ProgressChange nos sirve para ver el progreso de descarga del documento o
de los documentos, ya que al cargar una página se pueden estar descargando varios
elementos, no solo la página a la que navegamos. En el ejemplo del navegador, con este
evento , se creará una barra de progreso para poder visualizar el porcentaje de descarga
de la página en la que estamos navegando




12 - Evento NewWindow2
Se ejecuta cuando se abre una ventana de tipo PopUp o las llamadas páginas de tipo
_Blank. Por defecto en el control webBrowser, si presionamos en un enlace que abre
una ventana PopUp, se abre una nueva instancia del Internet Explorer. Para que no
ocurra esto en el programa y se pueda abrir la página en una instancia de nuestro
navegador, utilizaremos este evento para detectar cuando suceda esto, mediante una
variable llamada cancel , y que cancela la ejecución del navegador predeterminado, y al
crear una instancia nueva de nuestro formulario, se cargará esa página en este nuevo
formulario .




13 - Evento StatusChange
Este evento tiene un parámetro llamado Text. Ese valor nos devuelve el estado de la
navegación, es decir nos muestra la url que se está navegando o las url que se están
navegando. Cuando termina de descargarse todo, la variable Text posee el valor "Listo".
También esta variable cambia cuando el mouse pasa encima del control Webbrowser,
por ejemplo encima de un enlace, y se refleja en esta variable. En este evento es donde
hay que poner una especie de barra de estado, label o lo que sea.




14 - Evento NavigateComplete2
Se produce cuando se ha podido navegar a la url, esto no quiere decir que el documento
o la página este completamente descargada




15 - Controles necesarios para crear el Navegador




Nota: los controles dentro del Picture no importa que estén ordenados, ya que se
acomodan y posicionan en tiempo de ejecución, por eso se ve de esa manera en la
imagen
La vista previa anterior muestra la ventana de diseño y los controles para agregar. Como
podés ver no usé iconos ni nada, eso lo podés hacer vos a tu gusto. Tampoco se utilizó
un control ToolBar de Visual Basic, si no que se colocó un control PictureBox que
contiene los botones para navegación. También contiene una barra de progreso, un
combobox para la barra de direcciones, el control webbrowser debajo del control
Picture, y debajo del control Webbrowser un control Label que será el que muestre el
enlace actual de descarga de las páginas y el estado de descarga, mostrando la url, sería
como el statusbar o barra de estado.




Pasos a seguir para agregar los principales controles en
el formulario:
   1. Agregar un control PictureBox llamado PicToolBar. Colocarlo en la parte
      superior del formulario como está en la imagen. No colocarle el ancho ni el alto
      a mano, ya que se redimensionará cuando se cargue el formulario y se ubicará en
      el lugar correcto
   2. Colocar un arreglo de CommandButton , o un ocx de botones, o lo que mas te
      guste, y al nombre del arreglo botones renombrarlo a cmdtoolBar. En total
      tienen que ser 5, es decir desde el cmdtoolBar(0) hasta el cmdtoolBar(4)
      También Colocarle los Caption a los botones en el orden como está en la
      imagen, el primero sería la flecha "<" que sería el botón que navega hacia la
      página anterior, el segundo (cmdToolbar(1) ) ">", la página siguiente, hasta el
      último que dice Inicio (cmdtoolBar(4)).
   3. Debajo de esto, colocar un control Label llamado LblDir, y en el Caption del
      Label escribir "Dirección". Al igual que los otros controles , no lo ubiques en el
      orden correcto, colocalo en cualquier lado, ya que se posiciona mediante código,
      Pero si o si debe estar dentro del PictureBox mencionado antes.
   4. Agregar un ComboBox llamado CboDir dentro del Picture. Este combo será la
      barra de direcciones.
   5. Agregar un Command Button llamado cmdNavigate, que será el que navegará a
      la página cuando se escriba una dirección en el CboDir (barra de direcciones) y
      se pulse navegar. Escribir en el Caption del botón "Navegar" o "ir" o lo que
      quieras.
   6. Fuera del Picture, es decir dentro del formulario, dibuja o agrega un control
      WebBrowser llamado WebBrowser (como está en la imagen)
   7. Insertar un control Label llamado lblStatusbar, que en la imagen está como
      "Label1". Este control se posicionará en la parte inferior del formulario
      cuando se esté ejecutando el programa, justo debajo del control WebBrowser y
      mostrará el estado de las url que se están cargando. También este Label
      visualiza la dirección url cuando pasas el mouse por encima de un enlace como
      se comentó.
   8. Por último colocar, dentro del PicToolBar, un control ProgressBar para la barra
      de progreso ( Yo no usé el Progressbar del visual basic que se agrega con el Ocx
      "Microsoft Windows Common Controls 6.0", ya que este ocx, trae varios ocx
      y el peso del archivo es de 1 MB y no valía la pena usar solo el Progressbar y
      cargar todos los demás ocx que no se usarán. Si querés podes usar un Ocx que
      pesa 90 Kb (es muy liviano) y es mucho mejor que el de Visual basic ya que
tiene muchas otras opciones que no posee el Progressbar del vb. Lo podés bajar
      desde acá y es gratuito: Ocx para barra de progreso
   9. Por último, al formulario Form1 colocarle el nombre FrmWeb




16 - Código fuente para el navegador


Ahora se agregará el procedimiento para los botones cmdToolBar:

 Private Sub cmdtoolBar_Click(Index As Integer)
On Error GoTo mensajeError

Select Case Index

  Case 0
    WebBrowser.GoBack 'ir a la página anterior
  Case 1
    WebBrowser.GoForward 'Siguiente página
  Case 2
    WebBrowser.Stop 'Detener la carga de la página
  Case 3
    WebBrowser.Refresh ' Actualizar la página
  Case 4
    WebBrowser.GoHome 'Ir a la página de inicio
End Select


Exit Sub
'rutina de Error
mensajeError:
If Err.Number = -2147467259 Then
   Resume Next
MsgBox Err.Description
End If

End Sub




17 - Botón Navegar - cmdNavigate


El código para cargar la página que se escriba dentro del combobox llamado cboDir
cuando pulsemos el botón cmdNavigate es muy simple, y como se comentó antes
utiliza el método Navigate del control webBrowser. Agrega el código en el formulario
principal:



 Private Sub cmdNavigate_Click()
If CboDir <> "" Then

  'Navegamos a la página con el método Navigate pasandole la _
  dirección del combobox cboDir

  WebBrowser.Navigate Trim$(CboDir)
End If

End Sub




Para que cuando se pulse la tecla Enter, también se navegue a la página escrita en la
barra de direcciones, es decir no solo cuando pulsamos dicho botón, hay que establecer
la propiedad Default del botón cmdNavigate en True. Pero también aparte de esto
hay que impedir que los botones del formulario retengan el foco, ya que si tienen el
foco, por ejemplo el botón "inicio" por decir uno, al presionar la tecla Enter, no se
ejecutará el botón cmdNavigate para navegar a la página, para esto podemos hacer que
cuando reciban el foco, se lo pasemos al formulario: pega entonces esta rutina:



Private Sub cmdtoolBar_GotFocus(Index As Integer)
'Le establecemos el foco al formulario
Me.SetFocus
End Sub




Ahora se añade el código para que cuando se presione click en una dirección del combo
cboDir se navegue a la página:



Private Sub CboDir_Click()
'Cuando hacemos click en una url del combo cargamos dicha página
WebBrowser.Navigate CboDir
End Sub




18 - Código para cuando se produce un error ( Evento
NavigateError )
Cada ves que se produce un error al intentar navegar a una dirección inexistente, o que
no se pudo localizar, se dispara el evento NavigateError.

Dentro de este procedimiento, pondremos solo un mensaje indicando la Url que dió el
error, a modo de información:



Private Sub WebBrowser_NavigateError(ByVal pDisp As Object, URL As
Variant, _
                                     Frame As Variant, StatusCode As
Variant, _
                                     Cancel As Boolean)

'Si se produce un error se dispara este evento y mostramos el mensaje
con la
'url del parámetro NavigateError

MsgBox "No se puede navegar a la Dirección: " & vbNewLine & URL,
vbCritical, "Error"

End Sub




19 - Procedimiento para posicionar y redimensionar
los controles del formulario


Este procedimiento, coloca los controles en la ubicación correcta, no se ejecuta en el
evento resize del formulario, ya que solo se debe posicionar y redimensionar una sola
ves cuando se carga el formulario, por eso lo ponemos en el evento Load del Form: El
procedimiento se llama redimensionarControles y es el siguiente:



Private Sub RedimensionarControles()
On Local Error Resume Next
 Dim ancho As Integer
 'Para posicionar los cmdcontrol
 cmdtoolBar.Item(0).Move 10, 25
 For i = 1 To cmdtoolBar.Count - 1
    ancho = cmdtoolBar(i).Width + ancho
    cmdtoolBar(i).Move ancho, 25
 Next
 'Para posicionar el PicToolBar
PicToolBar.Move 25, 0, Screen.Width - 50, cmdtoolBar(0).Height +
CboDir.Height + 200
  'Para posicionar el combo cboDir
  CboDir.Move LblDir.Width + 100, cmdtoolBar(0).Height +
cmdtoolBar(0).Top + 100, PicToolBar.ScaleWidth - cmdNavigate.Width - 150
- LblDir.Width
  'Para posicionar el Label que dice direccion lblDir
  LblDir.Move 50, CboDir.Top + 50
  'Para posicionar el botón cmdNavigate
  cmdNavigate.Move CboDir.Left + CboDir.Width + 50, CboDir.Top,
cmdNavigate.Width - 100
  'Para redimensionar y posicionar el control WebBrowser
  WebBrowser.Move 10, PicToolBar.Height + 50, Screen.Width - 25,
Screen.Height - PicToolBar.ScaleHeight - 1200
  'Para el Label de la barra de estado
  lblStatusbar.Move 150, WebBrowser.Top + WebBrowser.Height + 100,
Screen.Width - 300
  'Para posicionar la barra de progreso (Progressbar)
  ProgressBar.Left = cmdtoolBar(4).Left + cmdtoolBar(4).Width + 50
End Sub




Procedimiento para quitar la propiedad TabStop de
todos los controles del formulario menos del control
WebBrowser y del control CboDir (combo de la barra
de direcciones)


Para quitar el TabStop de todos los controles para no poder movernos con la tecla tab,
podríamos hacerlo uno por uno, pero mejor es de esta manera, ya que si se agregan otros
controles nuevos, nos despreocupamos de volver a establecer la propiedad
manualmente, ya que el bucle recorrerá todos los controles, y solo dejará con la
propiedad TabStop en true del control WebBrowser y del Combo de las direcciones url



Private Sub QuitartabStop()
On Error Resume Next
Dim i As Integer, ctl As Control

For Each ctl In Me.Controls
     'Deshabilitamos la propiedad TabStop de todos los controles,
exepto del control WebBrowser
     'y del control cboDir (barra de direcciones)
     If Not TypeOf ctl Is WebBrowser And Not TypeOf ctl Is ComboBox
Then
ctl.TabStop = False
     End If
Next ctl
'Ponemos el botón que bavega (cboNavigate) con la propiedad Default en
True
cmdNavigate.Default = True

End Sub




Procedimientos que se ejecutan en la carga del form
En el evento Load del Form iría el siguiente código:



Private Sub Form_Load()


'Autocompletamos la caché de windows cuando tipeamos en el cboDir
Call AucompletarCache(CboDir)

'Ponemos en false la propiedad tabStop de los controles menos la _
 del WebBrowser y la del Combo cboDir

Call QuitartabStop

'Para posicionar y redimensionar los controles
Call RedimensionarControles

End Sub




Los procedimientos QuitartabStop y RedimensionarControles, ya se vió anteriormente,
ahora hay uno que no se explicó y es el procedimiento AutocompletarCahe.

Este procedimiento hace uso de una función Api llamada SHAutoComplete y otra
llamada FindWindow. Lo que hace esta rutina, es poder asignarle al control ComboBox
las entradas de la caché de Windows (esto lo hace de forma automática), para que al
escribir una coincidencia, se autodesplieguen las entradas de las páginas ya visitadas, si
no entendés a lo que voy, mirando la siguiente imagen te va a quedar mas claro:




Para poder hacer esto agregar un módulo bas, y pegar las siguientes declaraciones Api y
el procedimiento AutocompletarCache
Aclaro que esto lo descubrí gracias al amigo Leandro Ascierto, ya que yo lo sabía
hacer pero utilizando un control textBox y no con un Combo. Para hacerlo con un
combo hay que utilizar otra Api (FinWindowEx).



'Constantes

Public    Const   SHACF_AUTOAPPEND_FORCE_OFF = &H80000000
Public    Const   SHACF_AUTOAPPEND_FORCE_ON = &H40000000
Public    Const   SHACF_AUTOSUGGEST_FORCE_OFF = &H20000000
Public    Const   SHACF_AUTOSUGGEST_FORCE_ON = &H10000000
Public    Const   SHACF_DEFAULT = &H0
Public    Const   SHACF_FILESYSTEM = &H1
Public    Const   SHACF_URLHISTORY = &H2
Public    Const   SHACF_URLMRU = &H4
Public    Const   SHACF_USETAB = &H8
Public    Const   SHACF_URLALL = (SHACF_URLHISTORY Or SHACF_URLMRU)

'Función Api SHAutoComplete para autocompletar la caché
Public Declare Sub SHAutoComplete Lib "shlwapi.dll" (ByVal hwndEdit As
Long, ByVal dwFlags As Long)
Public Declare Function FindWindowEx Lib "user32" Alias
"FindWindowExA" (ByVal hWnd1 As Long, _
                                                         ByVal hWnd2
As Long, ByVal lpsz1 As String, _
                                                         ByVal lpsz2
As String) As Long

'Procedimiento que recibe un combo como parámetro
Public Sub AucompletarCache(cbo As ComboBox)

Dim Handle As Long

Handle = FindWindowEx(cbo.hWnd, 0, "edit", nullstring)
SHAutoComplete Handle, SHACF_DEFAULT

End Sub




20 - Mostrar en el combo de direcciones, la Url que se
está cargando mediante el evento NavigateComplete2


Este evento como se dijo, se produce cuando al usar el método Navigate, se ha
alcanzado la url solicitada, entonces utilizamos la propiedad locationUrl para mostrarla
en el combo cboDir
Private Sub WebBrowser_NavigateComplete2(ByVal pDisp As Object, URL As
Variant)


'Mostramos la url que se está cargando en el combo
CboDir = WebBrowser.LocationURL

'Agregamos la url al combo
CboDir.AddItem WebBrowser.LocationURL

'Mostramos en el la barra de titulo del formulario el title _
 de la página con la propiedad LocationName

Me.Caption = WebBrowser.LocationName

End Sub




21 - Abrir una nueva instancia del navegador cuando
se abra otra ventana en el evento NewWindow2


Como se había comentado antes, cuando hacemos click en un vínculo que se abre en
otra ventana (las de tipo _Blank o PopUp ), se inicia el Internet Explorer o el navegador
predeterminado que tengamos en el sistema para mostrar dicha página.

Para evitar esto y poder abrirlo con una nueva instancia de nuestro formulario web,se
puede hacerlo con el evento llamado NewWindow2. Este evento que se produce cada
ves que un vinculo se abre en una nueva ventana, y el mismo tiene una variable como
parámetro llamada Cancel. Al colocar esta variable en True, se cancela la ventana
impidiendo que se abra el navegador predeterminado, de esta manera, mediante la
sentencia New, creamos una copia del formulario y cargamos esa Url en la nueva
instancia:

El código fuente sería el siguiente:

Private Sub WebBrowser_NewWindow2(ppDisp As Object, Cancel As Boolean)


'Cancelamos la ventana del explorador predeterminado
Cancel = True

'Creamos una nueva instancia del navegador, es decir del formulario
Set NuevaVentana = New FrmWeb

     NuevaVentana.Show 'lo hacemos visible
     'cargamos la página en esta nueva ventana
     NuevaVentana.WebBrowser.Navigate lblStatusbar

End Sub
Private Sub Form_Unload(Cancel As Integer)

'Eliminamos la variable de tipo FrmWeb cuando descargamos el
Formulario
Set NuevaVentana = Nothing

End Sub




Ahora, para poder crear el formulario de tipo FrmWeb, es decir una nueva instancia ,
debemos declarar la variable, en la zona de declaraciones :



'Variable para crear la instancia del navegador
Dim NuevaVentana As FrmWeb




22 - Código para la Barra de progreso


El evento que se dispara y que va indicando el progreso de las descarga de los
documentos en el control Web, es el evento ProgressChange. Este tiene 2 parámetros:
Uno llamado ProgressMax y otro Progress.

El código fuente para la barra de progreso es el siguiente:



'Evento ProgressChange del control WebBrowser que _
 nos permite obtener los valores de descarga

Private Sub WebBrowser_ProgressChange(ByVal Progress As Long, ByVal
ProgressMax As Long)
On Error GoTo men

'El Máximo de la barra es la variable ProgressMax

ProgressBar.Max = ProgressMax
ProgressBar.Value = Progress

     If ProgressMax <= 0 Then
        ProgressBar.Visible = False
     Else
        ProgressBar.Visible = True
     End If

Exit Sub
'Error
men:

If Err.Number = 380 Then Resume Next

End Sub




Bueno acá termina este simple Navegador web en visual basic. Se pueden agregar
muchas otras opciones, como por ejemplo un botón para añadir páginas de favoritos,
Historial etc...

También un método interesante del control WebBrowser es ExecWb, este permite
realizar varias operaciones, como por ejemplo abrir la ventana de búsqueda que usa el
internet explorer, imprimir, guardar la página web , seleccionar texto, Copiar , Cortar,
vista preeliminar del documento cargado, y varias otras opciones

Si querés ver un ejemplo de como poder realizar esto último, en este enlace se muesta
como hacerlo: Método ExecWb del control WebBrowser




Ejemplo enviado por helmuth Schmelzer Campos
Este es otro ejemplo de un navegador simple usando el control webbrowser :

Descargar



... Y en este otro Link hay un código fuente de un navegador web con pestañas usando
un control TabStrip

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Visual Basic 6.0
Visual Basic 6.0Visual Basic 6.0
Visual Basic 6.0
 
Introducción a base de datos en Access.pptx
Introducción a base de datos en Access.pptxIntroducción a base de datos en Access.pptx
Introducción a base de datos en Access.pptx
 
Modelado conceptual de app web
Modelado conceptual de app webModelado conceptual de app web
Modelado conceptual de app web
 
Unidad II. Modelo de Datos
Unidad II. Modelo de DatosUnidad II. Modelo de Datos
Unidad II. Modelo de Datos
 
Ejemplo GUARDAR registros desde Visual Basic 2012
Ejemplo GUARDAR registros desde Visual Basic 2012Ejemplo GUARDAR registros desde Visual Basic 2012
Ejemplo GUARDAR registros desde Visual Basic 2012
 
Visual studio code
Visual studio codeVisual studio code
Visual studio code
 
Presentacion bases de datos
Presentacion bases de datosPresentacion bases de datos
Presentacion bases de datos
 
Herramientas de Visual Basic
Herramientas de Visual BasicHerramientas de Visual Basic
Herramientas de Visual Basic
 
Base de datos
Base de datosBase de datos
Base de datos
 
Ejercicios (1) power point
Ejercicios (1) power pointEjercicios (1) power point
Ejercicios (1) power point
 
Diagrama de Colaboración
Diagrama de ColaboraciónDiagrama de Colaboración
Diagrama de Colaboración
 
Diseño fisico
Diseño fisicoDiseño fisico
Diseño fisico
 
Microsoft Access
Microsoft AccessMicrosoft Access
Microsoft Access
 
Bases De Datos Paralelas
Bases De Datos ParalelasBases De Datos Paralelas
Bases De Datos Paralelas
 
Jerarquía de clases de awt
Jerarquía de clases de awtJerarquía de clases de awt
Jerarquía de clases de awt
 
Visual basic
Visual basicVisual basic
Visual basic
 
5.1 estructura de una clase.
5.1 estructura de una clase.5.1 estructura de una clase.
5.1 estructura de una clase.
 
Diagramas UML: Componentes y despliegue
Diagramas UML: Componentes y despliegueDiagramas UML: Componentes y despliegue
Diagramas UML: Componentes y despliegue
 
Uso de access
Uso de accessUso de access
Uso de access
 
Glosario de terminos de base de datos
Glosario de terminos de base de datosGlosario de terminos de base de datos
Glosario de terminos de base de datos
 

Destacado

Manual visual basic 6.0
Manual visual basic 6.0Manual visual basic 6.0
Manual visual basic 6.0Dunkherz
 
Química2 bach 2.5. propiedades químicas
Química2 bach 2.5. propiedades químicasQuímica2 bach 2.5. propiedades químicas
Química2 bach 2.5. propiedades químicasTarpafar
 
áLbum de fotografías belgrano
áLbum de fotografías belgranoáLbum de fotografías belgrano
áLbum de fotografías belgranograasuncion
 
Cte segunda sesion primaria 2014 2015 pdf
Cte segunda sesion primaria 2014 2015 pdfCte segunda sesion primaria 2014 2015 pdf
Cte segunda sesion primaria 2014 2015 pdfyuuki_88
 
Precios basados en_la_demanda
Precios basados en_la_demandaPrecios basados en_la_demanda
Precios basados en_la_demandadotadotadota
 
Aspiraciones para este año
Aspiraciones para este añoAspiraciones para este año
Aspiraciones para este añoNZV27
 
JANI DUEÑAS: SU CONSAGRACIÓN EN VIÑA
JANI DUEÑAS: SU CONSAGRACIÓN EN VIÑAJANI DUEÑAS: SU CONSAGRACIÓN EN VIÑA
JANI DUEÑAS: SU CONSAGRACIÓN EN VIÑALee Hoy
 
CasaAzuma_ TadaoAndo
CasaAzuma_ TadaoAndoCasaAzuma_ TadaoAndo
CasaAzuma_ TadaoAndocatedrabueno
 
Concurso excepcional de reubicacion
Concurso excepcional de reubicacionConcurso excepcional de reubicacion
Concurso excepcional de reubicacionRnz Md
 
Importancia de PACIE en los EVAs
Importancia de PACIE en los EVAsImportancia de PACIE en los EVAs
Importancia de PACIE en los EVAsosquelo
 
Aprendizaje colaborativohumberto rojas
Aprendizaje colaborativohumberto rojasAprendizaje colaborativohumberto rojas
Aprendizaje colaborativohumberto rojasmamber1992
 

Destacado (20)

Manual visual basic 6.0
Manual visual basic 6.0Manual visual basic 6.0
Manual visual basic 6.0
 
Química2 bach 2.5. propiedades químicas
Química2 bach 2.5. propiedades químicasQuímica2 bach 2.5. propiedades químicas
Química2 bach 2.5. propiedades químicas
 
AMISTAD
AMISTADAMISTAD
AMISTAD
 
El toro
El toroEl toro
El toro
 
Actividad 2
Actividad 2Actividad 2
Actividad 2
 
Casa poli
Casa poliCasa poli
Casa poli
 
áLbum de fotografías belgrano
áLbum de fotografías belgranoáLbum de fotografías belgrano
áLbum de fotografías belgrano
 
29.docx proyecto
29.docx proyecto29.docx proyecto
29.docx proyecto
 
Cte segunda sesion primaria 2014 2015 pdf
Cte segunda sesion primaria 2014 2015 pdfCte segunda sesion primaria 2014 2015 pdf
Cte segunda sesion primaria 2014 2015 pdf
 
Precios basados en_la_demanda
Precios basados en_la_demandaPrecios basados en_la_demanda
Precios basados en_la_demanda
 
Aspiraciones para este año
Aspiraciones para este añoAspiraciones para este año
Aspiraciones para este año
 
JANI DUEÑAS: SU CONSAGRACIÓN EN VIÑA
JANI DUEÑAS: SU CONSAGRACIÓN EN VIÑAJANI DUEÑAS: SU CONSAGRACIÓN EN VIÑA
JANI DUEÑAS: SU CONSAGRACIÓN EN VIÑA
 
Casa rr
Casa rrCasa rr
Casa rr
 
Capitulo iv
Capitulo  ivCapitulo  iv
Capitulo iv
 
CasaAzuma_ TadaoAndo
CasaAzuma_ TadaoAndoCasaAzuma_ TadaoAndo
CasaAzuma_ TadaoAndo
 
Concurso excepcional de reubicacion
Concurso excepcional de reubicacionConcurso excepcional de reubicacion
Concurso excepcional de reubicacion
 
Ayudas tema 2
Ayudas tema 2Ayudas tema 2
Ayudas tema 2
 
Importancia de PACIE en los EVAs
Importancia de PACIE en los EVAsImportancia de PACIE en los EVAs
Importancia de PACIE en los EVAs
 
Cultura egipcia
Cultura egipciaCultura egipcia
Cultura egipcia
 
Aprendizaje colaborativohumberto rojas
Aprendizaje colaborativohumberto rojasAprendizaje colaborativohumberto rojas
Aprendizaje colaborativohumberto rojas
 

Similar a Progressbar

Webbrowser de vb 6.0 y vb.net
Webbrowser de vb 6.0 y vb.netWebbrowser de vb 6.0 y vb.net
Webbrowser de vb 6.0 y vb.netadezhiz
 
Visual basic
Visual basicVisual basic
Visual basicjosser96
 
Manual de netbeans_7(2)(2)(2)
Manual de netbeans_7(2)(2)(2)Manual de netbeans_7(2)(2)(2)
Manual de netbeans_7(2)(2)(2)javier_ot99
 
Procedures funciones
Procedures funcionesProcedures funciones
Procedures funcionesgerardd98
 
bases de datos desde visual basic
bases de datos desde visual basicbases de datos desde visual basic
bases de datos desde visual basicsantiagomario8
 
Desarrolla aplicaciones de escritorio con bases de datos
Desarrolla aplicaciones de escritorio con bases de datosDesarrolla aplicaciones de escritorio con bases de datos
Desarrolla aplicaciones de escritorio con bases de datosGabriel Hernadez Meza
 
Desarrolla aplicaciones de escritorio con bases de datos
Desarrolla aplicaciones de escritorio con bases de datosDesarrolla aplicaciones de escritorio con bases de datos
Desarrolla aplicaciones de escritorio con bases de datosEduardo_Staiti11
 
Conectar con bases de datos
Conectar con bases de datosConectar con bases de datos
Conectar con bases de datosRafael Quintero
 
Control Data
Control DataControl Data
Control Datanera24mx
 
fundamentos de programacion web
fundamentos de programacion webfundamentos de programacion web
fundamentos de programacion webaracely404
 
Desarrollas aplicaciones de escritorio:)
Desarrollas aplicaciones de escritorio:)Desarrollas aplicaciones de escritorio:)
Desarrollas aplicaciones de escritorio:)LuisSlz
 

Similar a Progressbar (20)

Webbrowser de vb 6.0 y vb.net
Webbrowser de vb 6.0 y vb.netWebbrowser de vb 6.0 y vb.net
Webbrowser de vb 6.0 y vb.net
 
Visual studio 2010
Visual studio 2010Visual studio 2010
Visual studio 2010
 
Visual basic
Visual basicVisual basic
Visual basic
 
Manual de netbeans_7(2)(2)(2)
Manual de netbeans_7(2)(2)(2)Manual de netbeans_7(2)(2)(2)
Manual de netbeans_7(2)(2)(2)
 
Procedures funciones
Procedures funcionesProcedures funciones
Procedures funciones
 
Funciones
FuncionesFunciones
Funciones
 
Procedures funciones
Procedures funcionesProcedures funciones
Procedures funciones
 
bases de datos desde visual basic
bases de datos desde visual basicbases de datos desde visual basic
bases de datos desde visual basic
 
Doctrine symfony
Doctrine symfonyDoctrine symfony
Doctrine symfony
 
Doctrine symfony
Doctrine symfonyDoctrine symfony
Doctrine symfony
 
Visual basic 1º Año
Visual basic  1º AñoVisual basic  1º Año
Visual basic 1º Año
 
Desarrolla aplicaciones de escritorio con bases de datos
Desarrolla aplicaciones de escritorio con bases de datosDesarrolla aplicaciones de escritorio con bases de datos
Desarrolla aplicaciones de escritorio con bases de datos
 
Desarrolla aplicaciones de escritorio con bases de datos
Desarrolla aplicaciones de escritorio con bases de datosDesarrolla aplicaciones de escritorio con bases de datos
Desarrolla aplicaciones de escritorio con bases de datos
 
Conectar con bases de datos
Conectar con bases de datosConectar con bases de datos
Conectar con bases de datos
 
Control Data
Control DataControl Data
Control Data
 
fundamentos de programacion web
fundamentos de programacion webfundamentos de programacion web
fundamentos de programacion web
 
Desarrollas aplicaciones de escritorio:)
Desarrollas aplicaciones de escritorio:)Desarrollas aplicaciones de escritorio:)
Desarrollas aplicaciones de escritorio:)
 
Python django
Python djangoPython django
Python django
 
Controles aspnet.
Controles aspnet.Controles aspnet.
Controles aspnet.
 
Reportes
ReportesReportes
Reportes
 

Progressbar

  • 1. 1 - Descripción del control El control ProgressBar nos permite medir el progreso de una tarea o proceso en nuestro programa Este control viene con el conjunto de controles que se incorporan en el ocx MsComctl32.ocx con el nombre de Microsoft Windows Common Control 6 Una vista previa del control ProgressBar:
  • 2. Si bien es posible crear barras de progreso sin utilizar un control adicional, mediante el ProgressBar podemos implementar de una manera rápida y fácil, mediciones de progreso de una determinada tarea 2 - Propiedad Value , Max y Min Este control posee 3 propiedades fundamentales para trabajar en el código a la hora de mostrar dicho progreso en la barra. Estas tres propiedades principales son: Value: Propiedad que indica el valor actual de la barra, o mejor dicho del proceso que estamos midiendo Max : La Propiedad Max establece el valor máximo para la barra o proceso Min : Establece el valor mínimo. Nota: Este control también posee otras propiedades, pero que no son determinantes y que están relacionadas mas a su aspecto gráfico. 3 - Un ejemplo simple para ver como funciona el control Este ejemplo consite en generar un bucle For-Next desde 0 hasta 5000, y en cada pasada del bucle, se irá asignando el valor de la misma a la propiedad Value del control.
  • 3. Al Progressbar, en la propiedad Min le establecemos el valor 0. A la propiedad Max el valor máximo del proceso y la propiedad Value tomará como valor el valor de x, la variable del For - Next Para el ejemplo agregar los siguientes controles en un formulario: 1 Control Label llamado Label1 1 Botón de comando llamado Command1 1 Un control ProgressBar con el nombre ProgressBar1 Pegar el siguiente Código fuente en el Formulario: Private Sub Command1_Click() Dim x As Long ' Generamos un ciclo For For x = ProgressBar1.Min To ProgressBar1.Max ' Mostramos la veriable x (el value) en Label1 Label1 = x ' Usamos DoEvents para poder visualizar el conteo en el Label DoEvents ' Asignamos en la propiedad Value del control ProgressBar _ el valor de x para ir incrementando la barra de progreso ProgressBar1.Value = x Next x End Sub Private Sub Form_Load() 'Le asignamos las propiedades para el mínimo, máximo valor del Progress bar With ProgressBar1 .Max = 5000 .Min = 0 .Value = 0 End With End Sub Las propiedades Min y Value pueden establecérsele valores como mínimo de 0, osea que un valor inferior a 0 producirá un error 380 en tiempo de ejecución, la descripción del error es:
  • 4. El valor de la propiedad no es válido El ProgressBar no tiene ninguna Propiedad para medir el porcentaje. Para el ejemplo anterior podríamos hacerlo de esta manera, y mostrar además de la barra de progreso, un porcentaje del mismo utilizando un control Label, como muestra este gráfico: Private Sub Command1_Click() 'Le establecemos un valor para el máximo ProgressBar1.Max = 50500 For i = 0 To ProgressBar1.Max ' Valor actual del Progressbar ProgressBar1.Value = i ' Visualizamos el porcentaje en el Label Label1 = CLng((ProgressBar1.Value * 100) / ProgressBar1.Max) & " %" DoEvents Next End Sub 4 - Propiedad Scrolling Para cambiar el aspecto gráfico del Progressbar, hay una propiedad llamada Scrolling. Esta tiene 2 valores posibles, 0 y 1. Si le colocamos esta propiedad en 0, el Progress tendrá una vista dividida por recuadros. Si tiene el valor 1, la barra de progreso es continua, como se ve en la siguiente imagen
  • 5. 5 - Ejemplo 2 Ahora un ejemplo que tenga algún sentido mas práctico que el visto al comienzo (por lo menos un poco mas de sentido) Este consiste en agregar en un control ListBox la fecha de modificación de todos los archivos de un directorio, y mostrar en la barra de progreso el tiempo que tarda. Para este ejemplo hay que agregar un control DirListBox llamado Dir1, un FileListBox File1, un Progressbar1, un Label1, un ListBox llamado List1 y un Command1 como está en la imagen: El código fuente del formulario es el siguiente: Private Sub Command1_Click()
  • 6. 'Borrmos el contenido del ListBox List1.Clear 'Si no hay archivos en el directorio salimos de la rutina If File1.ListCount = 0 Then MsgBox "No hay archivoes en el directorio": Exit Sub End If 'Le indicamos como valor máximo al progressbar la cantidad _ de archivos que tiene el control ProgressBar1.Max = File1.ListCount For i = 0 To File1.ListCount - 1 'Agregamos la fecha de modificción del archivo en el List1 _ con la función FileDateTime de visual basic List1.AddItem FileDateTime(Dir1.Path & "" & File1.List(i)) 'Asignamos al Value el valor de i ProgressBar1.Value = i + 1 'Mostramos el porcentaje en el Label1 Label1 = CLng((ProgressBar1.Value * 100) / ProgressBar1.Max) & " %" DoEvents Next End Sub Private Sub Form_Load() 'Le indicamos al FileListBox que liste todos los ficheros, _ ocultos, de sistema etc... With File1 .Archive = True .Normal = True .ReadOnly = True .Hidden = True .System = True End With End Sub Private Sub Dir1_Change() File1 = Dir1 End Sub En el ejemplo anterior, se visualiza por medio de un DirListBox y un FileListBox, los archivos de la pc. Al presionar el Command1 se recorre toda la lista del control File1
  • 7. (mediante la propiedad List) y se recupera y se agrega con la función FileDateTime de Visual Basic la fecha de modificación de los archivos en el control ListBox. Nota: Tener en cuenta que al listar un directorio que tiene pocos archivos, el progreso no se podrá visualizar ya que va a ser muy rápido, en cambio si listás un directorio con muchos ficheros, como por ejemplo el directorio de sistema de windows ( System32 en xp ), el progreso lo vas a poder visualizar correctamente. Hay otras propiedades como se mencionaron para este control, pero no son importantes, y están mas relacionadas a la visualización y disposición del mismo, como Orientation, BorderStyle, Scrolling etc... 6 - Barra de progreso con los temas de xp Una forma de poder aplicar los diferentes temas de windows Xp a las barras de progreso, es mediante el siguiente control ocx gratuito que los podés descagrar desde este enlace : Ocx Windows XP C1 Vista de los diferentes estilos Tema Win XP OliveGreen ( verde oliva ) Tema Win XP Silver Theme ( plateado )
  • 8. Tema Win XP Silver Theme ( Clásico ) Contenido 1 - Introducción 2 - Métodos principales del control WebBrowser 3 - Método Navigate 4 - Método GoBack y GoForward 5 - Método Refresh 6 - Método GoHome 7 - Método Stop 8 - Propiedades principales del control WebBrowser 9 - Eventos principales del control WebBrowser 10 - Evento NavigateError 11 - Evento ProgressChange 12 - Evento NewWindow2 13 - Evento StatusChange 14 - Evento NavigateComplete2 15 - Controles necesarios para crear el Navegador 16 - Código fuente para el navegador 17 - Código para el botón para Navegar 18 - Código para cuando se produce un error ( Evento NavigateError ) 19 - código para redimensionar los controles del formulario 20 - código para mostrar en el combobox de direcciones, la Url que se está cargando 21 - Abrir una nueva instancia del navegador para los popup 22 - Código para hacer la Barra de progreso Nota: En el siguiente enlace hay una lista de ejemplos relacionados al control Webbrowser de vb 6.0 y vb.net : Enlaces relacionados al control webBrowser 1 - Introducción Para crear el explorador se utiliza el Ocx ( que en realidad es una DllActivex) llamado Microsoft Internet Controls. Este se agrega desde el menú Proyecto - componentes
  • 9. Una vez que lo marcas, es decir que lo agregas al proyecto, se verá el siguiente control en el cuadro de controles del IDE de visual basic
  • 10. 2 - Métodos principales del control WebBrowser Antes de comenzar a crear el navegador de ejemplo, se describen los principales métodos del control WebBrowser en lo que se refieren a la navegación y carga de las páginas: Método Navigate Método GoBack Método GoForward Método Refresh Método GoHome Método Stop 3 - Método Navigate El método Navigate es el que permite cargar una página en el control Web. El único parámetro que necesita dicho método es la Url para cargar el documento en el control. Por ejemplo si quisiera cargar la página de google, se haría asi ControlWeb.Navigate "http://www.google.com" 4 - Método GoBack y GoForward El método GoBack y el método GoForward se utilizan para navegar a la página anterior y página siguiente (si es que las hay). 5 - Método Refresh Método que se utiliza para actualizar la página cargada en el WebBrowser, es decir la vuelve a recargar 6 - Método GoHome Se utiliza para cargar la página de inicio que esté establecida en el programa Internet explorer en la sección de opciones, este valor está guardado en el registro de Windows, Esto es porque el control web está basado en el dicho control. Si quisieramos configurar nuestra propia página de inicio, tendríamos que guardar la url en alguna parte, y cargarla con el método Navigate por ejemplo
  • 11. 7 - Método Stop Por último el Método Stop detiene la carga de la página que actualmente se está cargando. Todos estos métodos, excepto el método Navigate, no requieren parámetros, solo llamarlos para que hagan lo que tienen que hacer 8 - Propiedades principales del control WebBrowser Las propiedades principales son: Propiedad LocationName Propiedad LocationURL La propiedad LocationName devuelve el título de la página que cargamos en el control webBrowser. Por ejemplo si cargáramos la mítica web del guille: www.elguille.info , esta propiedad devolvería: "El Guille la web de la programación etc..", es decir la descripción de la página que está definida en las etiquetas "Title" del documento cargado La propiedad LocationUrl lo que nos devuelve es la dirección http del documento cargado en el control WebBrowser. Este control tiene otras propiedades, pero para el ejemplo por ahora basta con nombrar estas 2 9 - Eventos principales del control WebBrowser Los principales eventos del control son: Evento NavigateError Evento ProgressChange
  • 12. Evento NewWindow2 Evento StatusTextChange Evento NavigateComplete2 El control web tiene muchos otros eventos aparte de estos 5, algunos sinceramente no tengo idea para que son, pero en el ejemplo se usarán solo estos 10 - Evento NavigateError El evento NavigateError se dispara o ejecuta cada ves que al cargar una página, se produce un error en la carga 11 - Evento ProgressChange El evento ProgressChange nos sirve para ver el progreso de descarga del documento o de los documentos, ya que al cargar una página se pueden estar descargando varios elementos, no solo la página a la que navegamos. En el ejemplo del navegador, con este evento , se creará una barra de progreso para poder visualizar el porcentaje de descarga de la página en la que estamos navegando 12 - Evento NewWindow2 Se ejecuta cuando se abre una ventana de tipo PopUp o las llamadas páginas de tipo _Blank. Por defecto en el control webBrowser, si presionamos en un enlace que abre una ventana PopUp, se abre una nueva instancia del Internet Explorer. Para que no ocurra esto en el programa y se pueda abrir la página en una instancia de nuestro navegador, utilizaremos este evento para detectar cuando suceda esto, mediante una variable llamada cancel , y que cancela la ejecución del navegador predeterminado, y al crear una instancia nueva de nuestro formulario, se cargará esa página en este nuevo formulario . 13 - Evento StatusChange Este evento tiene un parámetro llamado Text. Ese valor nos devuelve el estado de la navegación, es decir nos muestra la url que se está navegando o las url que se están navegando. Cuando termina de descargarse todo, la variable Text posee el valor "Listo".
  • 13. También esta variable cambia cuando el mouse pasa encima del control Webbrowser, por ejemplo encima de un enlace, y se refleja en esta variable. En este evento es donde hay que poner una especie de barra de estado, label o lo que sea. 14 - Evento NavigateComplete2 Se produce cuando se ha podido navegar a la url, esto no quiere decir que el documento o la página este completamente descargada 15 - Controles necesarios para crear el Navegador Nota: los controles dentro del Picture no importa que estén ordenados, ya que se acomodan y posicionan en tiempo de ejecución, por eso se ve de esa manera en la imagen
  • 14. La vista previa anterior muestra la ventana de diseño y los controles para agregar. Como podés ver no usé iconos ni nada, eso lo podés hacer vos a tu gusto. Tampoco se utilizó un control ToolBar de Visual Basic, si no que se colocó un control PictureBox que contiene los botones para navegación. También contiene una barra de progreso, un combobox para la barra de direcciones, el control webbrowser debajo del control Picture, y debajo del control Webbrowser un control Label que será el que muestre el enlace actual de descarga de las páginas y el estado de descarga, mostrando la url, sería como el statusbar o barra de estado. Pasos a seguir para agregar los principales controles en el formulario: 1. Agregar un control PictureBox llamado PicToolBar. Colocarlo en la parte superior del formulario como está en la imagen. No colocarle el ancho ni el alto a mano, ya que se redimensionará cuando se cargue el formulario y se ubicará en el lugar correcto 2. Colocar un arreglo de CommandButton , o un ocx de botones, o lo que mas te guste, y al nombre del arreglo botones renombrarlo a cmdtoolBar. En total tienen que ser 5, es decir desde el cmdtoolBar(0) hasta el cmdtoolBar(4) También Colocarle los Caption a los botones en el orden como está en la imagen, el primero sería la flecha "<" que sería el botón que navega hacia la página anterior, el segundo (cmdToolbar(1) ) ">", la página siguiente, hasta el último que dice Inicio (cmdtoolBar(4)). 3. Debajo de esto, colocar un control Label llamado LblDir, y en el Caption del Label escribir "Dirección". Al igual que los otros controles , no lo ubiques en el orden correcto, colocalo en cualquier lado, ya que se posiciona mediante código, Pero si o si debe estar dentro del PictureBox mencionado antes. 4. Agregar un ComboBox llamado CboDir dentro del Picture. Este combo será la barra de direcciones. 5. Agregar un Command Button llamado cmdNavigate, que será el que navegará a la página cuando se escriba una dirección en el CboDir (barra de direcciones) y se pulse navegar. Escribir en el Caption del botón "Navegar" o "ir" o lo que quieras. 6. Fuera del Picture, es decir dentro del formulario, dibuja o agrega un control WebBrowser llamado WebBrowser (como está en la imagen) 7. Insertar un control Label llamado lblStatusbar, que en la imagen está como "Label1". Este control se posicionará en la parte inferior del formulario cuando se esté ejecutando el programa, justo debajo del control WebBrowser y mostrará el estado de las url que se están cargando. También este Label visualiza la dirección url cuando pasas el mouse por encima de un enlace como se comentó. 8. Por último colocar, dentro del PicToolBar, un control ProgressBar para la barra de progreso ( Yo no usé el Progressbar del visual basic que se agrega con el Ocx "Microsoft Windows Common Controls 6.0", ya que este ocx, trae varios ocx y el peso del archivo es de 1 MB y no valía la pena usar solo el Progressbar y cargar todos los demás ocx que no se usarán. Si querés podes usar un Ocx que pesa 90 Kb (es muy liviano) y es mucho mejor que el de Visual basic ya que
  • 15. tiene muchas otras opciones que no posee el Progressbar del vb. Lo podés bajar desde acá y es gratuito: Ocx para barra de progreso 9. Por último, al formulario Form1 colocarle el nombre FrmWeb 16 - Código fuente para el navegador Ahora se agregará el procedimiento para los botones cmdToolBar: Private Sub cmdtoolBar_Click(Index As Integer) On Error GoTo mensajeError Select Case Index Case 0 WebBrowser.GoBack 'ir a la página anterior Case 1 WebBrowser.GoForward 'Siguiente página Case 2 WebBrowser.Stop 'Detener la carga de la página Case 3 WebBrowser.Refresh ' Actualizar la página Case 4 WebBrowser.GoHome 'Ir a la página de inicio End Select Exit Sub 'rutina de Error mensajeError: If Err.Number = -2147467259 Then Resume Next MsgBox Err.Description End If End Sub 17 - Botón Navegar - cmdNavigate El código para cargar la página que se escriba dentro del combobox llamado cboDir cuando pulsemos el botón cmdNavigate es muy simple, y como se comentó antes
  • 16. utiliza el método Navigate del control webBrowser. Agrega el código en el formulario principal: Private Sub cmdNavigate_Click() If CboDir <> "" Then 'Navegamos a la página con el método Navigate pasandole la _ dirección del combobox cboDir WebBrowser.Navigate Trim$(CboDir) End If End Sub Para que cuando se pulse la tecla Enter, también se navegue a la página escrita en la barra de direcciones, es decir no solo cuando pulsamos dicho botón, hay que establecer la propiedad Default del botón cmdNavigate en True. Pero también aparte de esto hay que impedir que los botones del formulario retengan el foco, ya que si tienen el foco, por ejemplo el botón "inicio" por decir uno, al presionar la tecla Enter, no se ejecutará el botón cmdNavigate para navegar a la página, para esto podemos hacer que cuando reciban el foco, se lo pasemos al formulario: pega entonces esta rutina: Private Sub cmdtoolBar_GotFocus(Index As Integer) 'Le establecemos el foco al formulario Me.SetFocus End Sub Ahora se añade el código para que cuando se presione click en una dirección del combo cboDir se navegue a la página: Private Sub CboDir_Click() 'Cuando hacemos click en una url del combo cargamos dicha página WebBrowser.Navigate CboDir End Sub 18 - Código para cuando se produce un error ( Evento NavigateError )
  • 17. Cada ves que se produce un error al intentar navegar a una dirección inexistente, o que no se pudo localizar, se dispara el evento NavigateError. Dentro de este procedimiento, pondremos solo un mensaje indicando la Url que dió el error, a modo de información: Private Sub WebBrowser_NavigateError(ByVal pDisp As Object, URL As Variant, _ Frame As Variant, StatusCode As Variant, _ Cancel As Boolean) 'Si se produce un error se dispara este evento y mostramos el mensaje con la 'url del parámetro NavigateError MsgBox "No se puede navegar a la Dirección: " & vbNewLine & URL, vbCritical, "Error" End Sub 19 - Procedimiento para posicionar y redimensionar los controles del formulario Este procedimiento, coloca los controles en la ubicación correcta, no se ejecuta en el evento resize del formulario, ya que solo se debe posicionar y redimensionar una sola ves cuando se carga el formulario, por eso lo ponemos en el evento Load del Form: El procedimiento se llama redimensionarControles y es el siguiente: Private Sub RedimensionarControles() On Local Error Resume Next Dim ancho As Integer 'Para posicionar los cmdcontrol cmdtoolBar.Item(0).Move 10, 25 For i = 1 To cmdtoolBar.Count - 1 ancho = cmdtoolBar(i).Width + ancho cmdtoolBar(i).Move ancho, 25 Next 'Para posicionar el PicToolBar
  • 18. PicToolBar.Move 25, 0, Screen.Width - 50, cmdtoolBar(0).Height + CboDir.Height + 200 'Para posicionar el combo cboDir CboDir.Move LblDir.Width + 100, cmdtoolBar(0).Height + cmdtoolBar(0).Top + 100, PicToolBar.ScaleWidth - cmdNavigate.Width - 150 - LblDir.Width 'Para posicionar el Label que dice direccion lblDir LblDir.Move 50, CboDir.Top + 50 'Para posicionar el botón cmdNavigate cmdNavigate.Move CboDir.Left + CboDir.Width + 50, CboDir.Top, cmdNavigate.Width - 100 'Para redimensionar y posicionar el control WebBrowser WebBrowser.Move 10, PicToolBar.Height + 50, Screen.Width - 25, Screen.Height - PicToolBar.ScaleHeight - 1200 'Para el Label de la barra de estado lblStatusbar.Move 150, WebBrowser.Top + WebBrowser.Height + 100, Screen.Width - 300 'Para posicionar la barra de progreso (Progressbar) ProgressBar.Left = cmdtoolBar(4).Left + cmdtoolBar(4).Width + 50 End Sub Procedimiento para quitar la propiedad TabStop de todos los controles del formulario menos del control WebBrowser y del control CboDir (combo de la barra de direcciones) Para quitar el TabStop de todos los controles para no poder movernos con la tecla tab, podríamos hacerlo uno por uno, pero mejor es de esta manera, ya que si se agregan otros controles nuevos, nos despreocupamos de volver a establecer la propiedad manualmente, ya que el bucle recorrerá todos los controles, y solo dejará con la propiedad TabStop en true del control WebBrowser y del Combo de las direcciones url Private Sub QuitartabStop() On Error Resume Next Dim i As Integer, ctl As Control For Each ctl In Me.Controls 'Deshabilitamos la propiedad TabStop de todos los controles, exepto del control WebBrowser 'y del control cboDir (barra de direcciones) If Not TypeOf ctl Is WebBrowser And Not TypeOf ctl Is ComboBox Then
  • 19. ctl.TabStop = False End If Next ctl 'Ponemos el botón que bavega (cboNavigate) con la propiedad Default en True cmdNavigate.Default = True End Sub Procedimientos que se ejecutan en la carga del form En el evento Load del Form iría el siguiente código: Private Sub Form_Load() 'Autocompletamos la caché de windows cuando tipeamos en el cboDir Call AucompletarCache(CboDir) 'Ponemos en false la propiedad tabStop de los controles menos la _ del WebBrowser y la del Combo cboDir Call QuitartabStop 'Para posicionar y redimensionar los controles Call RedimensionarControles End Sub Los procedimientos QuitartabStop y RedimensionarControles, ya se vió anteriormente, ahora hay uno que no se explicó y es el procedimiento AutocompletarCahe. Este procedimiento hace uso de una función Api llamada SHAutoComplete y otra llamada FindWindow. Lo que hace esta rutina, es poder asignarle al control ComboBox las entradas de la caché de Windows (esto lo hace de forma automática), para que al escribir una coincidencia, se autodesplieguen las entradas de las páginas ya visitadas, si no entendés a lo que voy, mirando la siguiente imagen te va a quedar mas claro: Para poder hacer esto agregar un módulo bas, y pegar las siguientes declaraciones Api y el procedimiento AutocompletarCache
  • 20. Aclaro que esto lo descubrí gracias al amigo Leandro Ascierto, ya que yo lo sabía hacer pero utilizando un control textBox y no con un Combo. Para hacerlo con un combo hay que utilizar otra Api (FinWindowEx). 'Constantes Public Const SHACF_AUTOAPPEND_FORCE_OFF = &H80000000 Public Const SHACF_AUTOAPPEND_FORCE_ON = &H40000000 Public Const SHACF_AUTOSUGGEST_FORCE_OFF = &H20000000 Public Const SHACF_AUTOSUGGEST_FORCE_ON = &H10000000 Public Const SHACF_DEFAULT = &H0 Public Const SHACF_FILESYSTEM = &H1 Public Const SHACF_URLHISTORY = &H2 Public Const SHACF_URLMRU = &H4 Public Const SHACF_USETAB = &H8 Public Const SHACF_URLALL = (SHACF_URLHISTORY Or SHACF_URLMRU) 'Función Api SHAutoComplete para autocompletar la caché Public Declare Sub SHAutoComplete Lib "shlwapi.dll" (ByVal hwndEdit As Long, ByVal dwFlags As Long) Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long 'Procedimiento que recibe un combo como parámetro Public Sub AucompletarCache(cbo As ComboBox) Dim Handle As Long Handle = FindWindowEx(cbo.hWnd, 0, "edit", nullstring) SHAutoComplete Handle, SHACF_DEFAULT End Sub 20 - Mostrar en el combo de direcciones, la Url que se está cargando mediante el evento NavigateComplete2 Este evento como se dijo, se produce cuando al usar el método Navigate, se ha alcanzado la url solicitada, entonces utilizamos la propiedad locationUrl para mostrarla en el combo cboDir
  • 21. Private Sub WebBrowser_NavigateComplete2(ByVal pDisp As Object, URL As Variant) 'Mostramos la url que se está cargando en el combo CboDir = WebBrowser.LocationURL 'Agregamos la url al combo CboDir.AddItem WebBrowser.LocationURL 'Mostramos en el la barra de titulo del formulario el title _ de la página con la propiedad LocationName Me.Caption = WebBrowser.LocationName End Sub 21 - Abrir una nueva instancia del navegador cuando se abra otra ventana en el evento NewWindow2 Como se había comentado antes, cuando hacemos click en un vínculo que se abre en otra ventana (las de tipo _Blank o PopUp ), se inicia el Internet Explorer o el navegador predeterminado que tengamos en el sistema para mostrar dicha página. Para evitar esto y poder abrirlo con una nueva instancia de nuestro formulario web,se puede hacerlo con el evento llamado NewWindow2. Este evento que se produce cada ves que un vinculo se abre en una nueva ventana, y el mismo tiene una variable como parámetro llamada Cancel. Al colocar esta variable en True, se cancela la ventana impidiendo que se abra el navegador predeterminado, de esta manera, mediante la sentencia New, creamos una copia del formulario y cargamos esa Url en la nueva instancia: El código fuente sería el siguiente: Private Sub WebBrowser_NewWindow2(ppDisp As Object, Cancel As Boolean) 'Cancelamos la ventana del explorador predeterminado Cancel = True 'Creamos una nueva instancia del navegador, es decir del formulario Set NuevaVentana = New FrmWeb NuevaVentana.Show 'lo hacemos visible 'cargamos la página en esta nueva ventana NuevaVentana.WebBrowser.Navigate lblStatusbar End Sub
  • 22. Private Sub Form_Unload(Cancel As Integer) 'Eliminamos la variable de tipo FrmWeb cuando descargamos el Formulario Set NuevaVentana = Nothing End Sub Ahora, para poder crear el formulario de tipo FrmWeb, es decir una nueva instancia , debemos declarar la variable, en la zona de declaraciones : 'Variable para crear la instancia del navegador Dim NuevaVentana As FrmWeb 22 - Código para la Barra de progreso El evento que se dispara y que va indicando el progreso de las descarga de los documentos en el control Web, es el evento ProgressChange. Este tiene 2 parámetros: Uno llamado ProgressMax y otro Progress. El código fuente para la barra de progreso es el siguiente: 'Evento ProgressChange del control WebBrowser que _ nos permite obtener los valores de descarga Private Sub WebBrowser_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long) On Error GoTo men 'El Máximo de la barra es la variable ProgressMax ProgressBar.Max = ProgressMax ProgressBar.Value = Progress If ProgressMax <= 0 Then ProgressBar.Visible = False Else ProgressBar.Visible = True End If Exit Sub
  • 23. 'Error men: If Err.Number = 380 Then Resume Next End Sub Bueno acá termina este simple Navegador web en visual basic. Se pueden agregar muchas otras opciones, como por ejemplo un botón para añadir páginas de favoritos, Historial etc... También un método interesante del control WebBrowser es ExecWb, este permite realizar varias operaciones, como por ejemplo abrir la ventana de búsqueda que usa el internet explorer, imprimir, guardar la página web , seleccionar texto, Copiar , Cortar, vista preeliminar del documento cargado, y varias otras opciones Si querés ver un ejemplo de como poder realizar esto último, en este enlace se muesta como hacerlo: Método ExecWb del control WebBrowser Ejemplo enviado por helmuth Schmelzer Campos Este es otro ejemplo de un navegador simple usando el control webbrowser : Descargar ... Y en este otro Link hay un código fuente de un navegador web con pestañas usando un control TabStrip