Access

  MS Access 2010+  |  Aplication Programming Interface API  |   VBA 7.0

• WinAPI - Interfejs urządzenia graficznego (GDI)

• Wybór obiektu kontekstu urządzenia (DC) i jego usunięcie

Kontekst urządzenia przechowuje i zapamiętuje aktualne ustawienia dla bieżących atrybutów graficznych kontekstu, takich jak kolor rysowania, grubość linii, jej styl, rodzaj czcionki i wiele innych atrybutów. Gdy wybierzemy konkretny kontekst urządzenia, możemy bezpośrednio korzystać z jego aktualnych atrybutów, bądź za pomocą funkcji graficznych GDI zmienić te ustawienia.

Gdy zakończymy operacje graficzne i wybrany kontekst urządzenia (DC) jest już nam niepotrzebny powinniśmy go usunąć z zasobów systemowych za pomocą funkcji DeleteObject(...)

• Wybór obiektu kontekstu urządzenia (DC).

Jeżeli chcemy wykonywać operacje na obiekcie w kontekście urządzenia (DC) musimy uaktywnić dany obiekt za pomocą funkcji SelectObject(...), która:

Opis funkcji SelectObject (...)

wybiera obiekt w określonym kontekście urządzenia, zwracając uchwyt aktywnego obiektu tego samego typu, który przestaje być wyróżnionym obiektem kontekstu urządzenia. Nowy obiekt zastępuje poprzedni obiekt tego samego typu.

Public Declare Function SelectObject _
               Lib "gdi32" Alias "SelectObject" ( _
               ByVal hdc As Long, _
               ByVal hObject As Long) As Long
  • argumenty:
    • hdc
    • Uchwyt kontekstu urządzenia
    • hObject
    • uchwyt obiektu, który ma zostać wybrany w kontekście urządzenia. Wybierany obiekt musi być utworzony za pomocą jednej z następujących funkcji GDI
      • bitmapa - CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, CreateDIBitmap, CreateDIBSection, (bitmapa może być wybrana w pamięciowym kontekście urządzenia tylko raz i tylko w jednym kontekście urządzenia)
      • pędzel - CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush
      • font - CreateFont, CreateFontIndirect
      • pióro - CreatePen, CreatePenIndirect
      • region - CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect
  • zwraca:
  • Jeśli wybrany obiekt nie jest regionem, funkcja przy powodzeniu zwraca uchwyt zastępowanego obiektu (poprzednio aktywnego). Jeśli wybrany obiekt jest regionem, funkcja przy powodzeniu zwraca jedną z następujących wartości:
    • NULLREGION = 1 - region jest pusty
    • SIMPLEREGION = 2 - region składa się z jednego prostokąta
    • COMPLEXREGION = 3 -region zawiera więcej niż jeden prostokąt
    • ERRORAPI = 0 - wystąpił błąd

    Przy błędzie, (bez względu, czy wybierany obiekt jest regionem, czy innym obiektem), funkcja zwraca ZERO.

Kilka uwag o stosowaniu funkcji SelectObject(...).

  • Funkcja SelectObject(...) zwraca poprzednio wybrany obiekt określonego typu. Po zakończeniu operacji graficznych powinniśmy zastąpić wybrany przez nas obiekt obiekt oryginalnym, którego uchwyt został zwrócony
  • Nie może równocześnie wybrać bitmapy do więcej niż jednego kontekstu urządzenie DC.

• Usuwanie obiektu z kontekstu urządzenia (DC).

Po zakończeniu wykonywania operacji graficznych na roboczym obiekcie w pamięciowym kontekście urządzenia, musimy usunąć obiekt za pomocą funkcji DeleteObject(...), która:

Opis funkcji DeleteObject (...)

Usuwa obiekt (logiczne pióro, pędzel, czcionkę, bitmapę, region lub paletę), zwalniając wszystkie zasoby systemowe związane z usuwanym obiektem. Po usunięciu obiektu, wartość uchwytu usuwanego obiektu jest już nieaktualna.

Public Declare Function DeleteObject _
               Lib "gdi32" Alias "DeleteObject" ( _
               ByVal hObject As Long) As Long
  • argumenty:
    • hObject
    • Uchwyt usuwanego obiektu (pióra, pędzla, czcionki, bitmapy, regionu lub palety kolorów)
  • zwraca:
  • Przy powodzeniu funkcja zwraca wartość różną od ZERA, przy niepowodzeniu zwraca ZERO.

Kilka uwag o stosowaniu funkcji DeleteObject(...).

  • Jeżeli przekazany do funkcji uchwyt hObject jest nieprawidłowy, lub obiekt jest aktualnie używany w kontekście urządzenia, funkcja kończy się niepowodzeniem i zwraca ZERO
  • Nie można usunąć graficznego obiektu (pióra lub pędzla) z kontekstu urządzenia, jeżeli jest on aktualnie wybrane w kontekście urządzenia.
  • Jeżeli usuwany jest pędzel deseniowy utworzony za pomocą funkcji CreatePatternBrush(...), to skojarzona z nim bitmapa, nie zostanie usunięta. Bitmapa musi zostać usunięta niezależnie.