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
2
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”.
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
4
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:
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.
6
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);
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.
8
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;
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();
}
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)
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
12
C++ Builder. Programowanie obiektowe. Ćwiczenie 5.
______________________________________________________________________
______________________________________________________________________
©2004 Jerzy Kluczewski
VI.
Podsumowanie
Nasz projekt zawiera następujące obiekty:
Przetestujemy teraz działanie aplikacji: