Tutorial 1 - Odtwarzacz
animacji AviPlayer wersja 1.0
Programowanie ostatnio staje siΩ coraz bardziej
popularne, jednak nie ka┐dego staµ na zakup ksi▒┐ki
za 100 z│otych i pr≤buje znale╝µ co╢ w
Internecie. Czasami uda siΩ odszukaµ warto╢ciow▒
stronΩ, jednak wiΩkszo╢µ z nich ginie w
przepastnych g│Ωbiach Internetu, dlatego postanowi│em
podzieliµ siΩ z wami kursami programowania z mojej
strony. Kursy te pozwol▒ wam nauczyµ siΩ podstaw
programowania w Borland C++ Builderze, wiΩc
je╢li nigdy nie programowa│e╢ to nic nie stoi na
przeszkodzie, aby╢ zacz▒│, jednak od razu
przestrzegam, ┐e to wci▒ga :).
Na pocz▒tku nale┐y zainstalowaµ na swoim
komputerze ╢rodowisko programowania Borland C++
Builder, najlepiej wersjΩ nr 3. Mo┐na je znale╝µ
na kompaktach do│▒czonych do nastΩpuj▒cych
czasopism komputerowych:
Borland C++ Builder 3 Standard - pe│na
wersja:
Borland C++ Builder 4 - trial:
- PC World Komputer 5/1999
- Chip 6/1999
Borland C++ Builder 5 - trial:
- Chip 6/2000
- Software 5/2000
- Software 10/2000
Najlepiej by│oby te┐ do ka┐dego tutoriala ╢ci▒gn▒µ
z Internetu plik spakowany WinRAR'em (odno╢nik do
strony na dole ka┐dego tutoriala). Znajduj▒ siΩ w
nim dwa katalogi: Potrzebne pliki, gdzie umieszczone
s▒ wszystkie pliki, kt≤re s▒ potrzebne do
wykonania projektu (np. ikony, bitmapy, itp.) i
katalog Gotowy projekt, gdzie umieszczone s▒ pliki
z gotow▒ przyk│adow▒ aplikacj▒.
A wiΩc do dzie│a!
Zak│adamy na dysku katalog AviPlayer1.
Uruchamiamy Borland C++ Buildera. W│▒czamy menu
File->Save All, otwieramy nasz katalog AviPlayer1
i w okienku Save Unit1 As wpisujemy FormMain.cpp, a
w okienku Save Project1 As wpisujemy AviPlayer1.bpr.
Nasze ╢rodowisko pracy wygl▒da mniej wiΩcej
tak:
- na ╢rodku ekranu widzimy szare okno, jest ono
g│≤wnym oknem naszego programu (bΩdziemy je
nazywaµ formularzem), na razie nic ono nie
zawiera
- po lewej stronie mamy okno Inspektora Obiekt≤w
(Object Inspector), w kt≤rym mo┐na zmieniaµ w│a╢ciwo╢ci
komponent≤w (na zak│adce Properties) i
przypisywaµ im funkcje obs│ugi zdarze± (na
zak│adce Events)
- u g≤ry po lewej stronie jest kilka
przydatnych przycisk≤w (np. otwieranie i
zapisywanie plik≤w, uruchamianie programu)
- u g≤ry po prawej stronie znajduje siΩ najwa┐niejsza
rzecz, czyli zak│adki z komponentami
Klikamy na formularz, wtedy staje siΩ on aktywny
(co widzimy po zmianie koloru paska tytu│u na
niebieski). Teraz mo┐emy w oknie Inspektora Obiekt≤w
zmieniµ opcje naszego formularza dotycz▒ce jego
wygl▒du, zachowania, itp. (w lewej kolumnie
Inspektora Obiekt≤w umieszczone s▒ nazwy w│a╢ciwo╢ci,
natomiast w prawej kolumnie odpowiadaj▒ce im warto╢ci):
- BorderIcons->iMaximize = false
- BorderStyle = bsSingle
- Caption = AviPlayer 1.0
- Name = MainForm
- Position = poScreenCenter
Znaczenie w│a╢ciwo╢ci:
- BorderIcons okre╢la, kt≤re ikony w
prawym g≤rnym rogu formularza bΩd▒ aktywne
(dwukrotne klikniΩcie na nazwΩ tej w│a╢ciwo╢ci
spowoduje pokazanie siΩ jej podw│a╢ciwo╢ci,
poznajemy to po znaku plusa ko│o nazwy w│a╢ciwo╢ci),
biMaximize dotyczy ikony maksymalizacji (zmiany
widoczne bΩd▒ dopiero po uruchomieniu
programu)
- BorderStyle okre╢la rodzaj obramowania
formularza (zmiany widoczne bΩd▒ dopiero po
uruchomieniu programu)
- Caption zawiera tekst wy╢wietlany na
pasku tytu│u programu
- Name przechowuje nazwΩ formularza
identyfikuj▒c▒ ten formularz podczas
programowania
- Position okre╢la po│o┐enie
formularza (zmiany widoczne bΩd▒ dopiero po
uruchomieniu programu)
Zmiana tych kilku w│a╢ciwo╢ci formularza mia│a
na celu dostosowanie jego zachowania tak, aby
odpowiada│o naszym wymaganiom. Jest jeszcze wiele
innych w│a╢ciwo╢ci, czΩ╢µ z nich wykorzystamy
p≤╝niej. Mo┐emy teraz wcisn▒µ F9 i obejrzeµ
nasz▒ dotychczasow▒ pracΩ.
Po zamkniΩciu programu z zak│adki komponent≤w
System wybieramy MediaPlayer i klikamy na
formularzu, co powoduje umieszczenie na nim tego
komponentu. Mo┐emy teraz przyst▒piµ do zmiany
jego w│a╢ciwo╢ci:
- AutoOpen = true
- DeviceType = dtAVIVideo
- FileName = ╢cie┐ka dostΩpu
- Name = MediaPlayer
- VisibleButtons->btRecord = false
- VisibleButtons->btReject = false
Znaczenie w│a╢ciwo╢ci:
- AutoOpen powoduje po uruchomieniu
programu wczytanie do komponentu MediaPlayer ╢cie┐ki
dostΩpu do pliku animacji, kt≤r▒ bΩdziemy
odtwarzaµ
- ColoredButtons okre╢la, czy poszczeg≤lne
przyciski bΩd▒ kolorowe, czy czarne
- DeviceType pozwala na odtwarzanie tylko
plik≤w *.avi
- FileName zawiera ╢cie┐kΩ dostΩpu do
pliku *.avi, kt≤ry bΩdziemy wy╢wietlaµ (np.
c:\plik.avi)
- VisibleButtons okre╢la, kt≤re
przyciski bΩd▒ widoczne, a kt≤re nie
Uruchamiamy nasz program (F9) i wciskaj▒c
przycisk play uruchamiamy odtwarzanie animacji z
okre╢lonego przez nas pliku. Wy│▒czamy program.
Jestem pewien, ┐e wiΩkszo╢µ z was czuje w tym
momencie pewien niedosyt. Mamy dzia│aj▒cy program,
ale ┐eby wy╢wietliµ inny plik musimy wy│▒czyµ
program, zmieniµ ╢cie┐kΩ dostΩpu i w│▒czyµ
program. Czy nie da siΩ tego zrobiµ lepiej? Da siΩ!
Zmieniamy w│a╢ciwo╢ci komponentu MediaPlayer:
- AutoOpen = false
- FileName = kasujemy zawarto╢µ
Z zak│adki Standard wybieramy Button i zmieniamy
jego w│a╢ciwo╢ci:
- Caption = &Otw≤rz
- Name = OpenButton
Znaczenie w│a╢ciwo╢ci:
- Caption znak & przed literk▒ O
spowoduje, ┐e na przycisku bΩdzie wy╢wietlony
tekst Otw≤rz, pozwala to na zastosowanie
skr≤tu klawiszowego Alt+O
Z zak│adki Dialogs wybieramy OpenDialog i
zmieniamy jego w│a╢ciwo╢ci:
Hmmm. Do dej pory nie wpisali╢my, ani jednej
linijki kodu, a program jako╢ dzia│a│. Niestety
nie da siΩ tak wiecznie. Chcemy, aby nasz program
po wci╢niΩciu naszego klawisza Otw≤rz wywo│ywa│
okienko OpenDialog, gdzie bΩdziemy mogli wybraµ
plik, kt≤ry chcieliby╢my ogl▒dn▒µ. WiΩc nasz
program musi odpowiedzieµ na tzw. zdarzenie, kt≤rym
bΩdzie klikniΩcie mysz▒ w przycisk Otw≤rz.
Najprostszym sposobem utworzenia funkcji obs│uguj▒cej
zdarzenie klikniΩcia w przycisk jest najechanie na
niego mysz▒ i dwukrotne klikniΩcie. Poka┐e siΩ w≤wczas
edytor kodu, kt≤ry do tej pory by│ ukryty pod
formularzem. Zawiera on szkielet funkcji obs│uguj▒cej
to zdarzenie:
void __fastcall TMainForm::OpenButtonClick(TObject
*Sender)
{
}
Jest to funkcja obs│uguj▒ca nasze zdarzenie (klikniΩcia
mysz▒ na przycisku), na razie jednak ona nic nie
robi. Polecenia wpisuje siΩ miΩdzy klamrami { }.
Dodajmy do naszej funkcji nastΩpuj▒c▒ linijkΩ
(zaznaczon▒ czerwonym kolorem):
void __fastcall TMainForm::OpenButtonClick(TObject
*Sender)
{
OpenDialog->Execute();
}
co spowoduje, ┐e po wci╢niΩciu przycisku
uruchomi siΩ okno wyboru pliku. Mo┐emy uruchomiµ
program i sprawdziµ, ┐e to dzia│a, ale co z tego,
┐e wybieramy plik, a komputer nic p≤╝niej nie
robi z wybranym przez nas plikiem. Trzeba mu nakazaµ,
aby za│adowa│ do komponentu MediaPlayer ╢cie┐kΩ
do pliku, kt≤ry wybrali╢my w oknie OpenDialog.
Wcale to nie jest takie trudne, nasza funkcja bΩdzie
wiΩc wygl▒daµ:
void __fastcall
TMainForm::OpenButtonClick(TObject *Sender)
{
OpenDialog->Execute();
MediaPlayer->FileName
= OpenDialog->FileName;
MediaPlayer->Open();
}
Sprawdzamy program, dzia│a? Wydawa│oby siΩ, ┐e
tak. Wciskamy przycisk Otw≤rz, wybieramy plik,
wciskamy OK i dzia│a, ale spr≤bujcie sprawdziµ co
siΩ stanie je╢li zamiast OK wci╢niecie Cancel?
Program sygnalizuje b│▒d, dlaczego? Dzieje siΩ
tak poniewa┐ nie wybrali╢my ┐adnego pliku, a
program chcia│ go przypisaµ do w│a╢ciwo╢ci
FileName!!! Oczywi╢cie da siΩ to naprawiµ. Zmie±my
nasz▒ funkcjΩ, aby wygl▒da│a tak:
void __fastcall TMainForm::OpenButtonClick(TObject
*Sender)
{
if (OpenDialog->Execute())
{
MediaPlayer->FileName
= OpenDialog->FileName;
MediaPlayer->Open();
}
}
Teraz na pocz▒tku funkcji sprawdzane jest czy
zamkniΩcie okna OpenDialog zako±czy│o siΩ po wci╢niΩciu
przycisku OK (czyli je╢li wybrano plik), a je╢li
tak to wykonywane s▒ instrukcje miΩdzy klamrami, w
przeciwnym wypadku, gdy okno OpenDialog zamkniΩto
przyciskiem Cancel (nie wybrano pliku) ┐adna
instrukcja nie jest wykonywana.
Aby nasza animacja by│a uruchamiana
automatycznie po wybraniu pliku, wpisujemy do
funkcji:
void __fastcall TMainForm::OpenButtonClick(TObject
*Sender)
{
if (OpenDialog->Execute())
{
MediaPlayer->FileName
= OpenDialog->FileName;
MediaPlayer->Open();
MediaPlayer->Play();
}
}
A wiΩc g│≤wne zadanie programu mamy ju┐
wykonane, teraz mo┐emy siΩ zaj▒µ jego wygl▒dem.
Na pocz▒tek proponujΩ wybranie ikonki programu.
Wy╢wietlamy menu Project->Options (lub u┐ywaj▒c
skr≤tu SHIFT+CTRL+F11), wybieramy zak│adkΩ
Application, klikamy Load Icon... i wybieramy
ikonΩ dla programu (np. aviplayer1.ico z plik≤w do│▒czonych
do tutoriala). Klikamy OK i mo┐emy odpaliµ nasz
program. Jak widaµ ikonka pojawia siΩ na pasku
tytu│u programu i w pasku zada± Windowsa. NastΩpnie
pozmieniamy kilka opcji naszych komponent≤w. Na
pocz▒tek OpenDialog:
- Filter = kliknij tu dwukrotnie
- InitialDir = ╢cie┐ka dostΩpu
- Title = Otw≤rz plik z animacj▒
Znaczenie w│a╢ciwo╢ci:
- Filter okre╢la jakie pliki wy╢wietlane
bΩd▒ w oknie OpenDialog (np. w lewej kolumnie
wpisujemy Animacje (*.avi), a w prawej kolumnie
*.avi)
- InitialDir zawiera ╢cie┐kΩ dostΩpu
do jakiego╢ katalogu, kt≤rego zawarto╢µ bΩdzie
wy╢wietlana po uruchomieniu okna OpenDialog
(np. c:\)
- Title zawiera tekst, kt≤ry pojawi siΩ
na pasku tytu│u okna OpenDialog
Nasza animacja mo┐e byµ wy╢wietlana bezpo╢rednio
na formularzu, a nie w nowym oknie. W tym celu z zak│adki
komponent≤w Standard wybieramy Panel i umieszczamy
go na formularzu, zmieniaj▒c jego opcje:
- Caption = kasujemy zawarto╢µ
- Height = 200
- Left = 0
- Name = EkranPanel
- Top = 0
- Width = 200
Znaczenie w│a╢ciwo╢ci:
- Left okre╢la po│o┐enie lewej krawΩdzi
panelu wzglΩdem formularza, tutaj maksymalnie
dosuniΩty do lewej
- Top okre╢la po│o┐enie g≤rnej krawΩdzi
panelu wzglΩdem formularza, tutaj maksymalnie
dosuniΩty do g≤ry
Zmieniamy te┐ w│a╢ciwo╢ci komponentu
MediaPlayer:
- Display = EkranPanel
- Visible = false
Znaczenie w│a╢ciwo╢ci:
- Display ustawia wy╢wietlanie animacji
na panelu EkranPanel
- Visible okre╢la, czy MediaPlayer bΩdzie
widoczny podczas dzia│ania programu
Zmieniamy te┐ w│a╢ciwo╢ci komponentu
OpenButton:
- Left = 0
- Top = 200
- Width = 200
i w│a╢ciwo╢ci MainForm:
- ClientHeight = 225
- ClientWidth = 200
Znaczenie w│a╢ciwo╢ci:
- ClientHeight okre╢la wysoko╢µ
formularza dostΩpnego dla u┐ytkownika
- ClientWidth okre╢la szeroko╢µ
formularza dostΩpnego dla u┐ytkownika
Nie widzimy teraz na formularzu komponentu
MediaPlayer poniewa┐ znajduje siΩ on pod panelem
EkranPanel. Czasami tak siΩ zdarza, ┐e jedne
komponenty przys│aniaj▒ drugie. Aby zmieniµ wtedy
ich w│a╢ciwo╢ci mo┐emy wybraµ ten komponent z
rozwijanej listy znajduj▒cej siΩ na g≤rze
Inspektora Obiekt≤w. Uruchamiamy aplikacjΩ i
animacja jest wy╢wietlana na panelu tylko, ┐e
animacje o rozmiarze wiΩkszym od rozmiaru panelu s▒
obcinane. Aby animacja by│a dopasowana do wielko╢ci
naszego panelu EkranPanel, do naszej funkcji do│▒czamy
linijkΩ:
void __fastcall TMainForm::OpenButtonClick(TObject
*Sender)
{
if (OpenDialog->Execute())
{
MediaPlayer->FileName
= OpenDialog->FileName;
MediaPlayer->Open();
MediaPlayer->DisplayRect
= Rect(0, 0, 200, 200);
MediaPlayer->Play();
}
}
Zapraszam wszystkich do drugiego tutoriala, gdzie
rozbudujemy program AviPlayer.
Je╢li nie mo┐esz siΩ doczekaµ nastΩpnych
tutoriali to zapraszam na moj▒ stronΩ: "Borland
C++ Builder (nie tylko) dla pocz▒tkuj▒cych"
pod adresem www.borland.prv.pl.
Znajdziesz tam wszystko co jest zwi▒zane z Borland
C++ Builderem.
autor: Piotr W≤jtowicz (Hetman)
www: http://www.borland.prv.pl
e-mail: thehetman@poczta.fm
|