VBA: Menemukan Hdc di lembar kerja Excel atau UserForm
![](http://img.brin-designs.com/img/games/794/vba-finding-hdc-an-excel-worksheet.png)
Berikut adalah dua contoh kecil tentang cara menemukan Hdc di lembar kerja:
- Dengan mengklik pada Sheet1, UserForm ditampilkan.
- Letakkan pointer di UF, tahan tombol kiri mouse ke bawah dan seret mouse.
- Dengan menutup sub UF berlanjut dan menggambar busur pada lembar.
Mulai
- Buku kerja baru
- Tambahkan nama UserForm = UserForm1
Rekatkan kode berikut di sheet1:
Fungsi Deklarasi Pribadi 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 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Private Declare Function ArcTo Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long,
ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Sub lembar kerja pribadi_SelectionChange (Rentang Target Sebagai ByVal)
Dim B As Long
'aktifkan UC dan menggambar di atasnya (menemukan HDC Anda)
UserForm1.Show
'Menemukan HDC Anda di lembar kerja Excel
monhdc = 0
Do While myhdc = 0
myhdc = GetForegroundWindow ()
B = myhdc
myhdc = GetDC (myhdc)
Loop
'Gambar langsung di Lembar Kerja
B = Busur (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)
End Sub
Dalam modul userform
Rekatkan kode berikut:
Jenis Pribadi POINTAPIX As Long
Y As Long
Jenis Akhir
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Fungsi Deklarasi Pribadi SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Fungsi Pernyataan Pribadi GetForegroundWindow Lib "user32" () As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Fungsi Deklarasi Pribadi MoveToEx Lib "gdi32" (ByVal hdc As Long, _
ByVal X As Long, ByVal Y As Long, lpPoint As Any) As Long
Fungsi Deklarasi Pribadi GetDC Lib "user32" (ByVal hwnd As Long) As Long
Fungsi Deklarasi Pribadi SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Byte
Monhdc pribadi As Long
Dim Buff As Boolean
Private Sub UserForm_MouseDown (Tombol ByVal Sebagai Integer, ByVal Shift Sebagai Integer, ByVal X As Single, ByVal Y As Single)
Buff = Benar
End Sub
Private Sub UserForm_MouseMove (Tombol ByVal Sebagai Integer, ByVal Shift Sebagai Integer, ByVal X As Single, ByVal Y As Single)
Do While myhdc = 0
myhdc = GetForegroundWindow ()
myhdc = GetDC (monhdc)
Loop
Jika Tombol 1 Kemudian Keluar Sub
hRPen = CreatePen (PS_ KONSOLIDASI, 10, RGB (0, 255, 0))
DeleteObject SelectObject (myhdc, hRPen)
Jika Buff Lalu
MoveToEx myhdc, X * 1.32, Y * 1.32, & H0
Buff = Salah
Berakhir jika
LineTo myhdc, X * 1, 32, Y * 1, 32
DoEvents
End Sub