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 POINTAPI

X 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

Tidigare Artikel Nästa Artikel

Bästa Tipsen