ART11









VBMagazine






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.




Wyszukiwarka

Podobne podstrony:
ART11 (4)
art11
art11 budowa domu na skarpie
art11
ART11 (3)
art11
art11
art11
ART11 (7)

więcej podobnych podstron