Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

[SOLUCIONADO] Visual Basic 6 - No logro cargar solo un archivo, tienen que ser mas a la fuerza

Estas en el tema de Visual Basic 6 - No logro cargar solo un archivo, tienen que ser mas a la fuerza en el foro de Visual Basic clásico en Foros del Web. Llevo toda la mañana dándole vueltas y no se si es la resaca de anoche o que. Estoy haciendo una pequeñísima aplicación en Visual Basic ...
  #1 (permalink)  
Antiguo 06/04/2014, 05:50
UsuarioArroba
Invitado
 
Mensajes: n/a
Puntos:
Visual Basic 6 - No logro cargar solo un archivo, tienen que ser mas a la fuerza

Llevo toda la mañana dándole vueltas y no se si es la resaca de anoche o que. Estoy haciendo una pequeñísima aplicación en Visual Basic 6 que carga una o más imágenes en una matriz y después las abre en un control "Image1". Utilizando las teclas del control numerico, me desplazo imagen arriba o abajo recorriendo la matriz. Todo parecía funcionar perfectamente, pues siempre probaba con 5 imágenes, pero esta mañana de casualidad, cargué solo una y no se abría. A continuación pongo el código:

Código:
        Dim archivos() As String
        Dim i As Long, flag As String
        flag = cdlOFNAllowMultiselect Or cdlOFNExplorer Or cdlOFNHideReadOnly
        With CommonDialog1
        .FileName = ""
        .MaxFileSize = 32000
        .FLAGS = flag
        .ShowOpen
        End With
        archivos = Split(CommonDialog1.FileName, Chr(0))
        b = 0
        numero_archivos = UBound(archivos)
        For i = 0 To UBound(archivos)
        arraycant(b) = archivos(i)
        b = b + 1
        Next i
        Erase archivos
        If numero_archivos < 1 Then
        Else
        ruta = arraycant(0) + "\" + arraycant(1)
        Image1.Picture = LoadPicture(ruta)
        contador_imagen = contador_imagen + 1
        End If
Algunas variables que no aparecen declaradas en el código es porque son publicas, están declaradas al principio para poder acceder desde otras funciones o ventanas.

La variable b quizas no tenga sentido a simple vista, pero me sirve para otra función.
arraycant(0) almacena la ruta de la carpeta y las siguientes posiciones del array, por ejemplo arraycant(1), arraycant(2)... el nombre de las imágenes.
Como digo, cuando abro 2 o más archivos, no hay problemas. Pero cuando abro solo uno, no carga la imagen. Depurando, me he dado cuenta de que cuando abro un solo archivo, la variable "numero_archivos" vale 0, mientras que si abro dos archivos, vale 2. No lo comprendo, cuando abro uno debería valer 1.

No digo más, haber si alguno/a logra averiguar el error.

Por cierto, siento si el código está bastante guarreado, llevo muchos años sin programar y uno pierde las buenas costumbres. Para lo que lo necesito, me conformo con que funcione

Otro por cierto, si sabéis como puedo hacer en este mismo código para que al abrir el commondialog muestre solo archivos gif, jpg y bmp, me vendría bien, pero tener en cuenta que deben mostrarse los 3 a la vez, es decir, si la carpeta contiene un archivo de cada clase, deberían mostrarse los 3 al mismo tiempo, no mostrarse primero el gif, después al cambiar el filtro mostrarse el bmp... eso no me sirve de nada, lo que necesito es que se vean los 3 tipos a la vez y el resto de ficheros no.

Saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 06/04/2014, 12:09
UsuarioArroba
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Visual Basic 6 - No logro cargar solo un archivo, tienen que ser mas a la

Solucionado del siguiente modo:

Código:
        Dim archivos() As String
        Dim i As Long, flag As String
        flag = cdlOFNAllowMultiselect Or cdlOFNExplorer Or cdlOFNHideReadOnly
        With CommonDialog1
        .FileName = ""
        .MaxFileSize = 32000
        .FLAGS = flag
        .ShowOpen
        End With
        archivos = Split(CommonDialog1.FileName, Chr(0))
        b = 0
        numero_archivos = UBound(archivos)
        For i = 0 To UBound(archivos)
        arraycant(b) = archivos(i)
        b = b + 1
        Next i
        Erase archivos
        preruta = arraycant(0) + "\" + arraycant(1)
        letra = Right(preruta, 1)
        If letra = "\" Then
        ruta = Mid$(preruta, 1, Len(preruta) - 1)
        Label1.Caption = ruta
        Image1.Picture = LoadPicture(ruta)
        contador_imagen = contador_imagen + 1
        Else
        Label1.Caption = preruta
        Image1.Picture = LoadPicture(preruta)
        contador_imagen = contador_imagen + 1
        End If

Etiquetas: basic, todo, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:16.