JAg kan inte räkna ut ett smart sätt att lösa mina "problem" med. Jag föreslår en listview i detaljerat läge istället för en listbox. Då kan du dels ha flera kolumner och kunna sortera på låt os säga artist. Sedan använda filnamet som key. Tack, då tror jag att jag har lite att gå på. Jag får problem. Först så här har jag det nu. Okej, här ett mer kornkret exempel. Du behöver en command knapp och en listview som heter lvSongList. I property pagen ställer du om till reportview och en kolumn. Sedan är det bara att koda om var songlistan finns. När du trycker knappen laddas listviewn. När du väljer i listviewn får du hela sök + filnamnet Du skall ha tack för att du försöker men...Om sånglistan igen.[LÖST]
Allt fungerar bra, men nu är det "ögongodis" som gäller.
Jag har en listbox, där jag läser in sånglistan, som ligger sparad som en textfil. När den läses in, så kommer hela sökvägen med, och det är där som jag vill ändra på det. Jag ville bara ha titlen.
Vad som är problemet, är ju, om jag rensar bort allt, utom titlen, hur får jag programmet att "komma ihåg" sökvägen???
Jag hoppas att ni förstår.Sv: Om sånglistan igen.
Sv: Om sånglistan igen.
Jag återkommer vid problem.Sv: Om sånglistan igen.
list1 läser in ifrån en textfil:
<code>
Private Sub List1_Click()
Dim f As Long
Dim i As Long
Dim TextStr As String, strListText As String
Dim FileName As String
Dim Loopa As Long
Dim NumberOfSongs As Long
Dim Pos As String, DisplayName As String
ReDim m_memArray(NumberOfSongs)
strListText = List1.Text
FileName = App.path & "\Songlista\" & strListText
i = 0
songlista.Clear
If Len(Dir(FileName)) Then
f = FreeFile
Open FileName For Input As f
Do Until EOF(f)
Line Input #f, TextStr
'här är den nya koden
Pos = InStrRev(TextStr, "\")
DisplayName = Right(TextStr, Len(TextStr) - Pos + 1)
songlista.AddItem DisplayName
m_memArray(Loopa) = TextStr
'här fortsätter inläsningen
Loop
Close f
End If
End Sub
</code>
Nu läses sångtitlarna snyggtin i songlistan.
När jag t ex klickar på songlistan(jag använder o istället för å) så sker följande:
<code>
Private Sub songlista_Click()
sFile = (m_memArray(songlista.ListIndex))
cmdCreate_Click (sFile)
cmdPlay_Click
End Sub
</code>
I cmdCreate händer bl a följande:
<code>
DS.SetCooperativeLevel frmPlay.hwnd, DSSCL_NORMAL
DSBDesc.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME
' sFile = songlista.Text
sFile = (m_memArray(songlista.ListIndex))
Set DSBuffer = DS.CreateSoundBufferFromFile(sFile, DSBDesc)
+ en massa andra koder
</code>
Vad som är mitt problem är att jag får ett error.
När jag klickar på en titel i songlistan, så är det inga problem, men klickar jag på en annan låt, så får jag error: Run-time error '9' Subscript out of range.
Vad jag förstår så vill han bara spela den titel som ligger sist i arrayen...
Hur löser jag det?Sv: Om sånglistan igen.
Option Explicit
Private Sub Command1_Click()
Dim fso As Object
Dim filestream As Object
Dim Index As Long
Dim Item As ListItem
Dim LineText As String
Dim Pos As Long
Dim DisplayName As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set filestream = fso.OpenTextFile("F:\test1\Songlista\lista1.txt", 1)
Do While Not filestream.AtEndOfStream
LineText = filestream.ReadLine
Pos = InStrRev(LineText, "\")
DisplayName = Right(LineText, Len(LineText) - Pos)
Set Item = lvSongList.ListItems.Add(, LineText, DisplayName)
Loop
End Sub
Private Sub lvSongList_Click()
MsgBox "play " & lvSongList.SelectedItem.Key
End SubSv: Om sånglistan igen.
Error Key is not unique in th collection.
Måste jag verkeligen ge upp??
Värt att komma ihåg, list1 är ju redan fylld med olika listnamn(namn som innehåller olika sångtitlar)
[EDIT]
Jag löste det på ett väldigt enkelt sätt.
Jag tog fram sökvägen till textfilerna och sparade pathen i en label. Sen plockade jag ut namnet på sångtitlen och lade i listan.
Jag såg inte skogen för trädens skull ;-)
Tack för all hjälp