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 POINTAPIX 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