ďťż
Lemur zaprasza
Rozdział 9 [ ] 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. l Otwórz program, który pisaliśmy ostatnio. Kliknij na komponencie MediaPlayer i z Inspektora Obiektów wybierz zakładkę Events l l Kliknij na procedurze OnNotify i najedź kursorem obok. Powinien pojawić się kursor tekstowy - kliknij wówczas dwukrotnie. Procedurę tą uzupełnij następująco:l 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: l Na formularzu umieść dwa przyciski SpeedButton (na palecie Additional).l l 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ę.l l Wartość GroupIndex obu przycisków zmień na 1. Oznacza to, że tylko jeden przycisk w dane chwili może być wciśnięty.l l Kliknij dwukrotnie na pierwszym przycisku i treść procedury uzupełnij tak:l 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: [ ] |