VBA: Găsirea Hdc într-o foaie de lucru Excel sau UserForm

Iată câteva exemple mici despre cum să găsiți Hdc într-o foaie de lucru:

  • Făcând clic pe Sheet1, UserForm este afișat.
  • Puneți indicatorul pe UF, țineți apăsat butonul stâng al mouse-ului și trageți mouse-ul.
  • Prin închiderea sub-UF continuă și trage un arc pe foaie.

Noțiuni de bază

  • Un nou registru de lucru
  • Adăugați un nume UserForm = UserForm1

Inserați următorul cod în foaia1:

 Funcția privată declară Arc Lib "gdi32" (ByVal hdc ca lung, ByVal X1 ca lung, ByVal Y1 ca lung, ByVal X2 atât de lung, ByVal Y2 ca lung,

ByVal X3 la fel de lung, ByVal Y3 la fel de lung, ByVal X4 la fel de lung, ByVal Y4 ca lung)

Funcția de declanșare privată ArcTo Lib "gdi32" (ByVal hdc la fel de lungă, ByVal X1 ca lungă, ByVal Y1 ca lungă, ByVal X2 ca lungă, ByVal Y2 ca lungă,

ByVal X3 la fel de lung, ByVal Y3 la fel de lung, ByVal X4 la fel de lung, ByVal Y4 ca lung)

Sub-Fișa de Lucru Sub-Selecție_Selecție (ByVal Target As Range)

Dim B cât timp

'activați un UC și trageți pe el (găsirea HDC-ului)

UserForm1.Show

'Găsirea fișierului dvs. HDC în foaia de lucru Excel

monhdc = 0

În timp ce myhdc = 0

myhdc = GetForegroundWindow ()

B = myhdc

myhdc = GetDC (myhdc)

Buclă

"Desenați direct pe foaia de lucru

B = arc (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)

End Sub

În modulul de utilizare

Inserați următorul cod:

 Tip privat POINTAPI

X Atâta timp

Cât de lung

Tip final

Funcția privată declară DeleteObject Lib "gdi32" (ByVal hObject As Long) cât timp

Funcția declare privată SelectObject Lib "gdi32" (ByVal hdc la fel de lungă, ByVal hObject la fel de lung)

Funcția privată Declare GetForegroundWindow Lib "user32" () Atâta timp

Funcția de declare privată CreatePen Lib "gdi32" (ByVal nPenStyle ca lung, ByVal nWidth ca lung, ByVal crColor ca lung)

Private Declare funcția LineTo Lib "gdi32" (ByVal hdc ca lung, ByVal X ca lung, ByVal Y ca lung), cât mai mult

Funcția de declare privată MoveToEx Lib "gdi32" (ByVal hdc As Long, _

ByVal X As Long, ByVal Y As Long, lpPoint ca oricare) Atât de lung

Funcția de declare privată GetDC Lib "user32" (ByVal hwnd As Long) cât timp

Funcția de declare privată SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor la fel de lung) Ca Byte

Private monhdc As Long

Dim Buff Ca Boolean

Private Sub UserForm_MouseDown (butonul ByVal ca întreg, ByVal Shift ca întreg, ByVal X ca singur, ByVal Y ca single)

Buff = Adevărat

End Sub

Private Sub UserForm_MouseMove (butonul ByVal ca Integer, ByVal Shift ca Integer, ByVal X ca Unic, ByVal Y Ca Singur)

În timp ce myhdc = 0

myhdc = GetForegroundWindow ()

myhdc = GetDC (monhdc)

Buclă

Dacă Butonul 1 Apoi Exit Sub

hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))

DeleteObject SelectObject (myhdc, hRPen)

Dacă Buff apoi

MoveToEx myhdc, X * 1, 32, Y * 1, 32 și H0

Buff = Fals

Terminați Dacă

LineTo myhdc, X * 1, 32, Y * 1, 32

DoEvents

End Sub

Articolul Precedent Articolul Următor

Cele Mai Importante Sfaturi