Rozdział 17

[ Powrót do kursów ]

Pamiętacie kiedy pisaliśmy program AVI Films Player? Teraz go trochę ulepszymy:

  1. Najlepiej będzie jeżeli zaczniesz wszystko od początku. Stwórz więc nowy projekt i ustaw jego właściwość Height na 411. Właściwość Width zmień na 360. 

  2. W Inspektorze Obiektów rozwiń pole Border Icons i zmień właściwość biMaximize na False. 

  3. Umieść na formularzu komponent Panel i jego wymiary i położenie zmień według tu podanych: Height: 225, Left: 8, Top: 0, Width: 329. Zmień kolor tła Panelu na czarny, a kolor używanej czcionki na biały. 

  4. Umieść na formularzu komponenty: PopupMenu, MainMenu, Timer, OpenDialog, MediaPlayer, BitBtn, ScrollBar, Panel, TrackBar, Label, StatusBar. 

  5. Dobra, teraz program powinien już jakoś wyglądać. Kliknij na komponencie MainMenu. W rozdziale w którym pisaliśmy przeglądarkę omawiałem jak tworzyć menu więc nie będę się tutaj  na ten temat rozpisywał. Stwórz menu 'Plik', a w nim pola: Otwórz, Zamknij, Zakończ. Następnie stwórz menu 'Widok', a w nim: Standardowy, Minimalny, wstaw poziomą linie (w pole Caption wpisz znak '-'), Pełny ekran, Zawsze na wierzchu. 

  6. Teraz zajmiemy się uzupełnianiem kodu. Zacznijmy od przycisku 'Otwórz':

    //wywolanie okna dialogowego "Otworz"
    if openDialog.Execute then begin
    //przypisanie nazwy jakiej uzywa OpenDialog
    Player.FileName:=OpenDialog.FileName;
    //otwarcie pliku
    PLayer.Open;
    Player.Enabled := True;

    //przypisanie obrazu panelowi 
    Player.Display:=Panel1;
    Player.DisplayRect:=Panel1.ClientRect;
    Panel1.Caption := ExtractFileName(OpenDialog.FileName);
    Panel2.Caption := 'Stan: Film zatrzymany';
    end;

    Wydaje mi się, że ta procedura nie wymaga większych objaśnień. 

  7. Kliknij teraz dwukrotnie na komponencie MediaPlayer. Tereść procedury jest następująca:

    {Komponentowi ScrollBar przypisywana jest długość filmu}
    Scroll.Max := Player.Length;
    {Dopasowanie pomocy i napisu na panelu}
    Panel2.Caption := 'Trwa odtwarzanie ' + ExtractFileName(OpenDialog.FileName) + '...';
    Panel1.Hint := 'Odtwarzanie filmu | Trwa odtwarzanie filmu: '+ ExtractFileName(OpenDialog.FileName);

    if Button = btStop then begin
    {Jezeli nacisniety zostanie przycisk Stop film zostanie zatrzymany
    dopasowane zostana napisy oraz Timer stanie sie nieaktywny} 
    Player.Stop;
    Panel2.Caption := 'Stan: Film zatrzymany';
    Timer1.Enabled := False; 
    end
    else
    Timer1.Enabled := True;
    Panel2.Caption := 'Stan: Film uruchomiony';

    if Button = btPlay then begin
    {Jezeli film zostanie odtworzony - zmieni sie tresc napisu na 
    panelu}
    Panel2.Caption := 'Stan: Film uruchomiony';
    end;
    if Button = btStop then begin
    {Zatrzymanie filmu zpowosuje zmiane napisu}
    Panel2.Caption := 'Stan: Film zatrzymany';
    end; 

  8. Uzupełnij tak procedurę OnScroll komponentu ScrollBar:

    if Player.Enabled = False then
    {Jezeli Player jest nieaktywny - nic sie nie dzieje..} 
    Exit;
    {...jezeli film jest otwarty - jego pozycja jest przypisana
    pozycji komponentu ScrollBar} 
    Player.Position := Scroll.Position;

  9. Teraz kliknij dwukrotnie na komponencie TrackBar. Będzie to regulacja głośności:

    {Ustawienie glosnosci obu glosnikow na...}
    case TrackBar1.Position of
    1:
    WaveOutSetVolume(0, $40004000);{4000}
    2:
    WaveOutSetVolume(0, $60006000); {6000}
    3: 
    WaveOutSetVolume(0, $80008000); {8000}
    4:
    WaveOutSetVolume(0, $90009000); {9000}
    5:
    WaveOutSetVolume(0, $FFFFFFFF);{dzwkek na maxa}
    end; 

    OBJAŚNIENIE: Tutaj zatrzymam się na chwilę, aby objaśnić tę funkcję. Użyta została tutaj instrukcja case. W przypadku gdy suwak ustawiony jest na pierwszym "ząbku" ustawiony zostaje dźwięk na obu głośników na wartość 4000. Dźwięk jest typu Integer, ale jego wartość musi mieć 4 cyfry. W tym przypadku głośność obu głośników jest jednakowa. 

  10. Kliknij dwukrotnie na komponencie Timer. Treść procedury wyglądać będzie następująco:

    SCroll.Position := Player.Position;  

  11. Kliknij podwójnie na komponencie MainMenu; kliknij na zakładkę 'Widok'; kliknij na przycisku 'Standardowy' i zmień jego właściwość RadioItem na True oraz GroupIndex na 1. Zrób to samo z przyciskiem 'Minimalny'.

  12. Kliknij podwójnie na przycisku 'Standardowy' i procedurę uzupełnij tak:

    Standardowy1.Checked := not Standardowy1.Checked;
    if Standardowy1.Checked = True then

    Label1.Visible := True;
    TrackBar1.Visible := True;
    Panel2.Visible := True;
    {Pokazanie komponentow}
    Form1.Height := 420;
    {Zwiekszenie formy} 

  13. Kliknij dwukrotnie na przycisku minimalny i jego procedurę uzupełnij następująco:

    Minimalny1.Checked := not Minimalny1.Checked;
    if Minimalny1.Checked = True then begin
    Label1.Visible := False;
    TrackBar1.Visible := False;
    Panel2.Visible := False;

    Form1.Height := 350;

    end;

  14. Myślę, że do tej pory wszystko było jasne. Teraz nadszedł czas, aby uzupełnić procedurę 'Zawsze na wierzchu'.

    Na_wierzchu.Checked := not Na_wierzchu.Checked;

    if Na_wierzchu.Checked = True then
    Form1.FormStyle := fsStayOnTop {Jezeli wlasciwosc jest prawdziwa
    wlaczona zostaje opcja "Na wierzchu"}
    else
    Form1.FormStyle := fsNormal;

  15. Teraz nadszedł czas, aby stworzyć drugą formę. Zrób to, a na drugim formularzu umieść komponent Panel - zmień właściwość Align na alClient. Uzupełnij kod procedury 'Pełny ekran':

    Form2.BorderStyle := bsNone;{ukrycie gornego paska}
    Form2.WindowState := wsMaximized;{maximilizacja okna}
    Player.Display := Form2.Panel1;{przypianie obrazu do Panelu na Formie drugiej}
    Player.DisplayRect := Form2.Panel1.ClientRect;{dopasowanie rozmiaru 
    filmu do rozmiarow Panelu}


    Form2.PopupMenu := Form1.PopupMenu1;{Przypisananie Panelowi Menu rozwijalnego}
    Form2.ShowModal;{ukazanie okna Form2}

    OBJAŚNIENIE: Najpierw ukrywana zostaje "belka" formy, a formularz zostaje zmaksymilizowany - odnosimy wówczas wrażenie, że film wyświetlany jest na pełnym ekranie. 

  16. Kliknij teraz na komponencie PopupMenu. Stwórz w nim tylko jedno pole o nazwie: 'Pełny ekran'; zmień właściwość Checked na True. 

    {Ta procedura przywrca "normalny" rozmiar okna tj. zamyka zmaksymilizowany film}
    Form1.Player.Display := Form1.Panel1; 
    Form1.Player.DisplayRect := Form1.Panel1.ClientRect;
    Timer1.Enabled := True;

    Form2.Close;

  17. Program jest prawie skończony. Pozostało jeszcze tylko napisanie właściwości zamykającej film:

    Player.Stop; {Zatrzymanie odtwarzania}
    Player.Enabled := False;{dezaktywacja...} 
    Timer1.Enabled := False;
    Scroll.Position :=0;
    Panel1.Caption := 'Zamknięto film';{Przypisanie panelowi teksu}
    Panel2.Caption := 'Stan: Zamknięto film';

  18. Procedurę zamykająca program (Plik -> Zakmknij): Application.Termiante;

  19. Mamy już napisaną procedurę otwierającą plik video, lecz ta procedura nie jest przypisana do menu: Plik -> Otwórz. Myślę, że sami potraficie to zrobić. 

[ Powrót do kursów ]