picturebox desplazable dentro de formulario

graciela
29 de Enero del 2003
Alguien me puede ayudar con las lineas sgtes dado que segun la ayuda del VB puedo hacer, dentro de un formulario, un picturebox desplazable dentro de otro picturebox pero el mismo no funciona.
Cual es el error que cometo? como tienen que estar seleccionadas las opciones autoredraw, autosize, de cada uno de los controles?????



El evento Form_Load del formulario se utiliza para establecer el modo de escala, ajustar el tamaño del cuadro de imagen secundario dentro del cuadro de imagen primario, colocar y ajustar el tamaño de las barras de desplazamiento horizontal y vertical y, después, cargar un gráfico de mapa de bits. Agregue el código siguiente al procedimiento de evento Form_Load del formulario:

Private Sub Form_Load()

' Establece ScaleMode a píxeles.
Form1.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels

' Autosize se establece a True para que los bordes
' de Picture2 se ' expandan al tamaño del
' mapa de bits real.
Picture2.AutoSize = True

' Establece el BorderStyle de cada cuadro ' de imagen a Ninguno.
Picture1.BorderStyle = 0
Picture2.BorderStyle = 0

' Carga el mapa de bits.
Picture2.Picture = _
LoadPicture("c:WindowsWinlogo.bmp")

' Inicializa la ubicación de ambas imágenes.
Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, _
ScaleHeight - HScroll1.Height
Picture2.Move 0, 0

' Coloca la barra de desplazamiento horizontal.
HScroll1.Top = Picture1.Height
HScroll1.Left = 0
HScroll1.Width = Picture1.Width

' Coloca la barra de desplazamiento vertical.
VScroll1.Top = 0
VScroll1.Left = Picture1.Width
VScroll1.Height = Picture1.Height

' Establece la propiedad Max de las ' barras de desplazamiento.
HScroll1.Max = Picture2.Width - Picture1.Width
VScroll1.Max = Picture2.Height - Picture1.Height

' Determina si la imagen secundaria cabe en la
' pantalla.
Si es así, no son necesarias las ' barras de desplazamiento.
VScroll1.Visible = (Picture1.Height < _
Picture2.Height)
HScroll1.Visible = (Picture1.Width < _
Picture2.Width)

End Sub

El evento Change de los controles HScrollBar y VScrollBar se utiliza para mover el cuadro de imagen secundario de arriba abajo y de izquierda a derecha dentro del cuadro de imagen primario. Agregue el código siguiente al evento Change de ambos controles ScrollBar:

Private Sub HScroll1_Change()
Picture2.Left = -HScroll1.Valor
End Sub

Private Sub VScroll1_Change()
Picture2.Top = -VScroll1.Valor
End Sub

Las propiedades Left y Top del cuadro de imagen secundario se establecen al valor negativo de las barras de desplazamiento horizontal y vertical para que al desplazarse de arriba a abajo y de izquierda a derecha, la vista se mueva correctamente.


Cambiar el tamaño del formulario en tiempo de ejecución
En el ejemplo anterior, el tamaño visible del gráfico está limitado por el tamaño original del formulario. Para cambiar el tamaño de la aplicación de vista de gráficos cuando el usuario ajuste el tamaño del formulario en tiempo de ejecución, agregue el código siguiente al procedimiento de evento Form_Resize del formulario:

Private Sub Form_Resize()
' Cuando cambia el tamaño del formulario, cambian
' las dimensiones de Picture1.
Picture1.Height = Form1.Height
Picture1.Width = Form1.Width

' Reinicializa la posición de la imagen y de las
' barras de desplazamiento.
Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, _
ScaleHeight - HScroll1.Height
Picture2.Move 0, 0
HScroll1.Top = Picture1.Height
HScroll1.Left = 0
HScroll1.Width = Picture1.Width
VScroll1.Top = 0
VScroll1.Left = Picture1.Width
VScroll1.Height = Picture1.Height
HScroll1.Max = Picture2.Width - Picture1.Width
VScroll1.Max = Picture2.Height - Picture1.Width

' Comprueba si son necesarias las ' barras de desplazamiento.
VScroll1.Visible = (Picture1.Height < _
Picture2.Height)
HScroll1.Visible = (Picture1.Width < _
Picture2.Width)

End Sub



MUCHISIMAS GRACIAS


javierbalk
29 de Enero del 2003
Hola Graciela:

Bueno, primero verifica que el archivo "C:WindowsWinlogo.bmp" exista, sino usa otro, en mi caso usé "C:WindowsPrograma de instalación.bmp" para probar tu ejemplo.

Segundo: cambia Picture2.Left = - HScroll1.Valor a Picture2.Left = -HScroll1.Value y Picture2.Top = - VScroll1.Valor a Picture2.Top = - VScroll1.Value

La propiedad Valor no existe, si salía así en la ayuda es porque los traductores tradujeron erróneamente el nombre de la propiedad, las propiedades están en inglés.

Tercero: cambia el valor de las propiedades LargeChange de las barras de desplazamiento, un 50 creo que está bien.

Espero que te haya ayudado y lo hagas andar.

Saludos,
Javier

¿?
29 de Enero del 2003
_