MovieStarter

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Captn. Jinguji
Beiträge: 397
Registriert: 07.06.2005 19:47
Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
Wohnort: Witten

Beitrag von Captn. Jinguji »

bei mir spielt es immer das letzte der Liste,egal welches ich anclicke.

Ich würde übrigens noch .flv mit aufnehmen, für die vielen daylimotion fans ;)
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Kiffi hat geschrieben:Das Programm wird aber auf die Dauer recht eintönig sein,
wenn es immer nur ein Lied abspielt ;-)
Captn. Jinguji hat geschrieben:bei mir spielt es immer das letzte der Liste,egal welches ich anclicke.
@Zerosurf:

um mal einen kleinen Tipp abzugeben:

Du musst vor RunProgram() mit SelectElement(MeineMucke()) das Lied
auswählen, dass auch im ListView angewählt wurde
(Stichwort: GetGadgetState()).

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

@Kiffi: genau das habe ich mir gerade auch gedacht!

vielen dank,

mfg. Zerosurf
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

here we go:

Code: Alles auswählen

Procedure sucheMusikdateien(pfad.s, Liste.s(), typ.s="mp3,wma,wav,wmv,avi,ogg")
   PathAddBackslash_(@pfad) ; Hängt Backslash an, falls nötig
   Protected dir=ExamineDirectory(#PB_Any, pfad, ""), n
   If dir
      While NextDirectoryEntry(dir)
         If DirectoryEntryType(dir) = #PB_DirectoryEntry_File
            For n=1 To CountString(typ, ",")+1
               If StringField(typ, n, ",") = LCase(GetExtensionPart(DirectoryEntryName(dir)))
                  AddElement(Liste())
                  Liste()=pfad+DirectoryEntryName(dir)
                  Break
               EndIf
            Next
            Continue
         ElseIf DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
            sucheMusikdateien(pfad+DirectoryEntryName(dir), Liste(), typ)
         EndIf
      Wend
      FinishDirectory(dir)
   EndIf
EndProcedure

NewList MeineMucke.s()

OpenWindow(0, 0, 0, 600, 400, "Musik", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(0))
    ButtonGadget(0, WindowWidth(0)-105, 5, 100, 20, "Auflisten")
    StringGadget(1,                  5, 5, 485, 20, "media\") ; Verzeichnis welches die Multimediadateien enthält
    ListViewGadget(2,                5,30, 590, 365)

Repeat
 
  Event = WaitWindowEvent()
  Gadget= EventGadget()
 
  If Event = #PB_Event_Gadget
   
    If Gadget = 0
      sucheMusikdateien(GetGadgetText(1), MeineMucke())

      ForEach MeineMucke()
     
        AddGadgetItem(2, -1, MeineMucke())
       
      Next
     
      AddGadgetItem(2, -1, StrQ(CountList(MeineMucke()))+" Dateien gefunden")
     
    EndIf
   
          Select EventGadget()
             Case 2
               Select EventType()
                 Case #PB_EventType_LeftDoubleClick
                 p = GetGadgetState(2)
                 SelectElement(MeineMucke(), p)
              RunProgram("VLCPortable\VLCPortable.exe", Chr(34) + MeineMucke() + Chr(34), "")  ; Pfad zum Mediaplayer
               EndSelect
          EndSelect

   
  EndIf
 
Until Event = #PB_Event_CloseWindow
End
vielen dank kiffi!

hast mir sehr geholfen!

und die nächste frage:

wie kann ich beim starten des programmes die liste automatisch einlesen lassen?
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Zerosurf hat geschrieben: und die nächste frage:

wie kann ich beim starten des programmes die liste automatisch einlesen lassen?
Jetzt ist selbständiges Denken gefragt...
Wenn ich mir den Codeschnippsel so anschaue, frage ich mich wieviel davon eigens erstellt wurde und wieviel einfach irgendwo rausgepappt und eingeklebt wurde...
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Zerosurf hat geschrieben:wie kann ich beim starten des programmes die liste automatisch einlesen lassen?
da Du das ganze sowieso auf CD oder DVD packen willst, kannst Du die
Liste einmalig erstellen lassen (mit einem separaten Tool) und diese dann
mit Deinem Programm einlesen. Dann kannst Du sucheMusikdateien() aus
Deinem 'Player' entfernen und in das separate Tool einbinden.

Die Liste erstellst Du mit:

CreateFile(), WriteStringN(), CloseFile

Die Liste lässt sich einlesen mit folgenden Befehlen / Funktionen:

ReadFile(), EOF(), ReadString(), CloseFile()

Du musst die Befehle nur noch richtig anwenden. ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

Ich hätte aber gerne alles in einem tool und die möglichkeit die liste stets aktuell einzulesen!

Die liste wird ja durch den button 0 generiert, richtig?

es muss doch eine einfachere Möglichkeit geben die liste schon beim öffnen ohne benützung des button 0 einlesen zu lassen?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Zerosurf hat geschrieben:Ich hätte aber gerne alles in einem tool und die möglichkeit die liste stets aktuell einzulesen!
... könnte ja sein, dass sich auf der CD irgendetwas ändert, oder? :cool:
Zerosurf hat geschrieben:Die liste wird ja durch den button 0 generiert, richtig?
Ähm, ja. Das solltest Du aber am besten wissen, weil Du derjenige bist, der
das Programm geschrieben hat.
Zerosurf hat geschrieben:es muss doch eine einfachere Möglichkeit geben die liste schon beim öffnen ohne benützung des button 0 einlesen zu lassen?
sorry, aber ich glaube fest daran, dass Du selber in der Lage bist, die
entsprechende Zeile zu lokalisieren und an den geeigneten Ort zu
verschieben. Oder mit anderen Worten:
HeX0R hat geschrieben:Jetzt ist selbständiges Denken gefragt...
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

oh mann - ich steh grad auf dem schlauch - laß mich doch bitte, bitte nicht so betteln!

muß ich eine oder mehrere zeile(n) verschieben oder kopieren?

ich tippe mal auf diesen abschnitt:

Code: Alles auswählen

      sucheMusikdateien(GetGadgetText(1), MeineMucke())

      ForEach MeineMucke()
     
        AddGadgetItem(2, -1, MeineMucke())
       
      Next
     
      AddGadgetItem(2, -1, StrQ(CountList(MeineMucke()))+" Dateien gefunden")
aber was jetzt genau weiß ich auch nicht.

Nicht vergessen: Ich bin ein absoluter Anfänger!

mfg. Zerosurf
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

so glaube ich müßte es funktionieren:

Code: Alles auswählen

Procedure sucheMusikdateien(pfad.s, Liste.s(), typ.s="mp3,wma,wav,wmv,avi,ogg")
   PathAddBackslash_(@pfad) ; Hängt Backslash an, falls nötig
   Protected dir=ExamineDirectory(#PB_Any, pfad, ""), n
   If dir
      While NextDirectoryEntry(dir)
         If DirectoryEntryType(dir) = #PB_DirectoryEntry_File
            For n=1 To CountString(typ, ",")+1
               If StringField(typ, n, ",") = LCase(GetExtensionPart(DirectoryEntryName(dir)))
                  AddElement(Liste())
                  Liste()=pfad+DirectoryEntryName(dir)
                  Break
               EndIf
            Next
            Continue
         ElseIf DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
            sucheMusikdateien(pfad+DirectoryEntryName(dir), Liste(), typ)
         EndIf
      Wend
      FinishDirectory(dir)
   EndIf
EndProcedure

NewList MeineMucke.s()

OpenWindow(0, 0, 0, 600, 400, "Musik", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(0))
    ButtonGadget(0, WindowWidth(0)-105, 5, 100, 20, "Auflisten")
    StringGadget(1,                  5, 5, 485, 20, "\") ; Verzeichnis welches die Multimediadateien enthält
    ListViewGadget(2,                5,30, 590, 365)

      sucheMusikdateien(GetGadgetText(1), MeineMucke())

      ForEach MeineMucke()
     
        AddGadgetItem(2, -1, MeineMucke())
       
      Next
     
      AddGadgetItem(2, -1, StrQ(CountList(MeineMucke()))+" Dateien gefunden")



Repeat
 
  Event = WaitWindowEvent()
  Gadget= EventGadget()
 
  If Event = #PB_Event_Gadget
   
    If Gadget = 0
      sucheMusikdateien(GetGadgetText(1), MeineMucke())

      ForEach MeineMucke()
     
        AddGadgetItem(2, -1, MeineMucke())
       
      Next
     
      AddGadgetItem(2, -1, StrQ(CountList(MeineMucke()))+" Dateien gefunden")
     
    EndIf
   
          Select EventGadget()
             Case 2
               Select EventType()
                 Case #PB_EventType_LeftDoubleClick
                 p = GetGadgetState(2)
                 SelectElement(MeineMucke(), p)
              RunProgram("VLCPortable\VLCPortable.exe", Chr(34) + MeineMucke() + Chr(34), "")  ; Pfad zum Mediaplayer
               EndSelect
          EndSelect

   
  EndIf
 
Until Event = #PB_Event_CloseWindow
End
mfg. zerosurf
Antworten