API - funkcje graficzne
Mam dla Was bardzo przydatne funkcje graficzne. Są one o tyle istotne, że nie mają
odpowiedników w wewnętrznej składni Visual Basic lub działają od nich znacznie
szybciej. Metody graficzne są zbyt powolne w bardziej zaawansowanych programach i nie
obsługują większości dostarczanych przez API efektów. Od razu wyjaśniam, że nie
będzie tu nic o funkcjach zawartych w bibliotekach pakietu DirectX. Będą to tylko API
zmieniające grafikę w typowych formularzach, bez inicjacji środowiska Direct Draw i
Direct3D.
SetPixel
Odpowiednik w składni VB: metoda PSet
Ta funkcja umożliwia zmianę koloru dowolnego punktu w formie. Oto kod w module
standardowym:
Public Declare Function SetPixel Lib "gdi32" (ByVal
hdc As Long, _
ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
Public Function SetCurrentColor(hdc As Long, X As Single, Y As Single, color As Long) As
String
Dim a As Long
a = SetPixel(hdc, WspółrzędnaX, WspółrzędnaY, kolor)
SetCurrentColor = a
End Function
Kolor wpisujemy w kodzie heksadecymalnym. Położenie w osi X i Y wpisujemy w twipach. A
oto kod formy:
Private Sub Form_MouseUp(Button As Integer, Shift As Integer,
X As Single, Y As Single)
Call SetCurrentColor(Me.hdc, X, Y, 1234554)
End Sub
I to wszystko! Wartość współrzędnych X i Y możemy podać albo w module, albo w
formie. Nie zauważyłem różnicy.
StretchBlt
Odowiednik w składni VB: brak!
Jest to ciekawa funkcja. Umożliwia powiększanie, zmniejszanie i kopiowanie grafiki.
Podam tutaj przykład z płynnym powiększaniem obrazu (z VB4All). Oto kod (w formie - nie
trzeba pisać w module!):
Private 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
Private Declare Function SetStretchBltMode Lib "gdi32" (ByVal hdc As Long, _
ByVal nStretchMode As Long) As Long
Const SRCCOPY = &HCC0020
Const STRETCH_ANDSCANS = 1
Const STRETCH_DELETESCANS = 3
Const STRETCH_HALFTONE = 4
Const STRETCH_ORSCANS = 2
To wpisujemy w sekcji General. Teraz tworzymy przycisk i dwa pola obrazu:
picPicture1 i picPicture2. Piszemy (w kodzie przycisku):
Dim X As Long
Dim i As Integer
Dim H1 As Integer, W1 As Integer
Dim hdc1 As Long, hdc2 As Long
W1 = picPicture1.ScaleWidth
H1 = picPicture1.ScaleHeight
hdc1 = picPicture1.hdc
hdc2 = picPicture2.hdc
X = SetStretchBltMode(picPicture2.hdc, STRETCH_DELETESCANS)
If X Then
For i = 0 To 100
X = StretchBlt(hdc2, 0, 0, W1 + i, H1 + i,
hdc1, 0, 0, W1, H1, SRCCOPY)
picPicture2.Refresh
DoEvents
Next
End If
To dwie i najpopularniejsze funkcje API. Mogą się bardzo przydać przy pisaniu
programów graficznych.
M.P.
zanotowane.pldoc.pisz.plpdf.pisz.plteen-mushing.xlx.pl