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:
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!!
Prova così:
Dialog.SelectDirectory
folder = Dialog.Path
listfile = Dir(folder)
FOR i = 0 to listfile.count
Listview.Add(listfile[i], i)
NEXT
ok, ho risolto in questo modo
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:
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...
niente non ne vuole sapere!!
la porzione di codice è questa
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:
strano l'avevo anche controllato... va beh
' 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
Ti rispondo solo per la parte riguardante desktop.open:
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.
@ 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
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..:-)