Systém
ReleaseDC
Funkce ReleaseDC vrací zpět zdroje obsazené při užívání GETDC pro získání kontextu zařízení. Tento krok by měl být udělán po okončení získávání kontextů zařízení ve vašem programu. Pokud nastane chyba funkce vrátí 0 jinak vrátí ne~nula. Pro názornost je uveden příklad.
Deklarace :
Form
Desktoph = GetDesktopWindow 0 x = GetDC ( Desktoph )
ret = RelaseDC(Desktoph , x)
Module
Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hdc As Long) As Long
GetTempPath
Funkce GetTempPath vraci standartní odkládací adresář Windows kds jsou uloženy dočasné soubory při instalaci programů. Obvykle to bude \ TEMP podadresář windows, a!e není to podmínkou. Pokud nastane chyba funkce vrátí 0 jinak vrací String cesty o definované délce.
Deklarace :
Form
Dim tempdir As String * 255
x = GetTempPath (255,tempdir)
Debug.Print "Odkládací adresář je "; Left( tempdir, x )
Module
Declare Function GetTempPath Lib "kernel32.dll" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal IpBuffer As String) As Long
GetParent
Funkce GetParent vrací handle rodičovského objektu jemuž definovaný objekt náleži. Snáze to pochopíte napříkladu. Pokud nastane chyba funkce vrátí 0 jinak vrací Handle rodičovského objektu.
Deklarace :
Form
Formulář Form 1 obsahuje tlačítko Commandl
Debug.Print GetParent (Commad1.hwnd)
Debug.Print Form1.hwnd
Funkce vrátí Handle formuláře Form1 neboť k němu tlačítko Command 1 náleži.
Module
Declare Function GetParent Lib "user32.dll" (ByVal hwnd As Long) As Long
SetParent
Funkce SetParent nastavuje handle nového rodičovského objektu Tzn. "dětský" objekt a jeho vlastnosti vztahujici se k jeho původnímu rodičovskému objektu budou přesunety do nového rodičovského objektu, Snáze to pochopíte na příkladu. Pokud nastane chyba funkce vrátí 0 jinak vrací Handle původního rodičovského objektu.
Deklarace :
Form
Formulář Form 1 obsahuje tlačítko Command 1 Formulář Form2 neobsahuje žádny objekt
oldhwnd = SetParent ( Command1.hwnd, Form2.hwnd )
Debug.Print Form1.hwnd; oldhwnd
Funkce přesune tlačítko Command1 z Form1 do Form2
Module
Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
GETDESKTOPWINDOW
Funkce GETDESKTOPWINDOW vrátí handle (HWND) monitoru bez ukazatele. Teoreticky lze rovněž použit přímo funkci GETDC , to však nemohu doporučit { může to vést k nepředvidatelným výsledkům ). Pokud nastane chyba fiinkce vrátí 0 , jinak vrátí hodnotu Handle.
Deklarace :
Form
Desktoph = GetDesktopWindow ()
Module
Declare Function SetPixel Lib "gdi32" Alias "SetPixel" (ByVal hdc As Long, ByVal x As Long,ByVal y As Long, ByVal crColor As Long) As Long
GetDC
Funkce GETDC vrátí kontext zařízení okna nebo objektu, dané jejím Handle. Tato funkce má stejný účinek jako použití VB objekt .HDC . Jestliže se pokusíte- zadat kontext zařízení jenž není zařízeni nastane chyba potom funkce vrací 0. Na příkladu se spojením obou funkcí dostaneme na kloub ploše monitoru.
Deklarace:
Form
Desktoph = GetDesktopWindow ()
x = GetDC ( Desktoph )
Module
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Pozn1.
Po ukončeni požiti funkcí je dobré uvolnit zdroje viz. ReleaseDC
Pozn2.
S připojením funkce StretchBIt můžeme snadno sejmout plochu monitoru jako to dělá PnntScreen.
GetWindowRect
Funkce GetWindowRect vrací velikost a pozici okna. Tato informace je převedena do proměnné převzaté jako LPRECT. Jestliže okno je mimo viditelnou část obrazovky, budou se hodnoty odrážet tak že (například vlevo objektu bude zápor). Pokud nastane chyba funkce vrátí 0 jinak vrací ne-nula.
Deklarace :
Form
Dim r As RECT
x = GetWindowRect ( Form1.hWndd, r )
Debug.Print "Width = " r.Right - r.Left Debug.Print "Height = " rBottom - r.Top
Module
Type Rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As Long, lpRect As RECT) As Long
Grafika
Rectangle
Funkce Rectangle vytvoří obdelník na definovaných souřadnicích vztahujících se k zadanému objektu(HDC)Barva obdeiniku bude převzata z nastaveni ForeColor objektu ke kterému náleží, pokud není nastavenapřímo.
Hodnoty jsou zadány v pořadí:
1. Objekt k němuž se vztahují souřadnice obdelníku
2. Souřadnice opěrného bodu X1
3. Souřadnice opěrného bodu Y1
4. Souřadnice opěrného bodu X2
5 Souřadnice opěrného bodu Y2
Deklarace:
Form
Form1 ForeColor = RGB{255, 0, 0) ' cervená x = Rectangle(Forml hdc, 25, 25, 100, 50)
Module
Declare Function Rectangle Lib "gdi32" Alias "Rectangle"(ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
RoundRect
Funkce RoundRect je obdoba funkce Rectangle s možnosti definice rádiusů rohů obdelníku.Barva obdelníku bude převzata z nastaveni ForeColor objektu ke kterému náleží, pokud není nastavena přímo.
Hodnoty jsou zadány v pořadí:
1. Objekt k němuž se vztahují souřadnice obdelníku
2. Souřadnice opěrného bodu X1
3. Souřadnice opěrného bodu Yl
4. Souřadnice opěrného bodu X2
5. Souřadnice opěrného bodu Y2
6. Šířka rádiusu rohu X3
7. Výška rádiusu rohu Y3
Deklarace:
Form
Forml.ForeColor = RGB(255, 0, 0) ' červená
x = RoundRect (FormLhdc, 25, 25, 100, 150, 10, 5)
Module
Declare Function RoundRect Lib "gdi32" Alias "RoundRect"(ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
BitBlt
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. Tato funkce je skutečně velmi rychlá.
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
nWidtb šířka zdrojové a cílové oblasti
nHeight výška zdrojové a cílové oblasti
hSrcDC handle kontextu zařízení - odkud kopírovat data
sSrc levý horní roh zdrojové oblasti
ySrc pravý' horní roh zdrojové oblasti
dwRop parametr, jak vykreslovat obrázek
Konstanty parametru dwRop Const
BLACKNESS = &H42
Vyplní cílovou oblast barvou s indexem 0 've fyzické paletě (default Čená)
DSTINVERT = &H550009
Invertuje cílovou oblastí
MERGECOPY = &HC000CA
Spojí barvu určené palety se zdrojem pomocí AND
MERGEPAINT = &HBB0226
Spojí inverzní zdroj s cílem pomocí operátoru OR NOTSRCCOPY = &H330008 kopíruje inverzní zdrojovou oblast
NOTSRCERASE = &H1100A6
Zkombinuje barvu zdroje a cíle použitím 'operátoru OR a výsledek invertuje
PATCOPY = &HF00021
Kopíruje určenou paletu do cílové bitmapy
PATINVERT = &H5A0049
Kombinuje určenou paletu a cíl pomocí operátoru XOR
PATPAINT = &HFB0A09
Kombinuje určenou paletu se zdrojem pomoci OR a výsledek kombinuje s cílovou oblastí
SRCAND = &H8800C6
Kombinuje zdroj a cíl pomoci AND
SRCCOPY = &HCC0020
Zkopíruje zdrojovou oblast do cílové
SRCERASE = &H440328
Kombinuje inverzní barvu cíle s barvou zdroje pomocí AND
SRCINVERT = &H660046
Kombinuje zdrojovu a cílovou barvu pomocí XOR
SRCPAINT = &HEE0086
Kombinuje barvu zdroje a cílu pomocí OR
WHITENESS = &HFF0062
Vyplní cílovou oblast barvou s indexem 1 've fyzické paletě (default bílá)
Deklarace:
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
STRETCHBLT
Funkce STRETCHBLT rychle přesouvá pravoúhlou oblast pixelů z jedné oblasti do druhé. Na rozdíl od BitBlt tato funkce také dovoluje měnit velikost originálu a dimenze obrazu. Navíc použiti metody "kopie", můžete určit jiné cesty kopírování obraz s DWROP parametrem. Bod který určíte v cíli bude honi-levý roh pro vloženi. Pokud nastane chyba funkce vrátí 0 jinak vrací ne nula.
HDESTDC
Handle kontextu zařízení -jinak řečeno kam kopírovat.
X
Souřadnice bodu X cílové oblasti.
Y
Souřadnice bodu V cílové oblasti.
NWIDTH
Šířka obrazu v cílové oblasti.
NHE1GHT
Výška obrazu v cílové oblasti.
XSRC
Souřadnice X horního-levého rohu zdroje.
YSRC
Souřadnice Y horního -levého rohu zdroje.
NSRCW1DTH
Šířka obrazu zdroje.
NSRCHEIGHT
Výška obrazu zdroje.
DWROP
Parametr jak vykreslit obrázek
Konstanty parametru DWROP Const
SRCAND = &H8800C6
Kombinuje zdroj a cil pomocí AND.
SRCCOPY = &HCC0020
Zkopíruje zdrojovou oblast do cílové.
SRCERASE = &H440328
Kombinuje inverzní barvu cíle s barvou zdroje pomoci AND.
SRCINVERT = &H660046
Kombinuje zdrojovou a cílovou barvu pomocí XOR
SRCPAINT = &HEE0086
Kombinuje určenou paletu se zdrojem pomocí OR a výsledek kombinuje s cílovou oblastí.
Příklad:
Zkopíruje oblast z Picturel do Picture2 se změnou velikosti
x = StretchBlt(Picturel, hDC, 0, 0, 32, 32, Picture2.hDC, 0, 0, 16, 32, SRCCOPY)
Picturel .Refresh
Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
DrawFocusRect
Funkce DrawFocusRect umožňuje vybrat pravoúhlou oblast tahem myši. 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. Pro názornost je uveden příklad. Použití může vypadat třeba takto: (picturel musí mít ScaíeMode nastaveno na Pixel)
Deklarace:
Pnvate x1 As Long Private x2 As Long Private y1 As Long Private y2 As Long
Sub Picturel_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
xl = X
yl = Y
End If
End Sub
Sub Picturel_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim obdélník As RECT
If Button = vbLeftButton Then 'Smazáni starého obdélníku
If (Y2 <> 0 Or X2 <> 0) Then
DrawFocusRect Picturel.hdc, obdeinik
X2 = X: Y2 = Y
With obdeinik
.Left = xl
.Right = X2
.Top = yl
.Bottom = Y2
End With
DrawFocusRect Picturel.hdc, obdelnik
End If
End Sub
Module
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Declare Function DrawFocusRect Lib "user32" (ByVal hdc As Long, ipRect As RECT) As Long
SetPixel
Funkce SetPixel umožňuje nastavit barvu pro jednotlivý pixel na souřadnicích vztahujících se k zadanému objektu (HDC).
Deklarace:
Form
r = SetPixel ( Form1.hdc, 30, 50, &HFF00FF )
Module
Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Loog, ByVal V As Long, ByVal crColor As Long) As Long
Polygon
Funkce Poligon vytvoří mnohoůhelník na definovaných souřadnicích vztahujících se k zadanému objektu (HDC). Zde je nutno definovat proměnou typu pole s pevno délkou. Barva obdelníku bude převzata z nastaveni ForeCoior objektu ke kterému náleží, pokud není nastavena přímo.
Deklarace:
Form
Dim vrchol (1 To 3) As POINTAPI
vrchol(l).x=10
vrchol(l).y=10 vrchol(2).x = 500 vrchol(2).y=100 vrchol(3).x = 200 vrchol(3).y = 200
Form1.ForeColor = RGB(255, 0, 0) ' Červená x = Polygon (Form1.hdc, vrchol (1), 3)
Module
Public Type POINTAPI
x As Long
y As Long End Type
Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As PO1NTAPI, ByVal nCount As Long) As Long
Polyline
Funkce Polyline vytvoří řetězec na sebe navazujících čar na definovaných souřadnicích vztahujících se k zadanému objektu (HDC). Zde je nutno definovat proměnou typu pole s pevno délkou, přičemž první hodnoty X Y nastavují výchozí (startovací) pozici pro následné vykresleni grafiky. Barva obdelníku bude převzata z nastaveni ForeColor objektu ke kterému náleží, pokud není nastavena přímo.
Deklarace:
Form
Dim vrchol (1 To 4) As POINTAPI
vrchhol(l).x = 10
vrchol(l).y= 10
vrchol(2).x = 500
vrchol(2).y= 100
vrcho1{3).x = 200
vrchol(3).y = 200
vrchol(4).x = 300
vrchol(4).y = 400
Form1.ForeColor = RGB (255, 0, 0) 'červená x = Polyline (Form1.hdc, vrchol (1), 4)
Module
Public Type POINTAPI
x As Long
y As Long End Type
Public Declare Function Polyline Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, BylVal nCount As Long) As Long
PolylineTo
Funkce PolylineTo je obdoba funkce Polyline s tím rozdílem, že již prvni hodnoty X Y obsahují koncové body čary neboť pozice startu čáry se vztahuje k nastavení MoveToEx. Barva čáry bude převzata z nastaveni ForeColor objektu ke kterému náleží, pokud není nastavena přímo Deklarace Form je totožná s funkcí Polyline.
Module
Public Type POINTAPI
x As Long
y As Long End Type
Public Declare Function PolylineTo Lib "gdi32" (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long) As Long
InvertRect
Funkce InvertRecl 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. Resp. vytvoří negativ v definované oblasti. Použit lze rovněř na obrázky.Nutno definovat pravoůhlou oblast na které se změna provede a objekt ke kterému se oblast vztahuje {HDC).
Deklarace:
Form
Dim rc As RECT
rc.Top = 50
rc.Left = 50
rc.Bottom= 100
rc.Right = 200
x = InvertRect(Forml.hdc, re)
Module
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long End Type
Declare Function InvertRect Lib "user32" (ByVal hdc As Long, IpRect As RECT) As Long
MoveToEx and LineTo
Funkce MoveToEx nastavuje výchozí bod zvoleného objektu (HDC) pro výstup všech gafíckých API metod. Tzn. Mění standartně nastavený levý horní roh na nové souřadnice. Funkce LineTo vytvoří čáru na definovaných souřadnicích vztahujících se k zadanému objektu. Pozice startu čary se vztahuje k nastavení MoveToEx. Barva čáry bude převzata z nastaveni ForeColor objektu ke kterému náleží, pokud není nastavena přímo.
Deklarace:
Form
Dim old As POINTAPI
Form1.ForeColor = RGB(255, 0, 0) ' červená
x = MoveToEx (Form1.hdc, 0, 40, old) ' nastavení bodu startu čáry
x = LineTo (Forml.hdc, 100, 50) ' nastavení konce čáry
Module
Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Type POINTAPI
x As Long
y As Long
End Type
Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Ellipse
Funkce Ellipse vytvoří elipsu na definovaných souřadnicích vztahujících se k zadanému objektu (HDC). Barva elipsy bude převzata z nastaveni ForeColor objektu ke kterému náleží, pokud není nastavena přímo.
Hodnoty jsou zadány v pořadí:
1. Objekt k němuž se vztahuji souřadnice elipsy
2. Souřadnice opěrného bodu X1
3. Souřadnice opěrného bodu Y1
4. Souřadnice opěrného bodu X2
5. Souřadnice opěrného bodu Y2
Deklarace:
Form
Form1.ForeColor = RGB(255, 0, 0) ' červená x = EIIipse(Forml.hdc, 25, 25, 100, 75)
Module
Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Yl As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
INI soubory
GetPrivateProfileString
Funce GetPrivateProfileString vrací String hledaného klíče ve zvoleném INI souboru. Pokud záznam není nalezen vrací nastavenou Default hodnotu (v našem přikladu "(error)" ). Předem je nutno definovat délku vráceného záznamu.
Deklarace:
Form
Dim Data as String * 255
rc = GetPrivateProfileString("Desktop", "Wallpaper", "(error)" ,Data ,Len(Data), "c:\sys.ini") If rc = "(error)" Then
Debug.Print "Záznam nenalezen." Else
Debug.Pnnt rc End If
Module
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA"(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
GetProfileString
Totožná fiinkce s funkcí GetPrivateProfileString s tím rozdílem čte pouze ze souboru WIN.INI
Deklarace:
Form
Dim Data as String * 255
rc = GetPrivateProfileStnng ("Desktop", "Wallpaper", "(error)" ,Data ,Len(Data)) If rc = "(error)" Then
Debug.Print "Záznam nenalezen." Else
Debug.Print rc End If
Module
Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String,ByVal lpReturnedString As String, ByVal nSize As Long) As Long
GetPrivateProfileInt
Funce GetPrivateProfileInt vrací Integer hledaného klíče ve zvoleném INI souboru.Pokud záznam není nalezen vrací nastavenou Default hodnotu (v našem přikladu -1), pokud záznam je nalezen, aleje typu Variant funkce vrací Integer dokud nenarazí na String.V případě že záznam neobsahuje Integer na první pozici vrací 0.
Př: Nebo:
Záznam = 1234ABCD5678 Záznam = ABCD
Vrací = 1234 Vraci = 0
Deklarace:
Form
ret= GetPrivateProfilelnt ("keyboard", "type", -1, "c:\sys.ini")
If ret =-1 Then
Debug.Print "Záznam nenalezen"
Else
Debug.Print ret End If
Module
Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA"(ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long,ByVal lpFileName As String) As Long
GetProfileInt
Totožná funkce s funkcí GetPrivateProfilelnt s tim rozdílem rte pouze ze souboru WIN.INI .
Deklarace:
Form
ret = GetProfilelnt ("Desktop", "WallpaperStyle", -1) If ret = -1 Then
Debug.Print" Záznam nenalezen."
Else
Debug.Print ret
End If
Module
Declare Function GetProfileInt Lib "kernel32" Alias "GetProfileIntA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal nDefault As Long) As Long
WritePrivateProfileString
Funce WritePrivateProfíleString zapisuje/přepisuje String zadaného klíče ve zvoleném INI souboru.Pokud záznam nebo soubor nexistuje bude automaticky vytvořen. Pokud nastane chyba funkce vrací 0.
Deklarace:
Form
rc = WritePrivateProfileString ("Options", "StatusBar", "I", "c:\sys.ini")
Module
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
WriteProfileString
Totožná funkce s funkcí WritePrivateProfileString s tím rozdílem zapisuje pouze do souboai W1N.INI Pokud nastane chyba funkce vrací 0.
Deklarace:
Form
rc = WriteProfileString ("Desktop", "Wallpaper", "C:\Windows\CIouds.bmp")
Module
Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA"(ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long