Autore Topic: [Risolto] Correggere codifica stringa percorso restituita da Drag.Data  (Letto 3370 volte)

Offline therock892

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
Ciao a tutti,
il problema che non sono riuscito a risolvere (e spero che qualcuno sia in grado di darmi una mano  :) ) è il seguente:

- quando provo a caricare un file tramite Drag and Drop ad es. su una PictureBox, che contiene al suo interno caratteri "speciali" (tipo spazi, lettere accentate ec..) il file non viene caricato e viene generato una Eccezzione (Not a object); in pratica non trova il file.

- caricando lo stesso file tramite una Dialog (es: DialogOpenFile) invece il file viene caricato correttamente.

Penso che il problema potrebbe essere dovuto ad una possibile codifica diversa con cui vengono restituite le stringhe dagli oggetti Drag e Dialog.

Infatti le stringhe restituite dei rispettivi file sono:

- tramite Drag and Drop: /home/luigi/Desktop/Gota_D'%C3%A1gua_by_Eiti_Kimura.jpg
- tramite Dialog: /home/luigi/Desktop/Gota_D'água_by_Eiti_Kimura.jpg

Penso sia un bug di Gambas, la versione di Linux che stò utilizzando è Ubuntu 14.04 64bit e Gambas 3.1.1

Un mega grazie a chi riesce ad aiutarmi a risolvere questo grattacapo!  ;D

Il codice:

Codice: vb [Seleziona]

Public Sub PictureBoxImage_Drop()
  
  Print Drag.Data
  LoadImage
  
End

Public Sub LoadImage()

  Dim filePicture As String
  Dim imagePicture As Image
  
  filePicture = Drag.Data
  Print filePicture
  
  filePicture = Right(filePicture, Len(filePicture) - 7)
  filePicture = Left(filePicture, Len(filePicture) - 2)
  
  Print filePicture
  
  imagePicture = Image.Load(filePicture)
  PictureBoxImage.Picture = imagePicture.Picture
  
  Catch
    Error.Text

End

Public Sub ButtonOpen_Click()

  Dim filePicture As String
  Dim imagePicture As Image
  
  If (Dialog.OpenFile() == False)
    
    Print Dialog.Path
    
    filePicture = Dialog.Path
    imagePicture = Image.Load(filePicture)
    PictureBoxImage.Picture = imagePicture.Picture
    
  Endif

End

« Ultima modifica: 16 Marzo 2014, 14:07:11 da therock892 »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #1 il: 15 Marzo 2014, 13:44:20 »
Si tratta effettivamente di un bug che andrebbe segnalato

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #2 il: 15 Marzo 2014, 15:52:42 »
- quando provo a caricare un file tramite Drag and Drop ad es. su una PictureBox, che contiene al suo interno caratteri "speciali" (tipo spazi, lettere accentate ec..) il file non viene caricato...


...hai provato a caricare con il Drag-Drop un file immagine avente invece un nome semplicissimo ?  Cosa succede ?...... :-X
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline therock892

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #3 il: 15 Marzo 2014, 17:10:37 »
Con i file senza caratteri strani funziona.
Sicuramente è un bug come ha conferermato anche Ceskho, magari adesso lo segnalo.
Se qualcuno sa come aggirare il bug nel frattempo ad es. convertendo la stringa in qualche modo..boh

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #4 il: 15 Marzo 2014, 18:14:06 »
Con i file senza caratteri strani funziona.

...ancora più strano.
Se, usando il tuo codice, io trasporto con il mouse (Drag) un file immagine (ad esempio chiamato: a.gif) e lo rilascio (Drop) all'interno di una PictureBox, ottengo comunque l'errore "Not an object", da te segnalato.  :-\
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #5 il: 15 Marzo 2014, 18:54:27 »
Con i file senza caratteri strani funziona.

...ancora più strano.
Se, usando il tuo codice, io trasporto con il mouse (Drag) un file immagine (ad esempio chiamato: a.gif) e lo rilascio (Drop) all'interno di una PictureBox, ottengo comunque l'errore "Not an object", da te segnalato.  :-\

A me funziona esattamente come dice therock892

Se trascino un'immagine sia png che gif che non contiene accenti funziona altrimenti mi dice che non è un oggetto.  :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #6 il: 15 Marzo 2014, 20:45:32 »
Allora... ho capito in pratica perché mi dava errore: usavo il componente grafico gb.qt4. Usando gli altri tipi di componenti grafici, l'errore non viene sollevato.
Confermo, però, che non viene accettato un percorso, o comunque un nome di file contenente caratteri particolari (ad esempio anche il semplice spazio).

Per ottenere un risultato funzionante, con il componente gb.qt4, ovviando anche al problema degli spazi e altri caratteri particolari presenti nella stringa del percorso del file, ho dovuto escogitare un codice di questo tenore:
Codice: gambas [Seleziona]

Public Sub Form_Open()

' Impostiamo la proprietà ".Drop" a "Vero" per consentire l'attivazione dell'evento del "Drop"
   PictureBox1.Drop = True

End


Public Sub PictureBox1_Drop()

  Dim dati, percorso, percorso_controllato As String
 
 
   dati = Drag.Data

   percorso = String.Mid(dati, 8, String.Len(dati) - 16 - 7)
 
   percorso_controllato = controllo(percorso)

   PictureBox1.Picture = Picture.Load(percorso_controllato)

End


Private Function controllo(percorsoFile As String) As String

 Dim b As Byte = 1
 Dim n As Byte
 Dim s1, s2 As String


  While b < Len(percorsoFile) + 1

    s1 = Mid(percorsoFile, b, 1)

    If s1 = "%" Then
      n = Val("&" & Mid(percorsoFile, b + 1, 2))
      s1 = Chr(n)
      b += 2
    Endif
  
    s2 &= s1
    
    Inc b
 
  Wend
 
  Return s2
 
End
« Ultima modifica: 15 Marzo 2014, 23:22:49 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #7 il: 15 Marzo 2014, 22:57:49 »
Ciao a tutti,
il problema che non sono riuscito a risolvere (e spero che qualcuno sia in grado di darmi una mano  :) ) è il seguente:

........

Penso di aver trovato una soluzione al tuo problema.
Qui di seguito il codice:

Codice: gambas [Seleziona]

Public Sub Form_Open()
   PictureBox1.Drop = True
End
Public Sub PictureBox1_Drop() 
   
 Print Drag.Data 
 LoadImage 
   
End 
 
Public Sub LoadImage() 
 
 Dim filePicture As String 
 Dim imagePicture As Image 
   
 filePicture = Drag.Data 
 Print filePicture 
   
 filePicture = Trim(Right(filePicture, Len(filePicture) - 7))
   
 Print filePicture
 
   
 PictureBox1.Picture = Picture.Load(Ripristina(filePicture)) 
 Catch
 Message.Info(Error.Text)
 
End 

Private Sub Ripristina(s As String) As String
 
  Dim s2 As String
  s2 = Replace(s, "%20", " ")
  Print s2
  s2 = Replace(s2, "%C3%B2", "ò")
  Print s2
  s2 = Replace(s2, "%C3%A0", "à")
  Print s2
  s2 = Replace(s2, "%C3%A8", "è")
  Print s2
  Return s2
End



L'apostrofo non dà errore mentre lo spazio e tutte le lettere accentate si, poi non saprei devi fare tutte le prove.
La funzione Ripristina() non è completa di tutti i casi e te la lascio completare volentieri  ;D poi fammi sapere ciao

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #8 il: 15 Marzo 2014, 23:23:34 »
Allora... ho capito in pratica perché mi dava errore: usavo il componente grafico gb.qt4. Usando gli altri tipi di componenti grafici, l'errore non viene sollevato.
Confermo, però, che non viene accettato un percorso, o comunque un nome di file contenente caratteri particolari (ad esempio anche il semplice spazio).
...
...

Ehi vuott non solo sei un protetto di San Midi ma sei anche un fenomeno in assoluto, ma caspiterina del codice che hai scritto l'unica frase che hai commentato è anche l'unica che sono in grado di capire da solo  :rotfl:

 :ciao:

Ps. ma il codice che avevi postato prima dove è finito?   :evil:
« Ultima modifica: 15 Marzo 2014, 23:33:28 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #9 il: 16 Marzo 2014, 00:25:08 »

Ps. ma il codice che avevi postato prima dove è finito?   :evil:

San Midi, ...sia sempre benedetto, mi ha suggerito una modifica per semplificare al massimo il codice.
« Ultima modifica: 16 Marzo 2014, 00:43:57 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #10 il: 16 Marzo 2014, 00:43:33 »
..... risolvere questo grattacapo!

ehmmm.... riguardo, invece, al tuo codice, io suggerirei questa soluzione:
Codice: gambas [Seleziona]

Public Sub PictureBoxImage_Drop()
  
  Print Drag.Data
  LoadImage
  
End

Public Sub LoadImage()

  Dim filePicture, percorso, percorso_controllato As String

  
   filePicture = Drag.Data
        
' Assegna alla variabile "percorso" la stringa contenuta
' nella variabile "filePicture", partendo dall'8° carattere:
    percorso = String.Mid(filePicture, 8, String.Len(filePicture))
      
' Invoca la funzione per gestire i caratteri speciali e gli spazi,
' passandole la stringa contenuta dalla variabile "percorso",
' priva di eventuali spazi alle sue estremità:
   percorso_controllato = controllo(Trim(percorso))
      
   PictureBoxImage.Picture = Picture.Load(percorso_controllato)
      
   Catch  
       Error.Text
  
End


Private Function controllo(percorsoFile As String) As String

 Dim b As Byte = 1
 Dim s1, s2 As String
 Dim n As Byte

' Il ciclo è attivo, finché la varibile "b" è inferiore al numero
' di caratteri più 1 della stringa contenuta nella variabile "percorsoFile":
  While b < Len(percorsoFile) + 1

' Legge il carattere della stringa contenuta nella variabile "percorsoFile"
' presente nella posizione indicata dall'attuale valore assunto dalla variabile "b":
    s1 = String.Mid(percorsoFile, b, 1)

' Se il carattere è uguale a "%"....
    If s1 = "%" Then

'...allora si prendono i due caratteri immediatamente successivi al carattere "%",
' i quali insieme rappresentano un numero esadecimale.
' Questi due caratteri vengono trasformati in un numero a rappresentazione decimale.
' Tali caratteri possono essere complessivamente 2 per rappresentare il codice esadecimale dello spazio;
' altrimenti essi saranno complessivamente 4 (e verranno raccolti in due cicli consecutivi), se si
' tratterà di un carattere speciale (ad esempio scrivete questo  Print Chr(&C3); Chr(&A8)  per ottenere in console il carattere: è ).
     n = Val("&" & Mid(percorsoFile, b + 1, 2))

' I valori a rappresentazione decimale vengono utilizzati dalla funzione "Chr()" per essere trasformati in caratteri.
' Da NOTARE, come mostrato prima, che ponendo insieme due valori particolari e ben determinati del codice ASCII esteso,
' restituiscono nella  rappresentazione della stringa il carattere speciale originario:
     s1 = Chr(n)
      b += 2

    Endif

    s2 &= s1
    
    Inc b
 
  Wend
 
  Return s2
 
End
« Ultima modifica: 16 Marzo 2014, 15:21:01 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline therock892

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #11 il: 16 Marzo 2014, 14:06:52 »
vuott ho provato il tuo codice e pare funzionare alla perfezione!  :D

Grazie mille a tutti, io avevo fatto delle prove con la funzione Conv, per provare a convertire i set di caratteri, ma senza risolvere niente!  ;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #12 il: 16 Marzo 2014, 15:27:01 »
...pare funzionare alla perfezione!  :D

Grazie al tuo nome ed all'immagine che riporta una chitarra San Midi t'ha aiutato !
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #13 il: 16 Marzo 2014, 15:36:40 »

ehmmm.... riguardo, invece, al tuo codice, io suggerirei questa soluzione:

 
Codice: gambas [Seleziona]
Roba di prima classe...



nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Correggere codifica stringa percorso restituita da Drag.Data
« Risposta #14 il: 16 Marzo 2014, 16:59:20 »
SECONDA


ehmmm.... riguardo, invece, al tuo codice, io suggerirei questa soluzione:

 
Codice: gambas [Seleziona]
Roba di prima classe...



Ho appena adesso provato a trascinare nella PictureBox l'immagine  ¬®Á ÑØ çüßĠğįřŽ ΛΞЏЂ.png e funziona anche con questo nome!

   

Cosa? Ah significa  “provino Pippa nuda.png” in Sgnptkernese e si pronuncia più o meno gna sbo sdrunfz stzfku punto pi enne gi.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro