background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5.                                                 1 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 
 
 
 
 
 
 
 
 
 

PROGRAMOWANIE OBIEKTOWE 

 

 

 

ĆWICZENIE 5 

 
 
 
 

C++ BUILDER 6.0 PE 

 
 

 

Projektowanie prostego odtwarzacza muzyki 

 

Obiekt TButton 

 

Obiekt TListBox 

 

Obiekt TMediaPlayer 

 

Obiekt TSpeedButton 

 

Obiekt TLabel 

 

Obiekt TStatusBar 

  
 
 
 
 
 
 
 
 
 
 
 
 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5. 

______________________________________________________________________ 

______________________________________________________________________ 
 

©2004 Jerzy Kluczewski 

 

 

I.

 

Wstęp  

 

Wykonaj aplikację w języku Borland C++, która będzie słuŜyła do odtwarzania 

plików dźwiękowych WAV i MP3 znajdujących się w katalogu bieŜącym. 
 
Najpierw „ubierzemy” naszą aplikację w niezbędne elementy. 
 
 

Nasz projekt będzie zawierał następujące obiekty: 

 

 

        TButton *Button1; 

 

        TButton *Button2; 

 

        TListBox *ListBox1; 

 

        TMediaPlayer *MediaPlayer1; 

 

        TSpeedButton *SpeedButton1; 

 

        TSpeedButton *SpeedButton2; 

 

        TLabel *Label1; 

 

        TLabel *Label2; 

 

        TStatusBar *StatusBar1; 

 
Nasz projekt plikacji zapiszemy w plikach rozpoczynających się od nazwy MMedia5.  

 

Utwórz projekt aplikacji za pomocą polecenia File









 New 









 Application 

 
Zapisz projekt aplikacji za pomocą polecenia File









 Save All ... 

 

Zapisz projekt do plików: 
 

 

formularza do MMedia5Unit1.cpp

 

głównego pliku projektu MMedia5.bpr 

 

Zmień tytuł formularza Form1 na MMedia5

 

Ustaw opcje projektu za pomocą polecenia Project









 Options ... 

 
a w oknie zmień następujące opcje:  

 
Polecenie: Project 









 Options 









 Application 









 Load Icon 

 

W polu „Nazwa pliku” ustaw  MMedia.ico

 

Po zatwierdzeniu w panelu „Icon” pojawi się właściwa ikona. 
 
Przejdź do zakładki „Linker” 
Wyłącz opcję „Use dynamic RTL”. 

 

Przejdź do zakładki „Packeges” 
Wyłącz opcję „Build with runtime packages”. 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5.                                                 3 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 
 

II.

 

Wstawianie obiektów 

 

Wstawianie obiektów na formularz 

 
WyposaŜymy teraz nasz formularz w niezbędne elementy. 
 
Z zakładki Standard wybieramy obiekty klasy TButton i przenosimy je na formularz 
oraz dopasowujemy ich właściwości do wymogów uŜytkownika. 
 

 

 
 

 

 
Z zakładki Standard wybieramy obiekt klasy TListBox i przenosimy go na formularz 
oraz dopasowujemy jego właściwości do wymogów uŜytkownika. 
 

 

 
Z zakładki System wybieramy obiekt klasy TMediaPlayer i przenosimy go na 
formularz oraz dopasowujemy jego właściwości do wymogów uŜytkownika. 
 

 

 
Z zakładki Additional wybieramy obiekty klasy TSpeedButton i przenosimy je na 
formularz oraz dopasowujemy ich właściwości do wymogów uŜytkownika. 
 
SpeedButton1 

 

 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5. 

______________________________________________________________________ 

______________________________________________________________________ 
 

©2004 Jerzy Kluczewski 

 

 
SpeedButton2 

 

 
Z zakładki Standard wybieramy obiekty klasy TLabel i przenosimy je na formularz 
oraz dopasowujemy ich właściwości do wymogów uŜytkownika. 
 

 

 
 

 

 
Z zakładki Standard wybieramy obiekt klasy TStatusBar  i przenosimy go na 
formularz oraz dopasowujemy jego właściwości do wymogów uŜytkownika. 
 

 

 

Widok projektowanego formularza 

 
Teraz nasz formularz wygląda teraz następująco: 
 

 

 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5.                                                 5 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 
 

III.

 

Projektowanie obiektu MediaPlayer 

 

Właściwości obiektu MediaPlayer 

 
Rozwiń właściwości ColoredButtons obiektu MediaPlayer1 
 

 

 
Ustaw btPlay, btPause, btStop na true a pozostałe na false
 
Rozwiń właściwości EnableddButtons obiektu MediaPlayer1 
 

 

 
Ustaw btPlay, btPause, btStop na true a pozostałe na false
 
 
 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5. 

______________________________________________________________________ 

______________________________________________________________________ 
 

©2004 Jerzy Kluczewski 

 

 
Analogicznie ustaw właściwości dla VisibleButtons
 

 

 
Dla obiektu TLabel2 we właściwości „Caption” wpisz „Stopped” 
 

 

 
 

IV.

 

Programowanie metod 

 

Metoda reagująca na przycisk „Dodaj pliki muzyczne” 

 
Zaprogramujemy teraz metodę która uruchamia się, gdy klikniemy przycisk 
 „Dodaj pliki muzyczne” (Button1): 
 
Uwaga: ograniczamy  listę plików do MP3 i WAV. 
 
void __fastcall TForm1::Button1Click(TObject *Sender) 

struct ffblk ffblk; 
   int done; 
   TFileName FileName; 
 
   ListBox1->Clear(); 
   /* dodaj do listy pliki MP3 */ 
   done = findfirst("*.mp3",&ffblk,0); 
   while (!done) 
   { 
      FileName = ffblk.ff_name; 
      ListBox1->Items->Add(FileName); 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5.                                                 7 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

      done = findnext(&ffblk); 
   } 
   /* dodaj do listy pliki WAV */ 
   done = findfirst("*.wav",&ffblk,0); 
   while (!done) 
   { 
      FileName = ffblk.ff_name; 
      ListBox1->Items->Add(FileName); 
      done = findnext(&ffblk); 
   } 
}
 
 
 
Teraz wykonaj kompilację projektu (F9
 
Jeśli okaŜe się uzyskasz błędy kompilacji, to dodaj po dyrektywie #include <vcl.h> 
następujące linie (dyrektywy są oznaczone kolorem zielonym): 
 
#include <dir.h> 
#include <dos.h> 
#include <string.h> 
#include <time.h> 
 
 
JeŜeli w obiekcie TlistBox nie pojawiły się Ŝadne pliki to znaczy, Ŝe nie skopiowałeś 
plików muzycznych do katalogu w którym znajduje się projekt MMedia5
. 
 
Skopiuj jakieś pliki przykładowe (*.WAV, *.MP3) do tego katalogu. 
 
Uruchom projekt (F9
 

 

 
 
Przechodzimy do programowania zachowania następnego przycisku. 
 
 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5. 

______________________________________________________________________ 

______________________________________________________________________ 
 

©2004 Jerzy Kluczewski 

 

 
 

Metoda reagująca na przycisk „Koniec” 

 
Zaprogramujemy teraz metodę która uruchamia się, gdy klikniemy przycisk 
 „Koniec” (Button2): 
 
void __fastcall TForm1::Button2Click(TObject *Sender) 

Application->Terminate(); 
}
 
 
 

Metoda reagująca na wybór pliku w „ListBox1” 

 
Zaprogramujemy teraz metodę która uruchamia się, gdy klikniemy na nazwę 
wybranego pliku (obiekt ListBox1): 
 
 

void __fastcall TForm1::ListBox1Click(TObject *Sender) 

int ItemCount, Index; 
 

ItemCount = ListBox1->Items->Count; 

 

if (ItemCount>0) 

 

    { 

            for (Index=0; Index<ItemCount; Index++) 
 

    if (ListBox1->Selected[Index]) 

                { 
 

        StatusBar1->SimpleText=ListBox1->Items->Strings[Index]; 

             

MediaPlayer1->FileName=ListBox1->Items->Strings[Index]; 

 

 

MediaPlayer1->Open(); 

                } 
            } 


 
 

Programowanie metody zachowania się statusu MediaPlayer 

 
Po linii zawierającej deklarację TFormMuzyka *FormMuzyka; dopisz : 
 
void DispMode(void) 

switch ( Form1->MediaPlayer1->Mode ) 
 

   

case 

mpNotReady : Form1->Label2->Caption="Not ready"; break; 

   

case 

mpStopped  : Form1->Label2->Caption="Stopped  "; break; 

   

case 

mpPlaying 

: Form1->Label2->Caption="Playing  "; break; 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5.                                                 9 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

   

case 

mpRecording : Form1->Label2->Caption="Recording"; break; 

   

case 

mpSeeking 

: Form1->Label2->Caption="Seeking  "; break; 

   

case 

mpPaused 

: Form1->Label2->Caption="Paused   "; break; 

   

case 

mpOpen 

 

: Form1->Label2->Caption="Open     "; break; 

   

default : Form1->Label2->Caption="undefined"; 

 

if (Form1->MediaPlayer1->Wait) Form1->Label2->Caption=+" WAIT"; 
}
 
 
 

Programowanie metody FormCreate 

 
Zaprojektujemy teraz metodę, która będzie uruchamiana podczas pierwszego otwierania 
formularza, czyli startu naszej aplikacji. 
 
Przejdź do formularza Form1 (klawisz F12). 
 

 

 
Wybierz w oknie Object Inspector „Form1” i kliknij dwa razy na zdarzenie 
OnCreate” 
 
Po wybraniu zdarzenia OnCreate w oknie edycji kodu C++ metody związanej  
z  wybranym zdarzeniem wpisujemy następujący kod: 
 
 
void __fastcall TForm1::FormCreate(TObject *Sender) 

    MediaPlayer1->Notify=true; 
}
 
 

Programowanie metod MediaPlayer1 – przyciski „MediaPlayer” 

 
void __fastcall TForm1::MediaPlayer1Click(TObject *Sender, 

      TMPBtnType Button, bool &DoDefault) 

 

DispMode(); 


//--------------------------------------------------------------------------- 
 
void __fastcall TForm1::MediaPlayer1Notify(TObject *Sender) 

 

DispMode(); 

} 

background image

10 

C++ Builder. Programowanie obiektowe. Ćwiczenie 5. 

______________________________________________________________________ 

______________________________________________________________________ 
 

©2004 Jerzy Kluczewski 

 

 

Programowanie metody Button2Click – przycisk „Kolor” 

 
Po wybraniu zdarzenia OnClick w oknie edycji kodu C++ metody związanej  
z  wybranym zdarzeniem wpisujemy następujący kod: 
 
void __fastcall TForm1::Button2Click(TObject *Sender) 

 

if (ColorDialog1->Execute()) 

        { 
        Shape1->Brush->Color=ColorDialog1->Color; 
        Image1->Canvas->Pen->Color = ColorDialog1->Color; 
        } 

} 
 
 
Wypróbuj działanie projektu (F9
 

 

 

 

 
 
 
 
 
 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 5.                                                 11 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 

Programowanie metody SpeedButton1Click – przycisk „GRAJ” 

 
Po wybraniu zdarzenia OnClick w oknie edycji kodu C++ metody związanej  
z  wybranym zdarzeniem (SpeedButton1Click) wpisujemy następujący kod: 
 
void __fastcall TForm1::SpeedButton1Click(TObject *Sender) 

if (ListBox1->ItemIndex>-1) 
    { 
    /* graj wybrane pliki */ 
    MediaPlayer1->FileName=ListBox1->Items->Strings[ListBox1->ItemIndex]; 
    MediaPlayer1->Open(); 
    MediaPlayer1->Play(); 
    DispMode(); 
    }; 

 

Programowanie metody SpeedButton2Click – przycisk „STOP” 

 
Po wybraniu zdarzenia OnClick w oknie edycji kodu C++ metody związanej  
z  wybranym zdarzeniem (SpeedButton2Click) wpisujemy następujący kod: 
 
void __fastcall TForm1::SpeedButton2Click(TObject *Sender) 

if (ListBox1->ItemIndex>-1) 
    { 
    MediaPlayer1->Stop(); 
    DispMode(); 
    }; 
}
 
 
 

V.

 

Ukrywanie obiektu 

 

Ukrycie obiektu „MediaPlayer1” 

 
Zaznacz obiekt „MediaPlayer1” i przejdź do okna Object Inspector 
 
We właściwości Visible ustaw false 
 

 

 
 

background image

12 

C++ Builder. Programowanie obiektowe. Ćwiczenie 5. 

______________________________________________________________________ 

______________________________________________________________________ 
 

©2004 Jerzy Kluczewski 

 

 
 
 

VI.

 

Podsumowanie 

 

Nasz projekt zawiera następujące obiekty: 
 

 

 
Przetestujemy teraz działanie aplikacji: