cool web a perfektni rs- Doporucuji

Saturday, June 02, 2007

Tleskání a blikání

Jaký by to byl hrací automat, kdyby neobsahoval alespoň primitivní multimediální efekty. Když uživatel
vyhraje, zatleskáme mu a rozblikáme okno automatu. Poskytneme hráči také možnost tyto efekty předčasně
ukončit. Později (na pomocném formuláři parametrů) mu také umožníme, aby mohl tyto efekty vypnout natrvalo.
Úlohu zde řešíme pomocí funkcí API Windows. Podrobnější výklad práce s funkcemi API přesahuje rámec
i rozsah této brožury. Bude-li se vám kód zdát nesrozumitelný, použijte ho tak, jak je, nebo efekty do
aplikace nedávejte a prostě tento oddíl přeskočte.
Chcete-li volat v kódu Visual Basicu nějaké procedury z API Windows, musíte je nejprve deklarovat příkazem
Declare. Obvykle se také zároveň deklarují potřebné symbolické konstanty-ve Visual Basicu příkazem
Const. (Deklarace lze opsat pomocí různých prohlížečů API.) Do třídy formuláře přidejte nad první
proceduru kód vypsaný na příští stránce.
' Handle aktivního okna
Private Declare Function GetActiveWindow Lib "user32" () As Integer
' Blikání okna
Private Declare Function FlashWindow _
Lib "user32" (ByVal hwnd As Integer, ByVal bInvert As Integer) As Integer
' Přehrávání zvuků
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _
(ByVal lpszName As String, ByVal hModule As Integer, _
ByVal dwFlags As Integer) As Integer
' Konstanty pro přehrávání zvuků
Private Const SND_ASYNC As Integer = &H1 ' přehraje asynchronně
Private Const SND_FILENAME As Integer = &H20000 ' lpszName je název souboru
Pro účely blikání si připravíme ještě pomocné proměnné. První z nich bude určovat, kolikrát má okno zablikat
(pokud uživatel blikání předčasně neukončí), do druhé uložíme manipulační číslo aktivního okna:
Private KolikrátBlikat, Hwnd As Integer
Manipulační číslo aktivního okna vrací funkce GetActiveWindow:
Hwnd = GetActiveWindow()
Funkce pro přehrávání zvuků a blikání budete volat tehdy, když uživatel vyhrál. Například, do konstrukce
Select Case vypsané výše, která testuje různé situace po vylosování čísel, přidejte kód podobný tomuto
(uvádím kód jen pro jednu větev konstrukce Select Case):
Case "DVESTEJNE"
picVýhra.Image = Image.FromFile(Application.StartupPath & "\Money.wmf")
VýšeVýhry = CInt(CDbl(lblSázka.Text) / 10)
' Začne blikat okno
Timer1.Enabled = True
' Potlesk
PlaySound(Application.StartupPath & "\Applause.wav", 0, _
SND_ASYNC BitOr SND_FILENAME)

Labels: