Obsahuje základní funkce pro práci s hudebními CD. | |
8871 bytů | Kopírovat |
Modul obsahuje deklaraci některých základních API funkcí pro práci s joystickem a několik vlastních funkcí. Bohužel se mi nepodařilo sehnat joystick a tak si nejsem příliš jist funkčností tohoto modulu. | |
3453 bytů | Kopírovat |
Přehrávání multimediálních souborů
Pomocí této třídy můžete přehrávat multimediální soubory. Např. WAV, AVI atd. | |
8539 bytů | Kopírovat |
API funkce BitBLT rychle přesouvá pravoúhlou oblast pixelů z jedné oblasti do druhé. Např. z formuláře do jiného formuláře nebo rámečku apod.
Omlouvám se, pokud vzniknou nějaké nepřesnosti při výkladu konstant parametru
dwRop, nejsem až tak moc zběhlý v teorii počítačové grafiky.
Public Declare Function BitBlt Lib "gdi32" Alias "BitBlt" _
(ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, _
ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
'hDestDC handle kontextu zařízení - jinak řečeno kam kopírovat
'x levý horní roh cílové oblasti
'y pravý horní roh cílové oblasti
'nWidth šířka zdrojové a cílové oblasti
'nHeight výška zdrojové a cílové oblasti
'hSrcDC handle kontextu zařízení - odkud kopírovat data
'xSrc levý horní roh zdrojové oblasti
'ySrc pravý horní roh zdrojové oblasti
'dwRop parametr, jak vykreslovat obrázek
'konstanty parametru dwRop
Public Const BLACKNESS = &H42 'vyplní cílovou oblast barvou s indexem 0
've fyzické paletě (default černá)
Public Const DSTINVERT = &H550009 'invertuje cílovou oblasti
Public Const MERGECOPY = &HC000CA 'spojí barvu určené palety se zdrojem pomocí AND
Public Const MERGEPAINT = &HBB0226 'spojí inverzní zdroj s cílem pomocí operátoru OR
Public Const NOTSRCCOPY = &H330008 'kopíruje inverzní zdrojovou oblast
Public Const NOTSRCERASE = &H1100A6 'zkombinuje barvu zdroje a cíle použitím
'operátoru OR a výsledek invertuje
Public Const PATCOPY = &HF00021 'kopíruje určenou paletu do cílové bitmapy
Public Const PATINVERT = &H5A0049 'kombinuje určenou paletu a cíl pomocí operátoru XOR
Public Const PATPAINT = &HFB0A09 'kombinuje určenou paletu se zdrojem pomocí OR a
'výsledek kombinuje s cílovou oblastí
Public Const SRCAND = &H8800C6 'kombinuje zdroj a cíl pomocí AND
Public Const SRCCOPY = &HCC0020 'zkopíruje zdrojovou oblast do cílové
Public Const SRCERASE = &H440328 'kombinuje inverzní barvu cíle s barvou zdroje pomocí AND
Public Const SRCINVERT = &H660046 'kombinuje zdrojovu a cílovou barvu pomocí XOR
Public Const SRCPAINT = &HEE0086 'kombinuje barvu zdroje a cílu pomocí OR
Public Const WHITENESS = &HFF0062 'vyplní cílovou oblast barvou s indexem 1
've fyzické paletě (default bílá)
Potřebujete-li udělat k Vašemu obrázku jeho inverzní podobu, není nic jednoduššího než
API funkce InvertRect. Tato funkce používá logickou operaci NOT pro každý pixel
vybrané oblasti. Na černobílém monitoru změní černou barvu na bílou a naopak. Zde je
deklarace funkce:
Public Declare Function InvertRect Lib "user32" Alias "InvertRect" _
(ByVal hdc As Long, lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Potřebujete vybrat pravoúhlou oblast ?
Potřebujete-li vybrat nějakou pravoúhlou oblast, musíte uživateli umožnit vykreslit
obdélník, pomocí něhož si může oblast vybrat a to pomocí API funkce DrawFocusRect.
Jak to vypadá, si můžete vyzkoušet sami, když kliknete třeba na plochu Windows a táhnete
myší. Použijete-li tuto funkci poprvé, vykreslí se obdélník, podruhé se stejnými souřadnicemi
se obdélník překreslí barvou pozadí, tj. vymaže se. Funkce má velice jednoduché parametry, takže
uvedu jen její deklaraci.
Public Declare Function DrawFocusRect Lib "user32" _
(ByVal hdc As Long, lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Použití může vypadat třeba takto: (picture1 musí mít ScaleMode nastaveno na Pixel)
Private x1 As Long
Private x2 As Long
Private y1 As Long
Private y2 As Long
Private obdelnik As RECT
Private Sub Picture1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
x1 = X
y1 = Y
End If
End Sub
Private Sub Picture1_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
'Smazani stareho obdelniku
If (y2 <> 0 Or x2 <> 0) Then DrawFocusRect Picture1.hdc, obdelnik
x2 = X: y2 = Y
With obdelnik
.Left = x1
.Right = x2
.Top = y1
.Bottom = y2
End With
DrawFocusRect Picture1.hdc, obdelnik
End If
End Sub
Rychlé vykreslení elipsy nebo kružnice
Na nakreslení elipsy nebo kružnice se ve Windows používá API funkce Ellipse. Její použití
je jednoduché. Jen nezapomeňte nastavit vlastnost ScaleMode prvku, na který ji chcete vykreslit na
Pixel.
Private Declare Function Ellipse Lib "gdi32" _
(ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, _
ByVal X2 As Long, ByVal Y2 As Long) As Long
Příklad použití:
Ellipse Picture1.hDC, 1, 1, 100, 100 'Vykreslí kružnici jejíž
'průměr je 100 pixelů
Rychlé vykreslení mnohoúhelníku
Mnohoúhelník se dá ve Windows jednoduše nakreslit pomocí API funkce Polygon. Parametry jsou:
hDC zařízení, ukazatel na první prvek v poli, počet prvků v poli. Nezapomeňte opět nastavit
vlastnost ScaleMode na Pixel.
Public Declare Function Polygon Lib "gdi32" Alias "Polygon" _
(ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
Public Type POINTAPI
x As Long
y As Long
End Type
Příklad:
Dim vrchol(1 to 3) As POINTAPI
vrchol(1).x=1
vrchol(1).y=3
.....
Polygon(Me.hDC,vrchol(1),3)
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
X As Long
Y As Long
End Type
Přehrávání menších zvukových souborů
Pro přehrávání menších zvukových souborů je výhodné použít API funkci sndPlaySound. Zde je
její deklarace a několik základních konstant pro parametr uFlags:
Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Public Const SND_ASYNC = &H1
Public Const SND_LOOP = &H8
Public Const SND_NODEFAULT = &H2
Public Const SND_SYNC = &H0
Následující kód přehraje soubor media.wav. Konstanta SND_SYNC způsobí, že program bude pokračovat
až po přehrátí zvuku.
sndPlaySound ("media.wav", SND_SYNC)
Nechcete-li čekat na ukončení přehrávání, musíte nastavit parametr uFlags na SND_ASYNC.
sndPlaySound ("media.wav", SND_ASYNC)
V případě, že soubor nebude nalezen, přehraje se standardní (default) systémový
zvuk (to platí jak pro SND_SYNC, tak i pro SND_ASYNC). Jestli není žádný definován,
funkce skončí chybou. Nechcete-li v případě nenalezení souboru přehrávat default zvuk,
přidejte ještě konstantu SND_NODEFAULT.
sndPlaySound ("media.wav", SND_SYNC + SND_NODEFAULT)
Přehrávat můžete také systémové zvuky pod jejích jménem. Doopravdy to funguje tak, že funkce
sndPlaySound nejdříve hledá parametr lpszSoundName v systémových zvucích a až potom
jako soubor na disku.
Soubor může být přehráván také ve smyčce, tj. pořád dokola.
sndPlaySound ("media.wav", SND_LOOP + SND_ASYNC)
V tomto případě musí být uveden flag SND_ASYNC. Program pokračuje hned dále. Chcete-li přehrávání
ukončit, zapište tento příkaz:
sndPlaySound (vbNull, 0)
Nevíte jestli má počítač zvukovou kartu ?
Na to je jednoduchá pomoc:
Declare Function waveOutGetNumDevs Lib "winmm.dll" Alias "waveOutGetNumDevs" () As Long
Dim i As Integer
i = waveOutGetNumDevs()
If i > 0 Then
MsgBox "V počítači je zvuková karta.", vbInformation, "Test zvukové karty"
Else
MsgBox "V počítači není zvuková karta.", vbInformation,"Test zvukové karty"
End If