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 TypePouž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 LongPří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 TypePří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 = &H0Ná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