Autore Topic: [risolto]inserire lista file in una listview  (Letto 2110 volte)

Offline luca1202

  • Gambero
  • **
  • Post: 95
    • Mostra profilo
    • http://luca1202.wordpress.com
[risolto]inserire lista file in una listview
« il: 04 Gennaio 2010, 14:31:39 »
premetto che ho provato a fare qualche ricerca per vedere se l'argomento era già stato trattato ma non ho trovato niente!

dunque il problema è che vorrei far aprire una dialog all'interno del quale l'utente può scegliere una cartella e una volta scelta, all'interno di una listview, vengano inseriti tutti i file all'interno della cartella selezionata!!

ora io sono riuscito ad aprire il dialog per la scelta della directory e tramite il comando "dir" ora ho un array con all'interno il path di tutti i file.
come faccio a mettere queste path all'interno di una listview?

fino ad ora ho fatto questo:
Codice: [Seleziona]
Dialog.SelectDirectory
folder = Dialog.Path
listfile = Dir(folder)
FOR i = 0 TO listfile.Count
ListView1.Add(listfile(i), listfile(i))
NEXT

solo che mi dà errore quando arriva dentro al for... non sò veramente da che parte girarmi!!
il mio progetto -> SITO

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: inserire lista file in una listview
« Risposta #1 il: 04 Gennaio 2010, 15:10:48 »
Prova così:
Codice: [Seleziona]

Dialog.SelectDirectory
folder = Dialog.Path
listfile = Dir(folder)
FOR i = 0 to listfile.count
  Listview.Add(listfile[i], i)
NEXT

Offline luca1202

  • Gambero
  • **
  • Post: 95
    • Mostra profilo
    • http://luca1202.wordpress.com
Re: inserire lista file in una listview
« Risposta #2 il: 04 Gennaio 2010, 18:53:46 »
ok, ho risolto in questo modo
Codice: [Seleziona]
FOR i = 0 TO (listfile.Count) - 1
ListView1.Add(i, folder & "/" & listfile[i])
NEXT

ho dovuto aggiungere quel -1 perchè altrimenti mi segnavala che andavo "out of bounds".

ora sorge un altro problema: quando clicco su un file presente nella listview (in cui è riportato l'indirizzo corretto del file audio) mi si apre un dialog che mi chiede di selezionare il file da aprire, ovviamente questo sarà dovuto al fatto che questo file va aperto prima di poter essere riprodotto!!

nella parte di codice che si occupa di gestire la listview ho scritto:
Codice: [Seleziona]
Music.Load(ListView1.Item.Text)

dove ovviamente ListView1.Item.Text e l'elemento selezionato!
tramite una Message.Info vedo che l'elemento selezionato contiene l'indirizzo giusto ma mi continua ad aprire il dialog per la selezione del file... come posso fare per far si che apra in automatico il file?
ho provato con comandi come Desktop.Open(....) ma niente, ho provato anche altri comandi ma niente...
il mio progetto -> SITO

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: inserire lista file in una listview
« Risposta #3 il: 04 Gennaio 2010, 23:49:05 »
Citazione

luca1202 ha scritto:
ok, ho risolto in questo modo
Codice: [Seleziona]
FOR i = 0 TO (listfile.Count) - 1
ListView1.Add(i, folder & "/" & listfile[i])
NEXT

ho dovuto aggiungere quel -1 perchè altrimenti mi segnavala che andavo "out of bounds".


Corretto il -1, magari, invece di & "/" & metti semplicemente &/
Per il resto, mai usato il componente gb.sbl.sound, ne addirittura ho le casse attaccate a questo pc, di sicuro pero' a Desktop.Open() non si passa il nome del file, ma file:// e il nome del file.

Offline luca1202

  • Gambero
  • **
  • Post: 95
    • Mostra profilo
    • http://luca1202.wordpress.com
Re: inserire lista file in una listview
« Risposta #4 il: 05 Gennaio 2010, 11:35:41 »
niente non ne vuole sapere!!
la porzione di codice è questa
Codice: [Seleziona]
DIM audio2 AS File
Message.Info(ListView1.Item.Text)
ind = ListView1.Item.Text
Message.Info(ind)
audio2.OpenFile("file:///" & ind)

quando arriva ad "audio2.OpenFile" mi spara a video un bel errore che mi avvisa che audio2 vale NULL.
ho messo le Message.Info per verificare che all'interno di quelle variabili ci sia l'indirizzo completo del file ed effettivamente c'è!!

ho provato a dichiarare anche audio2 come Music e mettere al posto di openfile Load ma mi dà lo stesso errore e con Music.Load mi dice che non riesce a leggere da quell'indirizzo...

non sò più dove sbattere la testa :muro:
il mio progetto -> SITO

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: inserire lista file in una listview
« Risposta #5 il: 05 Gennaio 2010, 12:03:57 »
allega l' intero progetto forse è meglio

Offline luca1202

  • Gambero
  • **
  • Post: 95
    • Mostra profilo
    • http://luca1202.wordpress.com
Re: inserire lista file in una listview
« Risposta #6 il: 05 Gennaio 2010, 12:09:43 »
ho messo i sorgenti QUA
il mio progetto -> SITO

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: inserire lista file in una listview
« Risposta #7 il: 05 Gennaio 2010, 12:23:57 »
il pacchetto è vuoto , se vuoi puoi allegare il file direttamente al post

Offline luca1202

  • Gambero
  • **
  • Post: 95
    • Mostra profilo
    • http://luca1202.wordpress.com
Re: inserire lista file in una listview
« Risposta #8 il: 05 Gennaio 2010, 12:30:30 »
strano l'avevo anche controllato... va beh
Codice: [Seleziona]
' Gambas class file
'Jungle Audio Player
'Author: Luca Ferrari
'e-mail: luca.120289@gmail.com

STATIC PRIVATE $bDoNotMove AS Boolean
STATIC PRIVATE STOPS AS Boolean
STATIC PRIVATE REPEATS AS Boolean

PUBLIC SUB Menu1_Click()
  DIM audio, length, sini AS String
  DIM sx AS Integer
  Dialog.Title = "Seleziona un file"
  Dialog.Path = User.Home
  IF Dialog.OpenFile() THEN RETURN
    Title.Text = Dialog.Path
    audio = Dialog.Path
    SHELL "mplayer -ao null -ss 24:00:00 -really-quiet -identify " &
        Quote.Shell(audio) & " 2>&1 | grep ID_LENGTH | cut -f2 -d=" WAIT TO length
    sini = Left(length, 3)
    sini = sini + 1
    sx = Val(sini)
    sldPos.MaxValue = sx
    Music.Load(Dialog.Path)
    STOPS = FALSE
    TRY ListView1.Add(Dialog.Path, Dialog.Path)
    IF ERROR
      Message.Info("Elemento già presente nella playlist")
    ENDIF
    Play_Click

CATCH

  Message.Error(Error.Text)

END

PUBLIC SUB Play_Click()

  IF STOPS = TRUE THEN
    Menu1_Click
  ELSE
      timMusic.Delay = 1000
      timMusic.Enabled = TRUE
      Music.Play
  ENDIF

END

PUBLIC SUB Pause_Click()

  Music.Pause

END

PUBLIC SUB Stop_Click()

  Music.Stop
  timMusic.Enabled = FALSE
  lblPos.Text = ""
  sldPos.Value = 0

END

PUBLIC SUB timMusic_Timer()

  DIM iPos AS Integer
  DIM iVal AS Integer
  DIM sPos AS String
  DIM iInd AS Integer

  iPos = Music.Pos
 
  IF NOT $bDoNotMove THEN
    Object.Lock(sldPos)
    IF iPos > sldPos.MaxValue THEN
      sldPos.MaxValue = sldPos.MaxValue * 2
    ENDIF
    sldPos.Value = iPos
    Object.Unlock(sldPos)
  ENDIF
 
  FOR iInd = 0 TO 2

    iVal = iPos MOD 60
    iPos = iPos \ 60
    IF iInd THEN
      sPos = Format(iVal, "00") & ":" & sPos
    ELSE
      sPos = Format(iVal, "00")
    ENDIF

  NEXT

  lblPos.Text = sPos
 
  IF REPEATS = TRUE THEN
    IF Music.Pos = 0 THEN
      timMusic.Enabled = FALSE
      timMusic.Delay = 1000
      timMusic.Enabled = TRUE
      Music.Play
      timMusic.Start
    ENDIF
  ENDIF
END

PUBLIC SUB sldPos_Change()
  Music.Pos = sldPos.Value
END

PUBLIC SUB sldPos_MouseDown()
  $bDoNotMove = TRUE
END

PUBLIC SUB sldPos_MouseUp()
  $bDoNotMove = FALSE
END


PUBLIC SUB Informazioni_Click()
  About.Show
END

PUBLIC SUB Esci_Click()
  QUIT
END

PUBLIC SUB Button1_Click()
  DIM per2 AS Integer
  Music.Volume = Music.Volume + 0.1
  per2 = Music.Volume * 100
  lblVolume.Text = "Volume: " & Format(per2) & "%"
END

PUBLIC SUB Button2_Click()
  DIM per AS Integer
  Music.Volume = Music.Volume - 0.1
  per = Music.Volume * 100
  lblVolume.Text = "Volume: " & Format(per) & "%"
END


PUBLIC SUB Form_Open()
  STOPS = TRUE
  REPEATS = FALSE
  lblVolume.text = "Volume: " & Format(Music.Volume * 100) & "%"
END

PUBLIC SUB Button3_Click()
  IF REPEATS = FALSE THEN
    REPEATS = TRUE
    lblRepeat.Text = "Ripeti"
  ELSE
    REPEATS = FALSE
    lblRepeat.Text = ""
  ENDIF
END

PUBLIC SUB ListView1_Click()
  DIM audio, length, sini, ind AS String
  DIM sx AS Integer
  DIM audio2 AS File
  Message.Info(ListView1.Item.Text)
  ind = ListView1.Item.Text
  Message.Info(ind)
  Music.Load("file://" & ind)
  audio = ListView1.Item.Text
  SHELL "mplayer -ao null -ss 24:00:00 -really-quiet -identify " &
        Quote.Shell(audio) & " 2>&1 | grep ID_LENGTH | cut -f2 -d=" WAIT TO length
  sini = Left(length, 3)
  sini = sini + 1
  sx = Val(sini)
  sldPos.MaxValue = sx
  Title.Text = ListView1.Item.Text
  Play_Click
 
END

PUBLIC SUB save_Click()
  DIM i AS Integer
  DIM playlist AS File
  playlist = OPEN User.Home & "/playlist.txt" FOR CREATE  
  ListView1.MoveFirst
  TRY PRINT #playlist, ListView1.Item.Text
  FOR i = 0 TO ListView1.Count STEP 1
    TRY ListView1.MoveBelow
    TRY PRINT #playlist, ListView1.Item.Text
    IF ERROR  
     TRY PRINT #playlist, ListView1.Item.Text
    ENDIF
  NEXT
  IF ERROR
      Message.Info("Playlist salvata correttamente")
      ENDIF
  CLOSE #playlist
END

PUBLIC SUB clear_Click()
  ListView1.Clear
END

PUBLIC SUB folder2_Click()
  DIM folder AS String
  DIM listfile AS String[]
  DIM i AS Integer
  Dialog.Title = "Seleziona una cartella"
  Dialog.SelectDirectory
  folder = Dialog.Path
  listfile = Dir(folder)
  FOR i = 0 TO (listfile.Count) - 1
    ListView1.Add(i, folder & "/" & listfile[i])
  NEXT
END

PUBLIC SUB Import_Click()
 
 
END
il mio progetto -> SITO

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: inserire lista file in una listview
« Risposta #9 il: 05 Gennaio 2010, 12:36:13 »
devi allegare al messaggio il pacchetto tar.gz con i sorgenti completi

Offline luca1202

  • Gambero
  • **
  • Post: 95
    • Mostra profilo
    • http://luca1202.wordpress.com
Re: inserire lista file in una listview
« Risposta #10 il: 05 Gennaio 2010, 12:47:04 »
ora dovrebbero andare -> qua non mi ero accorto che c'era stato un problema in fase di upload
il mio progetto -> SITO

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: inserire lista file in una listview
« Risposta #11 il: 05 Gennaio 2010, 13:20:59 »
ho corretto due piccolezze ora a me funziona

ti lasci in allegato anche il mio gplay caso mai volessi prelevarti la funzione per la lettura dei tag mp3

Offline luca1202

  • Gambero
  • **
  • Post: 95
    • Mostra profilo
    • http://luca1202.wordpress.com
Re: inserire lista file in una listview
« Risposta #12 il: 05 Gennaio 2010, 13:26:37 »
ti ringrazio infinitamente  :cappello:  :2birre:
metto risolto nel primo messaggio
il mio progetto -> SITO

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: inserire lista file in una listview
« Risposta #13 il: 05 Gennaio 2010, 19:14:26 »
Ti rispondo solo per la parte riguardante desktop.open:

Codice: [Seleziona]
DIM ind AS String
ind = "/home/gp/mnt/disk1/mp3/001/7 seconds - new wind/01. night away.mp3"
Message.Info(ind)
Desktop.OPEN("file://" & ind)


Questo funziona di sicuro, facendo partire il player impostato (nel mio caso Qmmp), provato adesso.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: [risolto]inserire lista file in una listview
« Risposta #14 il: 05 Gennaio 2010, 19:55:04 »
@ pastrano

La funzione Desktop.Open funziona solo laddove ci siano i programmi impostati di default....non tutti hanno i programmi impostati quindi correggi il tuo codice con

Codice: [Seleziona]
DIM ind AS String 
ind = "/home/gp/mnt/disk1/mp3/001/7 seconds - new wind/01. night away.mp3"
Message.Info(ind)

TRY Desktop.OPEN("file://" & ind)

IF ERROR THEN messagge.Info("Imposta il lettore multimediale")


In questo modo non c'è motivo che la GUI si blocchi..:-)