VBA: Hdc vinden in een Excel-werkblad of in UserForm

Hier zijn twee kleine voorbeelden om Hdc in een werkblad te vinden:

  • Door op Sheet1 te klikken, wordt het UserForm weergegeven.
  • Plaats de aanwijzer op UF, houd de linkermuisknop ingedrukt en sleep met de muis.
  • Door het sluiten van de UF-sub gaat u verder en tekent u een boog op het vel.

Ermee beginnen

  • Een nieuwe werkmap
  • Voeg een UserForm-naam toe = UserForm1

Plak de volgende code in blad1:

 Private Declare Functie Arc Lib "gdi32" (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, ByVal X4 As Long, ByVal Y4 As Long) As Long

Privé Declareren Functie ArcTo Lib "gdi32" (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, ByVal X4 As Long, ByVal Y4 As Long) As Long

Particulier subwerkblad_selectie wijzigen (ByVal-doel als bereik)

Dim B As Long

'activeer een UC en teken erop (vind je HDC)

UserForm1.Show

'Uw HDC vinden in Excel-werkblad

monhdc = 0

Do While myhdc = 0

myhdc = GetForegroundWindow ()

B = myhdc

myhdc = GetDC (myhdc)

Lus

'Teken direct op werkblad

B = Arc (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)

End Sub

In de userform-module

Plak de volgende code:

 Private Type POINTAPI

X zo lang

Y zo lang

Einde Type

Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long

Private Declare-functie GetForegroundWindow Lib "user32" () As Long

Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long

Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, _

ByVal X As Long, ByVal Y As Long, lpPoint As Any) As Long

Private Declare-functie GetDC Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) Als Byte

Privé monhdc As Long

Dim Buff Als Boolean

Private Sub UserForm_MouseDown (ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Buff = True

End Sub

Private Sub UserForm_MouseMove (ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Do While myhdc = 0

myhdc = GetForegroundWindow ()

myhdc = GetDC (monhdc)

Lus

Als knop 1 en vervolgens Sub afsluiten

hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))

DeleteObject SelectObject (myhdc, hRPen)

Als Buff dan

MoveToEx myhdc, X * 1.32, Y * 1.32, & H0

Buff = False

Stop als

LineTo myhdc, X * 1.32, Y * 1.32

DoEvents

End Sub

Vorige Artikel Volgende Artikel

Top Tips