-
V dalÜφ aplikaci se seznßmφme s pou₧φvßnφm funkce MessageBeep. ZaΦneme
s v²vojem novΘ aplikace a na formulß° umφstφme skupinu p∞ti voliΦ∙ s texty
mb_IconAsterisk,
mb_IconExclamation,
mb_IconHand,
mb_IconQuestion a
mb_Ok (jsou to jmΘna standardnφch zvuk∙ Windows)
a t°i tlaΦφtka s texty Test,
Beep 0xFFFF a Beep Sound.
Pokud chceme zjistit, zda v naÜem poΦφtaΦi je instalovßn ovladaΦ zvuku
(mßme zvukovou kartu), pak stiskneme tlaΦφtko Test. Toto zjiÜt∞nφ
je provedeno funkcφ waveOutGetNumDevs (funkce je v hlaviΦkovΘm souboru
Mmsystem.h).
Obsluha stisku tohoto tlaΦφtka je tvo°ena t∞mito p°φkazy:
if (waveOutGetNumDevs()
> 0)
MessageDlg("Zvuky
jsou podporovßny", mtInformation,
TMsgDlgButtons() << mbOK, 0);
else
MessageDlg("Zvuky
nejsou podporovßny", mtInformation,
TMsgDlgButtons() << mbOK, 0);
TlaΦφtko Beep 0xFFFF vydßvß standardnφ zvuk. Jeho obsluhu tvo°φ
p°φkaz:
MessageBeep(0xFFFF);
TlaΦφtko Beep Sound p°ehraje zvuk podle vybranΘho voliΦe. Jeho
obsluha je tvo°ena p°φkazy:
unsigned short Priznak;
switch (RadioGroup1->ItemIndex)
{
case 0: Priznak
= MB_ICONASTERISK; break;
case 1: Priznak
= MB_ICONEXCLAMATION; break;
case 2: Priznak
= MB_ICONHAND; break;
case 3: Priznak
= MB_ICONQUESTION; break;
case 4: Priznak
= MB_OK; break;
}
MessageBeep(Priznak);
Tφm jsme dokonΦili v²voj tΘto aplikace. Pokud mßte v poΦφtaΦi zvukovou
kartu, pak ji m∙₧ete vyzkouÜet.
-
Vytvo°φme jeÜt∞ obdobnou aplikaci, ve kterΘ si nadefinujeme strukturu pro
ulo₧enφ informacφ o jednotliv²ch zvucφch. ZaΦneme v²voj novΘ aplikace a
na formulß° vlo₧φme komponentu ListBox, tlaΦφtko a dv∞ komponenty
Label
(jednu k hornφmu okraji formulß°e a druhou ke spodnφmu okraji). V hornφ
komponent∞ Label zm∞nφme text na: Vyber libovoln² zvuk ze seznamu
a pro jeho p°ehrßnφ stiskni tlaΦφtko. U spodnφ komponenty
Label
text zruÜφme. P°ed deklaraci t°φdy formulß°e v hlaviΦkovΘm souboru vlo₧φme
deklaraci struktury:
struct soundinfo
{
char *name;
UINT value;
char *param;
};
a na zaΦßtek zdrojovΘho souboru formulß°e nßsledujφcφ deklaraci:
soundinfo sounds[]
= {
{"Standard", 0xFFFFFF, "0xFFFFFF"},
{"Asterisk", MB_ICONASTERISK, "MB_ICONASTERISK"},
{"Exclamation", MB_ICONEXCLAMATION, "MB_ICONEXCLAMATION"},
{"Hand", MB_ICONHAND, "MB_ICONHAND"},
{"Question", MB_ICONQUESTION, "MB_ICONQUESTION"},
{"Default", MB_OK, "MB_OK"}
};
Obsluha udßlosti OnCreate formulß°e je tvo°ena p°φkazy:
for (int x=0; x<6;
x++)
ListBox1->Items->Add(sounds[x].name);
a obsluha stisku tlaΦφtka t∞mito p°φkazy:
for (int x=0; x<6;
x++)
if (ListBox1->Selected[x])
{
MessageBeep(sounds[x].value);
Label2->Caption = "MessageBeep("+AnsiString(sounds[x].param)+");";
}
-
Funkce sndPlaySound (je definovanß v Mmsystem.h) m∙₧e b²t
pou₧ita k p°ehrßvßnφ systΘmov²ch zvuk∙ a soubor∙ WAV. Na formulß° umφstφme
komponentu
ListBox, ve kterΘ uvedeme n∞kterΘ systΘmovΘ zvuky a soubory
WAV (nap°. SystemStart, SystemExit, SystemQuestion,
Bell.wav
a Dog.wav) a tlaΦφtka Hraj, Zastav a Cyklus.
V obsluze OnCreate formulß°e vynulujeme vlastnost
ItemIndex
komponenty ListBox. Obsluha stisku tlaΦφtka Hraj je tvo°ena
p°φkazy:
sndPlaySound(
ListBox1->Items->Strings[ListBox1->ItemIndex].c_str(),
SND_ASYNC);
Tento k≤d m∙₧e b²t pou₧it k p°ehrßvßnφ jak systΘmov²ch zvuk∙, tak soubor∙
WAV. Pokud polo₧ka seznamu nemß ₧ßdn² odpovφdajφcφ soubor nebo systΘmov²
zvuk, pak se zahraje implicitnφ zvuk. Druh² parametr udßvß, ₧e mß funkce
p°ehrßt zvuk asynchronn∞ a ihned vrßtit °φzenφ systΘmu. Pokud zde pou₧ijeme
SND_SYNC,
pak funkce nevrßtφ °φzenφ, pokud nenφ cel² zvuk kompletn∞ p°ehrßn. V naÜem
p°φpad∞ (p°i asynchronnφm p°ehrßvßnφ) m∙₧eme ale zvuk zastavit op∞tovn²m
volßnφm stejnΘ funkce, bez prvnφho parametru (obsluha stisku tlaΦφtka Zastav):
sndPlaySound(NULL,
0);
Poslednφ tlaΦφtko provßdφ opakovanΘ p°ehrßvßnφ zvuku. Jeho obsluha
je tvo°ena p°φkazy:
sndPlaySound(ListBox1->Items->Strings[ListBox1->ItemIndex].c_str(),
SND_ASYNC
| SND_LOOP);
Aplikace je hotova a pokud vlastnφme zvukovou kartu, pak si m∙₧eme
vyzkouÜet p°ehrßvßnφ r∙zn²ch soubor∙ WAV.
-
Komponenta MediaPlayer obsahuje v∞tÜinu schopnostφ Media Control
Interface (MCI) Windows, vysoko·rov≥ovΘho rozhranφ pro °φzenφ vnit°nφch
a vn∞jÜφch multimedißlnφch za°φzenφ. P°edevÜφm si povÜimn∞me vlastnosti
DeviceType.
M∙₧e nab²vat hodnoty dtAutoSelect, kterß znaΦφ, ₧e druh za°φzenφ
zßvisφ na p°φpon∞ aktußlnφho souboru. Alternativn∞ m∙₧eme zadat nap°. dtAVIVideo,
dtCDAudio,
dtWaveAudio
nebo mnoho jin²ch. Je to jedin² p°φstup, kter² m∙₧eme pou₧φt pro za°φzenφ
net²kajφcφ se souboru, jako Φtecφ za°φzenφ zvukovΘho CD. Jestli₧e je druh
za°φzenφ i soubor vybrßn, m∙₧eme danΘ za°φzenφ otev°φt (nebo nastavit hodnotu
vlastnosti
AutoOpen na true) a tlaΦφtka komponenty MediaPlayer
budou p°φstupnß (ne vÜechny jsou smysluplnß pro ka₧d² druh mΘdia). Komponenta
mß t°i vlastnosti t²kajφcφ se tlaΦφtek:
VisibleButtons, EnabledButtons
a ColoredButtons. Prvnφ urΦuje, kterß tlaΦφtka jsou p°φtomnß v ovladaΦi,
druhß povolenß tlaΦφtka a t°etφ tlaΦφtka s barevn²m oznaΦenφm. Komponenta
mß takΘ udßlost OnClick. Tato udßlost je ale jinß ne₧ obvykle, proto₧e
obsahuje parametr udßvajφcφ, kterΘ tlaΦφtko bylo stisknuto a dalÜφ parametr
m∙₧eme pou₧φt k potlaΦenφ implicitnφ akce spojenΘ s tlaΦφtkem. Udßlost
OnNotify
informuje komponentu o ·sp∞Ünosti akce generovanΘ tlaΦφtkem. Jinß udßlost
OnPostClick
je generovßna bu∩ jakmile akce zaΦne nebo kdy₧ skonΦφ (v zßvislosti na
hodnot∞ vlastnosti Wait; urΦuje zda operace majφ Φi nemajφ b²t synchronnφ).
ZaΦneme s v²vojem novΘ aplikace. K hornφmu okraji formulß°e vlo₧φme
komponentu Label s textem Soubor: a vedle dalÜφ komponentu
Label
jejφ₧ text zruÜφme a nazveme ji FileLabel. Pod tyto komponenty vlo₧φme
tlaΦφtko s textem Nov² soubor .... Obsluhu stisku tohoto tlaΦφtka
tvo°φ p°φkazy (na formulß° musφme vlo₧it i OpenDialog, kde nastavφme
vlastnost Filter na Soubory wav (*.wav) a Soubory midi
(*.mid)):
if (OpenDialog1->Execute())
{
FileLabel->Caption
= OpenDialog1->FileName;
MediaPlayer1->FileName
= OpenDialog1->FileName;
MediaPlayer1->Open();
MediaPlayer1->Notify
= True;
}
Pod tlaΦφtkem umφstφme nad sebe dv∞ komponenty Label s texty
Zprßva:
a Akce: a vedle n∞ dalÜφ dv∞ komponenty Label jejich text
op∞t zruÜφme a nazveme je NotifLabel a ActionLabel. Pod tyto
komponenty vlo₧φme komponentu MediaPlayer, kde nechßme zobrazit
pouze prvnφch p∞t tlaΦφtek. Pro tuto komponentu vytvo°φme obsluhy udßlostφ
OnClick
a OnNotify. Prvnφ obsluhu tvo°φ p°φkazy:
switch (Button) {
case btPlay:
ActionLabel->Caption = "Playing"; break;
case btPause:
ActionLabel->Caption = "Paused"; break;
case btStop:
ActionLabel->Caption = "Stopped"; break;
case btNext:
ActionLabel->Caption = "Next"; break;
case btPrev:
ActionLabel->Caption = "Previous"; break;
}
a druhou p°φkazy:
switch (MediaPlayer1->NotifyValue){
case nvSuccessful:
NotifLabel->Caption = "Success"; break;
case nvSuperseded:
NotifLabel->Caption = "Superseded"; break;
case nvAborted:
NotifLabel->Caption = "Aborted"; break;
case nvFailure:
NotifLabel->Caption = "Failure"; break;
}
MediaPlayer1->Notify
= true;
Aplikace je hotova a pokud vlastnφme zvukovou kartu, pak si m∙₧eme
p°ehrßt n∞jak² zvukov² soubor.
-
V dalÜφ aplikaci se budeme zab²vat videem. Tuto aplikaci m∙₧eme spustit
pouze, mßme-li na naÜem poΦφtaΦi n∞kter² z ovladaΦ∙ pro video (nap°. Microsoft
Video for Windows). ZaΦneme s v²vojem novΘ aplikace, na formulß° umφstφme
komponentu MediaPlayer, do jejφ vlastnosti FileName zadßme
n∞kter² soubor AVI a vlastnost AutoOpen nastavφme na true.
Nynφ ji₧ aplikaci m∙₧eme spustit a stiskem tlaΦφtka Play spustφme
p°ehrßvßnφ zadanΘho videa.
-
Jestli₧e nechceme video spouÜt∞t ve zvlßÜtnφm okn∞, pak na formulß° m∙₧eme
vlo₧it nap°. komponentu Panel a vlastnosti Display komponenty
MediaPlayer
urΦφme, kde se video bude zobrazovat. Zde mohou ale vzniknout problΘmy
s rozm∞ry zobrazovacφ plochy. VyzkouÜejte.
-
Pokuste se vytvo°it aplikaci pro p°ehrßvßnφ zvukov²ch CD.
-
Podφvßme se op∞t na jednu hotovou aplikaci. Aplikaci
si stßhn∞te. Tato aplikace obsahuje jednoduch² p∞tistrßnkov² editor,
ze kterΘho je mo₧no tisknout. Podφvejte se, jak je vy°eÜeno to, ₧e p°i
stisku tlaΦφtka m∙₧eme tisknout vÜechny strßnky nebo pouze n∞jak² interval
strßnek. Podφvejte se i na zjiÜ¥ovßnφ dalÜφch voleb nastaven²ch u₧ivatelem
v dialogovΘm okn∞ tisku. DalÜφ zajφmavß schopnost programu je pou₧itφ TStringList
pro sprßvu text∙ na zßlo₧kßch strßnek. Aplikaci vyzkouÜejte.