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 POINTAPI

X 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

Artigo Anterior Próximo Artigo

Principais Dicas