VBA: Pronalaženje Hdc u Excelovom radnom listu ili UserFormu

Evo dva mala primjera kako pronaći Hdc u radnom listu:
- Klikom na Sheet1 prikazuje se UserForm.
- Postavite pokazivač na UF, držite lijevu tipku miša i povucite miša.
- Zatvaranjem UF podloge nastavlja se i povlači luk na listu.
Početak
- Nova radna knjiga
- Dodajte naziv korisničke forme = Korisnička forma1
Zalijepite sljedeći kod u listu1:
Privatna izjava Funkcija Arc Lib "gdi32" (ByVal hdc kao dugačak, ByVal X1 kao dugačak, ByVal Y1 kao dugačak, ByVal X2 dugačak, ByVal Y2 dugačak,ByVal X3 Long, ByVal Y3 Long, ByVal X4 Long, ByVal Y4 Long (Long)
Privatna izjava Funkcija ArcTo Lib "gdi32" (ByVal hdc Long, ByVal X1 Long, ByVal Y1 Long, ByVal X2 Long, ByVal Y2 Long,
ByVal X3 Long, ByVal Y3 Long, ByVal X4 Long, ByVal Y4 Long (Long)
Privatni podradni list_Promjena odabira (ByVal Target as Range)
Dim B jednako dugo
'aktivirajte UC i crtajte na njemu (pronalaženje HDC-a)
UserForm1.Show
'Pronalaženje HDC-a u Excelovom radnom listu
monhdc = 0
Učinite dok myhdc = 0
myhdc = GetForegroundWindow ()
B = myhdc
myhdc = GetDC (myhdc)
Petlja
'Nacrtajte izravno na radnom listu
B = luk (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)
Kraj pod
U modulu userform
Zalijepite sljedeći kôd:
Privatna vrsta POINTAPIX jednako dugo
Tako dugo
Vrsta kraja
Funkcija privatnog deklariranja DeleteObject Lib "gdi32" (ByVal hObject As Long)
Privatna izjava Funkcija SelectObject Lib "gdi32" (ByVal hdc Long, ByVal hObject Long)
Privatna izjava Funkcija GetForegroundWindow Lib "user32" () Kao dugo
Privatna izjava Funkcija CreatePen Lib "gdi32" (ByVal nPenStyle Long, ByVal nWidth Long, ByVal crColor Long)
Privatna izjava Funkcija LineTo Lib "gdi32" (ByVal hdc kao dugo, ByVal X jednako dugo, ByVal Y jednako dugo)
Privatna izjava Funkcija MoveToEx Lib "gdi32" (ByVal hdc Long, _
ByVal X Kao dugo, ByVal Y kao dugo, lpPoint kao bilo koji) Kao dugo
Funkcija privatnog deklariranja GetDC Lib "user32" (ByVal hwnd As Long)
Privatna izjava Funkcija SetPixelV Lib "gdi32" (ByVal hdc kao dugačak, ByVal X jednako dugačak, ByVal Y jednako dugačak, ByVal crColor jednako dugačak) kao bajt
Privatni monahdćak kao dugo
Dim Buff Kao logički
Privatni pod korisnikaForm_MouseDown (ByVal gumb kao cijeli broj, ByVal pomak kao cijeli broj, ByVal X kao pojedinačni, ByVal Y kao pojedinačni)
Buff = Točno
Kraj pod
Privatni pod korisnikaForm_MouseMove (ByVal gumb kao cijeli broj, ByVal pomak kao cijeli broj, ByVal X kao pojedinačni, ByVal Y kao pojedinačni)
Učinite dok myhdc = 0
myhdc = GetForegroundWindow ()
myhdc = GetDC (monhdc)
Petlja
Ako tipka 1 tada izađete iz pod
hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))
Izbriši objekt SelectObject (myhdc, hRPen)
Ako onda Buff
MoveToEx myhdc, X * 1, 32, Y * 1, 32, & H0
Buff = Netočno
Završi ako
LineTo myhdc, X * 1, 32, Y * 1, 32
DoEvents
Kraj pod