VBA: поиск Hdc в листе Excel или пользовательской форме

Вот два небольших примера того, как найти Hdc в рабочем листе:

  • При нажатии на Sheet1 отображается пользовательская форма.
  • Поместите указатель на UF, удерживайте левую кнопку мыши и перетащите мышь.
  • При закрытии UF саб продолжается и нарисует дугу на листе.

Начиная

  • Новая рабочая тетрадь
  • Добавить имя пользовательской формы = UserForm1

Вставьте следующий код в sheet1:

 Private Объявление функции Arc Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long,

ByVal X3 как долго, ByVal Y3 как долго, ByVal X4 как долго, ByVal Y4 как долго) как долго

Закрытое Объявление функции ArcTo Lib "gdi32" (ByVal hdc As Long, ByVal X1 Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long,

ByVal X3 как долго, ByVal Y3 как долго, ByVal X4 как долго, ByVal Y4 как долго) как долго

Private Sub Worksheet_SelectionChange (цель ByVal в качестве диапазона)

Dim B As Long

'активировать UC и рисовать на нем (найти свой HDC)

UserForm1.Show

«Поиск вашего HDC в Excel»

monhdc = 0

Делай пока myhdc = 0

myhdc = GetForegroundWindow ()

B = myhdc

myhdc = GetDC (myhdc)

петля

«Нарисуйте прямо на рабочем листе

B = дуга (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)

End Sub

В модуле userform

Вставьте следующий код:

 Частный тип POINTAPI

X как долго

Y как долго

Тип конца

Закрытое Объявление функции DeleteObject Lib "gdi32" (ByVal hObject As Long) Как долго

Закрытое Объявление функции SelectObject Lib "gdi32" (ByVal hDc As Long, ByVal hObject As Long) Как долго

Закрытое Объявление функции GetForegroundWindow Lib "user32" () As Long

Закрытое Объявление функции CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) Как долго

Закрытое Объявление функции LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) Как Long

Закрытое Объявление функции MoveToEx Lib "gdi32" (ByVal hdc As Long, _

ByVal X As Long, ByVal Y As Long, lpPoint As Any) As Long

Закрытая функция объявления GetDC Lib "user32" (ByVal hwnd As Long) As Long

Закрытое Объявление функции SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) как байт

Частный monhdc As Long

Dim Buff As Boolean

Private Sub UserForm_MouseDown (кнопка ByVal как целое число, смещение ByVal как целое число, ByVal X как единое целое, ByVal Y как единое целое)

Buff = True

End Sub

Private Sub UserForm_MouseMove (кнопка ByVal как целое число, смещение ByVal как целое число, ByVal X как единое целое, ByVal Y как единое целое)

Делай пока myhdc = 0

myhdc = GetForegroundWindow ()

myhdc = GetDC (monhdc)

петля

Если кнопка 1, то выход из Sub

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

DeleteObject SelectObject (myhdc, hRPen)

Если бафф то

MoveToEx myhdc, X * 1, 32, Y * 1, 32, & H0

Buff = False

End If

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

DoEvents

End Sub

Предыдущая статья Следующая статья

Лучшие советы