-
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.