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 POINTAPI

X 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

Prethodni Članak Sljedeći Članak

Top Savjeta