VBA: Намиране на Hdc в Excel лист или UserForm
![](http://img.brin-designs.com/img/games/794/vba-finding-hdc-an-excel-worksheet.png)
Ето два малки примера как да намерите Hdc в работен лист:
- Чрез щракване върху Sheet1 се показва UserForm.
- Поставете показалеца на UF, задръжте левия бутон на мишката и плъзнете мишката.
- Чрез затваряне на UF подложката продължава и се изчертава дъга върху листа.
Приготвяме се да започнем
- Нова работна книга
- Добавете потребителско име = UserForm1
Поставете следния код в лист1:
Частна декларираща функция Arc Lib "gdi32" (ByVal hdc Дълъг, ByVal X1 дълъг, ByVal Y1 дълъг, ByVal X2 дълъг, ByVal Y2 дълъг,ByVal X3 дълъг, ByVal Y3 дълъг, ByVal X4 дълъг, ByVal Y4 дълъг)
Частна декларираща функция ArcTo Lib "gdi32" (ByVal hdc Дълъг, ByVal X1 дълъг, ByVal Y1 дълъг, ByVal X2 дълъг, ByVal Y2 дълъг,
ByVal X3 дълъг, ByVal Y3 дълъг, ByVal X4 дълъг, ByVal Y4 дълъг)
Частна подложка_Промяна на избора
Дим Б толкова дълъг
"активирайте UC и изтеглете върху него (намиране на вашия HDC)
UserForm1.Show
'Намиране на вашия HDC в работния лист на Excel
monhdc = 0
Да, докато myhdc = 0
myhdc = GetForegroundWindow ()
B = myhdc
myhdc = GetDC (myhdc)
контур
„Начертайте директно на работния лист
В = дъга (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)
Край Под
В модула userform
Поставете следния код:
Частен тип POINTAPIX толкова дълго
Y толкова дълго
Тип край
Частна декларираща функция DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Частна декларираща функция SelectObject Lib "gdi32" (ByVal hdc Дълъг, ByVal hObject толкова дълъг)
Частна декларираща функция GetForegroundWindow Lib "user32" () As Long
Функция за лично деклариране CreatePen Lib "gdi32" (ByVal nPenStyle Long, ByVal nWidth Long, ByVal crColor Long)
Частна декларираща функция LineTo Lib "gdi32" (ByVal hdc Дълъг, ByVal X толкова дълъг, ByVal Y толкова дълъг)
Частна декларираща функция MoveToEx Lib "gdi32" (ByVal hdc Long, _
ByVal X толкова дълъг, ByVal Y толкова дълъг, lpPoint As Any) По-дълго
Частна декларираща функция GetDC Lib "user32" (ByVal hwnd As Long) As Long
Частна декларираща функция SetPixelV Lib "gdi32" (ByVal hdc Дълъг, ByVal X толкова дълъг, ByVal Y толкова дълъг, ByVal crColor Long) Като байт
Частен монсхел, колкото дълго
Dim Buff Като булева
Частно подчинено потребителско име_Форма_на_маса (ByVal бутон като цяло число, смяна на ByVal като цяло число, ByVal X като единично, ByVal Y като единично)
Buff = Вярно
Край Под
Частно подчинено потребителско имеForm_MouseMove (ByVal бутон като цяло число, ByVal Shift As Integer, ByVal X като единично, ByVal Y като единично)
Да, докато myhdc = 0
myhdc = GetForegroundWindow ()
myhdc = GetDC (monhdc)
контур
Ако бутон 1 тогава излезте от под
hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))
Изтриване на обект SelectObject (myhdc, hRPen)
Ако тогава Бъф
MoveToEx myhdc, X * 1.32, Y * 1.32, & H0
Buff = False
Край Ако
LineTo myhdc, X * 1.32, Y * 1.32
DoEvents
Край Под