VBA: Encontrar o Hdc em uma planilha do Excel ou UserForm
Aqui estão dois pequenos exemplos de como encontrar o Hdc em uma planilha:
- Ao clicar na Folha1, o formulário de usuário é exibido.
- Coloque o ponteiro no UF, mantenha o botão esquerdo do mouse pressionado e arraste o mouse.
- Ao fechar o sub UF continua e desenha um arco na folha.
Começando
- Uma nova pasta de trabalho
- Adicionar um nome de formulário de usuário = UserForm1
Cole o seguinte código na planilha1:
Função de declaração privada Arc Lib "gdi32" (ByVal hdc como longa, porVal X1 como longa, porVal Y1 como longa, porVal X2 como longa, porVal Y2 como longa,ByVal X3 como por muito tempo, por Y3 como por muito tempo, PorVal X4 por muito tempo, por Y4 como por muito tempo) por muito tempo
Função de declaração privada ArcTo Lib "gdi32" (ByVal hdc Quanto tempo, ByVal X1 como longo, ByVal Y1 como longo, ByVal X2 como longo, ByVal Y2 como longo,
ByVal X3 como por muito tempo, por Y3 como por muito tempo, PorVal X4 por muito tempo, por Y4 como por muito tempo) por muito tempo
Private Sub Worksheet_SelectionChange (ByVal Alvo como intervalo)
Dim B Quanto Tempo
'ativar uma UC e desenhar nela (encontrar o seu HDC)
UserForm1.Show
'Encontrando seu HDC na planilha do Excel
monhdc = 0
Do while myhdc = 0
myhdc = GetForegroundWindow ()
B = myhdc
myhdc = GetDC (myhdc)
Loop
'Desenhar diretamente na Planilha
B = Arc (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)
End Sub
No módulo userform
Cole o seguinte código:
Privado Tipo POINTAPIX como longo
Y as long
Tipo final
Função de declaração privada DeleteObject Lib "gdi32" (ByVal hObject As Long) como Long
Função de declaração privada SelectObject Lib "gdi32" (ByVal hdc como longo, ByVal hObject as Long) como longo
Função Declarar Particular GetForegroundWindow Lib "user32" () As Long
Função de declaração privada CreatePen Lib "gdi32" (ByVal nPenStyle como longo, ByVal nWidth como longo, ByVal crColor como longo) como longo
Declaração de função de declaração privada para Lib "gdi32" (ByVal hdc como longo, ByVal X como longo, ByVal Y como longo) como longo
Declare Private Função MoveToEx Lib "gdi32" (ByVal hdc como Long, _
ByVal X como Long, ByVal Y como Long, lpPoint como Any) As Long
Declaração de função privada GetDC Lib "user32" (ByVal hwnd como longo) como longo
Função de declaração privada SetPixelV Lib "gdi32" (ByVal hdc como longo, ByVal X como longo, ByVal Y como longo, ByVal crColor como longo) como Byte
Monhdc privado como longo
Dim Buff como booleano
Privado Sub UserForm_MouseDown (ByVal Botão Como Integer, ByVal Shift As Integer, ByVal X Como Único, ByVal Y Como Único)
Buff = True
End Sub
Private Sub UserForm_MouseMove (Botão ByVal As Integer, ByVal Shift As Integer, ByVal X Como Único, ByVal Y Como Único)
Do while myhdc = 0
myhdc = GetForegroundWindow ()
myhdc = GetDC (monhdc)
Loop
Se o botão 1 sair então sub
hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))
DeleteObject SelectObject (myhdc, hRPen)
Se Buff Então
MoveToEx myhdc, X * 1, 32, Y * 1, 32, & H0
Buff = False
Fim se
LineTo myhdc, X * 1, 32, Y * 1, 32
DoEvents
End Sub