Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Arrastrar Y Mostrar Imagen [Solucionado]

Arrastrar Y Mostrar Imagen [Solucionado]
Artículo
Responder citando    Descargar mensaje  
Mensaje Arrastrar Y Mostrar Imagen [Solucionado] 
 
Bueno, pues he retocado el primer mensaje.

Después solucionar el problema de la forma de cargar o asignar una imagen al tipo picture parece que ya funciona.

En esta parte de aquí del código:

...
 If anombre[0] = "file:" Then anombre.Remove(0) 'Eliminamos la palabra file:    
....
 


Lo que me devuelve el explorador de archivos es una cadena que contiene caracteres iguales que un enlace web. Mejor dicho una URI.
Para eliminar los elementos del array que no son necesario primero elimino la palabra file.
He abreviado un poco.

Código final:

' gambas class file

Public Sub PictureBox1_Drop()  
  
  Dim anombre As String[]
  Dim ruta As String  
  Dim palabra As String
  Dim pimagen As Picture
    
  ruta = Drag.Paste("text/uri-list")
  anombre = Split(ruta, "/", "\r\n", True)
  ruta = ""
  
  If anombre[0] = "file:" Then anombre.Remove(0) 'Eliminamos la palabra file:    
 
  
  For Each palabra In anombre
    ruta &= "/" & URLDecode(palabra)    
  Next
  
  pimagen = Picture[ruta]  
  
  With PictureBox1  
    .Picture = pimagen
    .Resize(pimagen.Width, pimagen.Height)  'Cambio el tamaño del picturebox al de la imágen
  End With  
  Me.Resize(pimagen.Width, pimagen.Height) 'Cambio el tamaño del formulario al de la imágen
  Me.Center
  
End

Public Sub PictureBox1_Drag()
  
  If Drag.Type <> Drag.Text Then Stop Event
  
End

Static Private Function URLDecode(txt As String) As String
  ''' Descodifica los caracteres hexadecimales en las URI's recorriendo la cadena dada
  ''' Params: txt la URI a descodificar
  ''' Return: la URI descodificada
  
  Dim txt_len As Integer
  Dim i As Integer
  Dim ch As String
  Dim digits As String
  Dim resultado As String
  
  resultado = ""
  txt_len = Len(txt)
  i = 1
  Do While i <= txt_len
    ' Examinar el siguiente caracter
    ch = Mid$(txt, i, 1)
    If ch = "+" Then
      ' Convertir a espacio
      resultado = resultado & " "
    Else If ch <> "%" Then
      ' Normal, no cambiar
      resultado = resultado & ch
    Else If i > txt_len - 2 Then
      resultado = resultado & ch
    Else
      ' Obtener los siguientes caracteres hex.
      digits = Mid$(txt, i + 1, 2)
      ' Debug digits
      ' aquí convertimos el valor hexadecimal a entero y
      ' se lo pasamos a Chr que devuelve el carácter correcto.
      resultado = resultado & Chr$(CInt(Val("&" & digits)))
      i = i + 2
    Endif
    i = i + 1
  Loop
  
  Return resultado
  
End

 


Aquí está el ejemplo corregido sin errores con la solución que ha propuesto Tincho.


Saludos

ArrastrarMostrarImagen.tar.gz
Descripción:  
Descargar
Nombre del archivo: ArrastrarMostrarImagen.tar.gz
Tamaño: 13.28 KB
Descargado: 66 veces
ArrastrarMostrarImagen.tar.gz
Descripción:  
Descargar
Nombre del archivo: ArrastrarMostrarImagen.tar.gz
Tamaño: 13.28 KB
Descargado: 66 veces
ArrastrarMostrarImagen.tar.gz
Descripción:  
Descargar
Nombre del archivo: ArrastrarMostrarImagen.tar.gz
Tamaño: 13.28 KB
Descargado: 66 veces




 
última edición por Shell el Viernes, 15 Julio 2016, 18:23; editado 2 veces 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 15 Julio 2016, 00:50 ]
 


Arrastrar Y Mostrar Imagen [Solucionado]
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Arrastrar Y Mostrar Imagen 
 
Parece no ir con todas las imágenes.

He tenido problemas con una imagen.

Si veo el array formado por cada división que se crea en anombre:

 fallo

Fijaros en el último elemento, el "cero".
Aunque yo dije esto en Split:

atmp = Split(anombre[anombre.max], "0:", "\r\n", True)
 


Obtengo en atmp esto:

 ultimoelementomal

No se ha quedado en un solo elemento nombre del archivo y la extensión.
A ver como se puede solucionar.

Otra cosa que quería comentar. Cada vez que soltamos una imagen en el picturebox, el formulario
debe centrarse.

Al principio se me ocurrió que por que no hacer eso en el resize del formulario. Pues eso no funciona.
Queda del centro a la derecha del escritorio.  

Una ayuda o una explicación de lo de arriba, please.

Si "0:" es el divisor en la sentencia split, ¿ cómo es que no lo ha dividido en dos partiendo de eso ?.

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 15 Julio 2016, 08:18 ]
Responder citando    Descargar mensaje  
Mensaje Re: Arrastrar Y Mostrar Imagen 
 
Si queréis os paso la imagen en cuestión...mmmm..pero luego no digáis nada...eeeeh ?.
Es solo una imagen.  



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 15 Julio 2016, 08:30 ]
Responder citando    Descargar mensaje  
Mensaje Re: Arrastrar Y Mostrar Imagen 
 
Algo de info:

File_URI_scheme

Menudo tocho para leer:    

The file URI Scheme draft-ietf-appsawg-file-scheme-03

 smiley_loco_51629_1468568402_647626

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 15 Julio 2016, 08:40 ]
Responder citando    Descargar mensaje  
Mensaje Re: Arrastrar Y Mostrar Imagen 
 
Obtengo un error en este comando:
.Resize(pimagen.Width, pimagen.Height)  'Cambio el tamaño del picturebox al de la imágen


Creo que no llega a cargar la imagen.

Por ejemplo, si tengo un archivo imagen, llamado 100.png, en esta ruta: /tmp/100.png
si voy a ver su ruta
ruta = Drag.Data
Print ruta

obtengo esto en console:

-12:-34:64:6400.png
no hay la palabra "file".

saludos



 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Viernes, 15 Julio 2016, 08:55 ]
Responder citando    Descargar mensaje  
Mensaje Re: Arrastrar Y Mostrar Imagen 
 
Vuott:

El problema es con el carácter "0". No lo hice tan bien como debiese.  

La palabra "file" es eliminada en:

...
 If anombre[0] = "file:" Then anombre.Remove(0) 'Eliminamos la palabra file:    
...
 


Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 15 Julio 2016, 08:58 ]
Responder citando    Descargar mensaje  
Mensaje Re: Arrastrar Y Mostrar Imagen 
 
Mas información sobre uri, url y urn

Localizador de recursos uniforme

Vaya nombre.  

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 15 Julio 2016, 09:00 ]
Responder citando    Descargar mensaje  
Mensaje Re: Arrastrar Y Mostrar Imagen 
 
Vuott:

Si usas el modo depuración y pasas el cursor por la palabra ruta, veras que aparece la palabra file.

 muestra_1468569858_828228

Probé a renombrar un archivo para ver el error.

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 15 Julio 2016, 09:04 ]
Responder citando    Descargar mensaje  
Mensaje Re: Arrastrar Y Mostrar Imagen 
 
Para que veas que aparece la palabra file.
Debes colocar un punto de ruptura en un lugar adecuado.
Ejemplo en la línea 13.

anombre = Split(ruta, "/", "\r\n", True)
 


 mostrarfile



Ah, no es que el código sea complejo. El complicado soy yo.  



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 15 Julio 2016, 09:12 ]
Responder citando    Descargar mensaje  
Mensaje Re: Arrastrar Y Mostrar Imagen 
 
Shell escribió: [Ver mensaje]
Vuott:

El problema es con el carácter "0". No lo hice tan bien como debiese.  

La palabra "file" es eliminada en:

...
 If anombre[0] = "file:" Then anombre.Remove(0) 'Eliminamos la palabra file:    
...
 


Saludos


No, porqué yo puse la raya antes de
...
 If anombre[0] = "file:" Then anombre.Remove(0) 'Eliminamos la palabra file:    
...
 



es decir:

Public Sub PictureBox1_Drop()  
  
  Dim anombre As String[]
  Dim ruta As String  
  Dim palabra As String
  Dim pimagen As Picture
  Dim atmp As String[]  
  
  ruta = Drag.Data

     Print ruta   <<==========

  anombre = Split(ruta, "/", "\r\n", True)
  ruta = ""
  
  If anombre[0] = "file:" Then anombre.Remove(0)



Saludos



 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Viernes, 15 Julio 2016, 09:12 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron