Rozdział 9
[ Powrót ]
Teraz dokończę omawiany ostatnio temat komponentu MediaPlayer. W tabeli poniżej przedstawiłem właściwości tegoż komponentu.
AutoRewid | Określa, czy po zakończeniu odtwarzania wzkaznik pozycji ma być przesunięty na sam początek. Dzieje się tak gdy wartością będzie True. |
DeviceType | Wartość bsAutoSelect powoduje automatyczny wybór urządzenia na podst. rozszerzenia pliku. |
Display | Służy do określenia komponentu, które będzie służyć jako okno podczas wyświetlania (tak jak np. program który pisaliśmy ostatni, razem - w tym wypadku oknem jest Panel). |
DisplayRect | Służy do dopasowania rozmiaru okna na którym wyświetlany będzie np. film (tak jak w poprzednim programie). |
EnabledButtons | Określa, które przyciski powinny być dostępne podczas odtwarzania. |
EndPos | Końcowy punkt plików multimedialnych. Dane takiego pliku odtwarzanie są od punktu StartPos do punktu oznaczonego EndPos. |
Frames | Liczba klatego jaka będzie przesunięta po naciśnięciu przycisku Next lub Back. |
Mode | Stan aktualny urządzenia. mbNotReady, mpStopped, mpPlaying, mpRecording, mpSeeking, mpPaused, mpOpen. Możesz wykorzystywać to w procedurach do badania w jakim stanie znajduje się urządzenie i ew. do zapobiegania błędom. |
Notify | Jeżeli wartością jest True to z zakończeniem odtwarzania generowana będzie procedura właśnie OnNotify. |
NotifyValue | Możliwe są wartości: nvSuccessful, nvSupersed, nvAborted, nvFailure. Możesz wykorzystywać te metody do badania z jakim skutkiem zakończone zostało odtwarzanie. |
Position | Aktualna pozycja odtwarzanych danych multimedialnych. |
StartPos | Patrz: EndPos. |
Wait | Właściwość tę omawaiłem w poprzednim rozdziale. Gdy wartościąj est True - kolejny utwór odtwarzany będzie po kolejnym w pewnym odstępie czasu. Gdy wartością jest False kolejny utwór odtwarzany będzie natychmiast. |
Przy odtwarzaniu filmu lub/i muzyki ważną rzeczą może być odgrywanie utworu w pętli.
Otwórz program, który pisaliśmy ostatnio. Kliknij na komponencie MediaPlayer i z Inspektora Obiektów wybierz zakładkę Events
Kliknij na procedurze OnNotify i najedź kursorem obok. Powinien pojawić się kursor tekstowy - kliknij wówczas dwukrotnie. Procedurę tą uzupełnij następująco:
procedure TForm1.playerNotify(Sender: TObject);
begin
if player.NotifyValue= nvSuccessful
then //gdy odtwarzanie dobiegnie końca.....
Player.Position:=0; //...przewiń do początku....
Player.Play;
//... i zacznij odtwarzać.
end;
To nie koniec unowocześniania programu. Wyobraź sobie, że chciałbyś, aby użytkownik mógł powiększać lub pomniejszać twój panel w zależności od jego zachcianek. Zrób to tak:
Na formularzu umieść dwa przyciski SpeedButton (na palecie Additional).
Możesz umieścić na nich jakieś bitmapy. W Inspektorze Obiektów odszukaj właściwość Glyph i kliknij na symbol trzykropka zamieszczony obok. Naciśnij przycisk 'Load' i wybierz jakąś bitmapę.
Wartość GroupIndex obu przycisków zmień na 1. Oznacza to, że tylko jeden przycisk w dane chwili może być wciśnięty.
Kliknij dwukrotnie na pierwszym przycisku i treść procedury uzupełnij tak:
procedure TForm1.ButtonClick(Sender: TObject);
begin
if Button.Down=True then begin //Jezeli 1 przycisk jest wcisniety...
Panel1.Cursor:=crDrag; //to panelowi przypisz kursor - drag
end else //jezeli nie...
Panel1.Cursor:=crArrow; //pozotaw taki jak byl
end;
W tej procedurze następuje przypisanie Panelowi kursora - w tym wypadku o nazwie Drag. Istnieje możliwość załadowania własnego kursora, ale o tym kiedy indziej. Jeżeli przycisk jest "normalny" to kursor jest standardowy - Arrow.
5. Idziemy dalej - kliknij dwukrotnie na przycisku drugim i treść jego procedury uzupełnij następująco:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Down=True then begin //j/w
Button1.Down:=False;
Panel1.Cursor:=crCross;
end else
Panel1.Cursor:=crArrow;
end;
W tym wypadku procedura ma bardzo podobną postać z tym, że tym razem panelowi przypisywany jest kursor o nazwie Cross.
6. Z polecenia File wybierz New Form. Umieść na nim Panel i jego właściwość Align zmień na alClient. Spowoduje to rozciągnięcie Panelu na cały obszar formularza. Po co tworzymy kolejny formularz? Gdy urzytkownik będzie powiększał Panel i przybierze on taki duży rozmiar w tedy ukazywany będzie formularz drugi i to właśnie na nim wyświetlany będzie film.
7. Kliknij teraz dwukrotnie na Panelu 1 naszego głównego formularza. Treść procedury uzupełnij następująco:
procedure TForm1.Panel1Click(Sender: TObject);
begin
//W przypadku klikniecia na panel...
//Jezeli nastapi klikniecie, a kursor to drag...
if Panel1.Cursor=crDrag then begin
Panel1.Width:=Pred(Panel1.Width - 5); //...zmniejsz szerokosc Panelu...
Panel1.Height:=Pred(Panel1.Height - 5); //... i wysokosc panelu.
Player.DisplayRect:=Panel1.ClientRect; //dostosuj roamiar filmu do rozmiaru Panelu
if ((Panel1.Width<=90) or (Panel1.Height<=80))
then //Jezeli wymiary sa mniejsze niz tu podane...
//...nastepuje wyswietlenie komunikatu:
ShowMessage('Cholera, jak jeszcze bardziej zmniejszysz to okno to nic nie zobaczysz :)');
end;
//Jezeli kursor to Cross...
if Panel1.Cursor=crCross then begin
//Nastepuje powiekszenie szerokosci...
Panel1.Width:=Succ(Panel1.Width + 5);
Panel1.Height:=Succ(Panel1.Height + 5); //...i wysokosci
Player.DisplayRect:=Panel1.ClientRect; //dostosowanie szerokosci Panlu do rozmiaru filmu
//Jezeli wymiary sa wieksze od tych tutaj podanych...
if ((Panel1.Height>=241)
or (Panel1.Width>=345)) then
begin
//Wtedy nastepuje przypisanie okna wyswietlania
//Panelowi w oknie Form2
Player.Display:=Form2.Panel1;
Player.DisplayRect:=Form2.Panel1.ClientRect;
//no i w koncu wyswietlenie okna Form2
form2.Showmodal;
end;
end;
end;
OBJAŚNIENIE:
Trochę długa ta procedura, nie? N samym początku "badany" zostaje kursor. Jeżeli jest to Drag - wysokość i szerokość Panelu zostaje pomniejszona. Funkcję Pred omawiałem w poprzednich rozdziałach, ale mała powtórka nie zaszkodzi. Otóż ta funkcja pomniejsza w tym wypadku rozmiar Panelu o jeden. Czyli: Pred(100) daje liczbę 99 itd. Jako że rozmiar Panelu zmniejszał by się tylko o jeden (żeby zmniejszyć Panel należałoby się nieźle naklikac :)) odejmujemy od rozmiarów jeszcze 5 punktów.
Kolejny warunek (if ((Panel1.Width<=90) or (Panel1.Height<=80)) then) "sprawdza", czy rozmiary nie są zbyt małe. Jeżeli osiągną wymiary mniejsze od tych tutaj podanych - wtedy wyświetla się komunikat. (O komunikatach w następnym rozdziale.).
Jeżeli kursor to Cross - wtedy rozmiar Panelu powiększa się. Funkcja Succ powiększa o jeden, czyli: Succ(100) daje 101 itd. Do rozmiaru dodawane są jeszcze 5 punktów. I tak samo, gdy Panel będzie większy od podanych rozmiarów wtedy otwiera się okno Form2 i to właśnie na nim odtwarzany jest film.
Jeżeli macie jakieś pytania to piszcie: boduch@poland.com
[ Powrót ]