VBA: Hitta Hdc i ett Excel-kalkylblad eller UserForm
Här är två små exempel på hur man hittar Hdc i ett kalkylblad:
- Genom att klicka på Sheet1 visas UserForm.
- Sätt pekaren på UF, håll ner vänster musknapp och dra musen.
- Genom att stänga UF-delen fortsätter och ritar en båge på arket.
Komma igång
- En ny arbetsbok
- Lägg till ett UserForm-namn = UserForm1
Klistra in följande kod i blad 1:
Private Declaration Funktion Arc Lib "gdi32" (ByVal hdc Så länge, ByVal X1 Så länge, ByVal Y1 Så länge, ByVal X2 Så länge, ByVal Y2 Så länge,ByVal X3 så länge, ByVal Y3 så länge, ByVal X4 så länge, ByVal Y4 så länge) Så länge
Private Declaration Funktion ArcTo Lib "gdi32" (ByVal hdc Så länge, ByVal X1 Så länge, ByVal Y1 Så länge, ByVal X2 Så länge, ByVal Y2 Så länge,
ByVal X3 så länge, ByVal Y3 så länge, ByVal X4 så länge, ByVal Y4 så länge) Så länge
Privat Del Arbetsblad_SelectionChange (ByVal Target As Range)
Dim B så länge
'aktivera en UC och dra på den (hitta din HDC)
UserForm1.Show
"Hitta din HDC i Excel-kalkylblad
monhdc = 0
Gör medan myhdc = 0
myhdc = GetForegroundWindow ()
B = myhdc
myhdc = GetDC (myhdc)
Slinga
'Rita direkt på arbetsbladet
B = Arc (mydc, 120, 500, 320, 400, 320, 400, 780, 500)
Slutdel
I användarformulärsmodulen
Klistra in följande kod:
Privat typ POINTAPIX så länge
Y så länge
Sluttyp
Privat förklara funktion DeleteObject Lib "gdi32" (ByVal hObject så länge) så länge
Privat förklara funktion VäljObject Lib "gdi32" (ByVal hdc så länge, ByVal hObject så länge) Så länge
Privat förklara funktion GetForegroundWindow Lib "user32" () Så länge
Privat förklara funktion CreatePen Lib "gdi32" (ByVal nPenStyle så länge, ByVal nWidth så länge, ByVal crColor så länge) Så länge
Privat förklara funktionen LineTo Lib "gdi32" (ByVal hdc så länge, ByVal X så länge, ByVal Y så länge) Så länge
Privat förklara funktion MoveToEx Lib "gdi32" (ByVal hdc så länge, _
ByVal X så länge, ByVal Y så länge, lpPoint som någon) så länge
Privat Declaration Funktion GetDC Lib "user32" (ByVal hwnd as Long) As Long
Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc så länge, ByVal X så länge, ByVal Y så länge, ByVal crColor så länge) As Byte
Privat monhdc så länge
Dim buff som booleska
Privat Sub UserForm_MouseDown (ByVal-knapp som heltal, ByVal Shift som heltal, ByVal X som singel, ByVal Y som singel)
Buff = True
Slutdel
Privat Sub UserForm_MouseMove (ByVal-knapp som heltal, ByVal Shift som heltal, ByVal X som singel, ByVal Y som singel)
Gör medan myhdc = 0
myhdc = GetForegroundWindow ()
myhdc = GetDC (monhdc)
Slinga
Om Knapp 1 Avsluta sedan
hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))
DeleteObject SelectObject (myhdc, hRPen)
Om buff då
MoveToEx myhdc, X * 1.32, Y * 1.32, & H0
Buff = False
Avsluta om
LineTo myhdc, X * 1.32, Y * 1.32
DoEvents
Slutdel