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 POINTAPIX 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