Gambas-it

Gambas3 => Programmazione => Topic aperto da: gianfry56 - 28 Dicembre 2016, 16:41:41

Titolo: [RISOLTO] Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 28 Dicembre 2016, 16:41:41
Il componente WebView può essere utilizzato per visualizzare una pagina HTML... e fin qui niente di nuovo.
Quello che mi serve è poter salvare una delle immagini presenti nella pagina, come normalmente facciamo nel web, con "Tasto destro/Salva immagine con nome..."

Però, cliccando su un'immagine, si presenta solo un popup con queste scelte:

Open Image
Save Image
Copy Image
Copy Image Address

delle quali mi sembra utilizzabile solo l'ultima (che effettivamente copia l'indirizzo web dell'immagine nella clipboard), mentre le altre tre sembra non facciano nulla...   :rolleyes:

Qualcuno conosce un metodo per utilizzare le prime tre opzioni di quel popup?
 :ciao: :ciao:
Titolo: Re:Domanda su WebView (salva immagini)
Inserito da: Gianluigi - 28 Dicembre 2016, 19:40:54
Suppongo tu ti stia riferendo al progetto Browser presente sulla Software farm.
Io non mi sono mai posto questo problema, comunque credo tu debba attivare la proprietà Editable per poter lavorare sulla webview e poi di base tu possa copiare ecc.
Se vuoi un comportamento tipo firefox suppongo che tu te lo debba creare da codice.

 :ciao: :ciao:
Titolo: Re:Domanda su WebView (salva immagini)
Inserito da: Gianluigi - 28 Dicembre 2016, 20:14:56


Open Image
Save Image
Copy Image
Copy Image Address

delle quali mi sembra utilizzabile solo l'ultima (che effettivamente copia l'indirizzo web dell'immagine nella clipboard), mentre le altre tre sembra non facciano nulla...   :rolleyes:

Qualcuno conosce un metodo per utilizzare le prime tre opzioni di quel popup?
 :ciao: :ciao:

A me l'unica che non funziona è Save Image le altre funzionano... vale a dire la prima apre l'immagine in una nuova finestra e Copy Image copia l'immagine che puoi ad esempio salvare in Inkskape o Libre Writer.

 :ciao: :ciao:
Titolo: Re:Domanda su WebView (salva immagini)
Inserito da: vuott - 28 Dicembre 2016, 20:17:54
Temo che la questione non sia gestibile attraverso il codice Gambas...   :-X
Titolo: Re:Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 28 Dicembre 2016, 21:09:43
Per utilizzare il 'Save Image' ho dovuto inserire questa:

Codice: [Seleziona]
Public Sub WebView1_Download(Download As WebDownload)
  Download.Path = System.User.Home &/ File.Name(Download.Url)
End

almeno così funziona  :)
 :ciao:
Titolo: Re:Domanda su WebView (salva immagini)
Inserito da: Gianluigi - 28 Dicembre 2016, 21:44:56
Per utilizzare il 'Save Image' ho dovuto inserire questa:

Codice: [Seleziona]
Public Sub WebView1_Download(Download As WebDownload)
  Download.Path = System.User.Home &/ File.Name(Download.Url)
End

almeno così funziona  :)
 :ciao:

Ma questo codice è già presente nel progetto WebBrowser  :-\
Titolo: Re:Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 28 Dicembre 2016, 21:55:15
E' vero che era presente, ma nella versione originale quel progetto non mi funzionava, non chiedermi perché, non l'ho capito.

Ci sono molte cose di quel progetto che non mi funzionano: ad esempio se crei un nuovo tab e digiti un nuovo indirizzo web, la pagina viene trovata (almeno così sembra dato che la caption cambia correttamente) ma non mostra il contenuto della pagina.... e via dicendo.
Può darsi che sia un problema mio, ma ne dubito  :nono:

 :ciao:
Titolo: Re:Domanda su WebView (salva immagini)
Inserito da: Gianluigi - 29 Dicembre 2016, 11:19:24
E' vero che era presente, ma nella versione originale quel progetto non mi funzionava, non chiedermi perché, non l'ho capito.
Ma non mi riesce di capire come faccia a funzionare, come fa a salvarti l'immagine su disco?

 :ciao:
Titolo: Re:Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 29 Dicembre 2016, 11:26:05
Quando scegli 'Save Image' scatena l'evento 'Download'
All'interno dell'evento devi dichiarare dove vuoi salvare l'immagine (come nell'esempio sopra) oppure scegliere di aprire la finestra di dialogo (come nell'esempio del progetto WebBrowser (che però mi dava problemi...)

 :ciao:
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: Gianluigi - 29 Dicembre 2016, 11:37:30
Si scusa hai ragione, io facevo le prove così:
Codice: [Seleziona]
Dialog.Path = System.User.Home &/ File.Name(Download.Url)
invece di usare la tua variazione diretta che salva l'immagine direttamente nella home:
Codice: [Seleziona]
Download.Path = System.User.Home &/ File.Name(Download.Url)

 :ok:
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: vuott - 29 Dicembre 2016, 14:54:36
Ritengo che su questo argomento vada creata un'apposita pagina della nostra Wiki.
Bisognerebbe di quel menu risolvere la maggior parte deile opzioni, quindi scrivere il testo e gli esempi pratici.

gianfry56, ...vuoi cominciare ?   (http://i278.photobucket.com/albums/kk119/BlonDee_NZ/new%20site%20images/writing1.gif)
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 29 Dicembre 2016, 15:03:24
Beh... io ho qualcosa... non molto, anche perché mi interessava sopratutto il download delle immagini (che ho risolto).

Bisognerebbe prendere in mano quel progetto WebBrowser e capire perché non và (almeno: a me per buona parte non funziona)
comunque mi metto d'impegno, e dove non ci arrivo io, chiederò aiuto   :-\

intanto iniziamo a far funzionare quel popup, e poi vediamo...

 :ciao:
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 29 Dicembre 2016, 20:40:56
Aiutatemi a capire, perché io sto perdendo la pazienza:  :-\ queste due funzioni dovrebbero essere equivalenti, però solo la prima salva l'immagine, mentre la seconda (quella che passa per la finestra di dialogo) non esegue il suo lavoro  :hard:
eppure il percorso è lo stesso... mi sfugge qualcosa?  :rolleyes:

Codice: [Seleziona]
Public Sub WebView1_Download(Download As WebDownload)
  Download.Path = System.User.Home &/ File.Name(Download.Url)
End

Codice: [Seleziona]
Public Sub WebView1_Download(Download As WebDownload)
  Dialog.Path = System.User.Home &/ File.Name(Download.Url)
  If Not Dialog.SaveFile() Then
    Download.Path = Dialog.Path
  Endif
End

Datemi cortesemente un riscontro  :(
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: Gianluigi - 29 Dicembre 2016, 22:00:57
Anche per me non ha senso.
L'unica cosa che noto è che invece di aprire una Dialog.SaveFile apre una DirChooser e potrebbe essere proprio lì l'inghippo.
Ma ora non posso guardarci, se nessuno lo risolve domani ci darò un'occhiata.

 :ciao: :ciao:
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 29 Dicembre 2016, 23:17:27
Sto riscrivendo tutto il WebBrowser così, con l'occasione, mi faccio un'idea del suo meccanismo di funzionamento.

La buona notizia è che il bug principale di quel progetto, cioè il fatto che nei nuovi tab non fosse possibile caricare una pagina web oppure un'immagine, è risolto: bastava espandere il componente WebView (che altrimenti era di 8x8 px e comunque invisibile). Adesso tutto sembra funzionare al meglio.

Domani vedrò di verificare anche il meccanismo del download...

La cosa bella è che il programma può funzionare contemporaneamente da browser web e da editor HTML (seppur in maniera semplificata) e le prospettive di sviluppo sembrano buone.

Con l'occasione, visto che manca poco, un Buon Anno 2017 a tutti  :) :D ;D    :ciao: :ciao:
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: vuott - 29 Dicembre 2016, 23:53:00
...è come se l'apertura della finestra di dialogo di Gambas interferisse negativamente con il procedimento di scarico del file.    :-\
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: vuott - 30 Dicembre 2016, 00:53:01
Per ora sono riuscito a fare questa manovra, ma - seppur efficace - per niente soddisfacente per me programmatore:  :-X

Codice: [Seleziona]
Public Sub WebView1_Download(Download As WebDownload)

  Dim nomen, iter As String

   nomen = File.Name(Download.Url)

' Attribuisce un percorso "temporaneo" al file immagine da scaricare:'
   iter = Temp()

' Scarica il file immagine dalla pagina web nel percorso "temporaneo":'
   Download.Path = iter & nomen

' Fa apparire il nome del file nella finestra di dialogo:'
   Dialog.Path = nomen

' Apre la finestra di dialogo per salvare i file:'
   If Dialog.SaveFile() Then Return

' Sposta il file immagine dalla cartella temporanea, ove è stato scaricato, nella cartella prescelta:'
   Move iter & nomen To Dialog.Path

End
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: Gianluigi - 30 Dicembre 2016, 12:56:39
Io ottengo errori:
Il primo su questa riga:
Codice: [Seleziona]
' Apre la finestra di dialogo per salvare i file:'
   If Dialog.SaveFile() Then Return
Appare la finestra di dialogo, quindi l'errore vero e proprio (vedi immagini)

 :(
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: vuott - 30 Dicembre 2016, 13:20:29
Io ottengo errori:
Confermo che a me, invece, funziona regolarmente, sia con qt4 sia con qt5.


...problema extra-Gambas ?    :-\
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 30 Dicembre 2016, 13:33:24
Confermo un errore: anche a me Directory not found:
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: vuott - 30 Dicembre 2016, 13:41:50
Ho comunque l'impressione che non tutte le immagini possano essere scaricate.
Ad esempio dell'immagine del logo di Gambas, posta in alto a sinistra del forum, mi ritrovo solo un file avente nome ed estensione corrispondente, ma di dimensione pari a zero (niente dati insomma). Questo risultato negativo lo ottengo anche senza far aprire la finestra di dialogo di Gambas.
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 30 Dicembre 2016, 15:53:16
Ho comunque l'impressione che non tutte le immagini possano essere scaricate.
Confermo, ho anch'io questa impressione.

Dopo vari tentativi sono giunto ad una conclusione: il problema sembra proprio essere l'utilizzo della finestra di dialogo all'INTERNO della funzione di evento del Download, perché se io scelgo il percorso di salvataggio (con Dialog.SelectDirectory) prima di avviare il download e lo memorizzo in una variabile globale, allora la procedura va a buon fine; ovviamente dovrò utilizzare il nome originale del file che vado a salvare.

Codice: [Seleziona]
Public Sub WebView_Download(Download As WebDownload)
  Download.Path = gsPercorsoDiSalvataggio &/ File.Name(Download.Url)
End

Evidentemente l'apertura di Dialog dentro l'evento inibisce la procedura di download  :-\
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 30 Dicembre 2016, 16:10:23
Con questa variante posso anche consentire (come fanno normalmente i browser) di non sovrascrivere il file di destinazione se esiste, ma aggiungere un'estensione "(1)", "(2) ecc. ecc.

Codice: [Seleziona]
Public Sub WebView_Download(Download As WebDownload)
  Dim i As Integer = 0
  Do While True
    If Not Exist(gsPathDownload & File.BaseName(Download.Url) & IIf(i = 0, ".", " (" & i & ").") & File.Ext(Download.Url)) Then Exit
    Inc i
  Loop
  Download.Path = gsPathDownload & File.BaseName(Download.Url) & IIf(i = 0, ".", " (" & i & ").") & File.Ext(Download.Url)
End

 :ciao: :ciao:
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 30 Dicembre 2016, 17:21:02
Dopo aver fatto alcune correzioni, il progetto WebBrowser mi sembra perfettamente funzionante.
Se volete testarlo allego la mia versione.

 :ciao:
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: vuott - 30 Dicembre 2016, 18:31:51
...ora dunque concentrati sulla pagina, da scrivere, della Wiki su questo argomento.   (http://forum.ubuntu-it.org/images/smilies/whistle.gif)
Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: gianfry56 - 30 Dicembre 2016, 18:36:04
Si, ma dammi una traccia, non ho capito se l'argomento deve riguardare tutto il progetto WebBrowser oppure solo il contesto del download con WebView ?? :-\



Titolo: Re:[RISOLTO] Domanda su WebView (salva immagini)
Inserito da: vuott - 30 Dicembre 2016, 18:52:41
...solo il contesto del download con WebView ??
Diciamo il solo "download" con WebView utilizzando le opzioni del menu aperto con il tasto destro.

Poiché non ti si richiede la realizzazione di un intero complesso programma, gli esempi devono essere essenziali, funzionali e funzionanti.