Z pewnością każdy, kto pisze program przeznaczony np. do edycji obrazów czy odtwarzania muzyki postawi sobie pytanie:
30
Skojarzyłem pliki z programem, ale jak wykonywać akcje z plikiem?
Zakładam tu, że pojęcie „akcja z plikiem” oznacza, np. że przy starcie programu nastąpi zrzucenie obrazu do TImage czy jak w załączonym programie odtworzenia pliku muzycznego i stworzenie playlisty.
Rozwiązanie problemu jest bardzo proste. Nie trzeba tu modyfikować rejestru wystarczą trzy funkcje (ale prawdę mówiąc z tej trzeciej korzystać będziesz bardzo rzadko), oto i one:
ParamCount: Ta funkcja zwraca ilość parametrów przekazanych do programu. W naszym przypadku liczba parametrów = liczbie plików do otwarcia. Równy jest zero w przypadku braku parametrów.
ParamStr(Index: integer): To nic innego jak nazwa przekazanego parametru. Trzeba też wiedzieć, że ta nazwa wcale nie musi się równać nazwie pliku. Index to oczywiście numer parametru.
Zakres nie powinien przekraczać liczby zwróconej przez ParamCount.
FindCmdLineSwitch(Swith: String, Chars: TSysCharSet, IgnoreCase: Boolean): Mówiąc najogólniej funkcja szuka danego parametru w linii komend poprzedzonego którymkolwiek ze znaków ze zbioru SysCharSet. Podam teraz przykład zastosowania tej funkcji.
Co bardziej doświadczeni gracze z pewnością wiedzą, że niektóre gry (bodajże np. Half-Life), jeśli chcemy w niej używać kodów trzeba uruchomić program np. z takim parametrem:
+console
Robi się to dość prosto np. można przez polecenie „Uruchom” z menu start lub dopisać do linii komend przez PPM na skrót i w polu „Obiekt docelowy” dopisujemy swoje parametry.
W ten sposób robiąc grę możemy ukryć przed graczem konsole, ale nie tylko, można wymyślać inne parametry i odpowiednio na nie reagować (np. „help” odblokuje dymki z pomocą). Ja nie dodałem tej funkcji do mojej aplikacji, jednak podam przykład aplikacji ją wykorzystujący:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
var Text: String; SysCharSet: TSysCharSet; begin //Dodajemy przez Nazwa_Aplikacji(spacja!)(dowolny znak ze zbioru SysCharSet)text (u nas „Hello!”) Text:='Hello!'; SysCharSet:=['/','-','|','+']; if FindCmdLineSwitch(Text, SysCharSet, False) then ShowMessage('Znaleziono' + Text); end; |
Chyba wszystko jest jasne. Można dodawać inne elementy do zbioru SysCharSet.
Teraz znając odpowiednie funkcje możemy przystąpić do zrobienia odtwarzacza z playlistą.
Najpierw odczytamy w pętli wszystkie parametry jeśli liczba przekazanych parametrów będzie większa od zera… (ten warunek powinien być zawsze!)
1 2 3 4 5 6 7 8 9 10 11 |
if ParamCount>0 then //ParamCount (liczba parametrów musi być większa od zera) for i:=1 to ParamCount do //Wykonujemy to tyle razy ile mamy parametrów begin ListBox1.Items.Add(ParamStr(i)); //ParamStr(i) zawiera nazwę parametru. Dodajemy go do LB Play(ListBox1.Items[0]); //odtwarzanie pierwszego pliku z listy end; |
Teraz ListBox zapełni się odpowiednimi danymi przekazanymi do programu.
To wszystko złączony program opiera się na bibliotece BASS i jako że nie nie jest to temat tego arta proszę nie krytykować sposobu w jaki jest odtwarzany plik 😛
Kod jest chyba Bardzo nieczytelny ale pomimo tego postanowiłem go umieścić. Wiem że wszystko dało by się zrobić o 200% lepiej i szybciej:)
Autor: Greensand