VBA: Menemukan Hdc dalam lembaran kerja Excel atau UserForm
![](http://img.brin-designs.com/img/games/794/vba-finding-hdc-an-excel-worksheet.png)
Berikut ialah dua contoh kecil tentang cara mencari Hdc dalam lembaran kerja:
- Dengan mengklik pada Sheet1, UserForm dipaparkan.
- Letakkan penunjuk pada UF, tahan butang tetikus kiri dan seret tetikus.
- Dengan menutup sub UF terus dan menarik arka di atas helaian.
Bermula
- Buku kerja baru
- Tambah nama UserForm = UserForm1
Tampal kod berikut dalam sheet1:
Private Declare Function 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 Sebagai Long, ByVal Y3 Sebagai Long, ByVal X4 Sebagai Long, ByVal Y4 Sebagai Long) Sebagai Long
Fungsi Deklarasi Swasta ArcTo Lib "gdi32" (ByVal hdc Sebagai Long, ByVal X1 Sebagai Long, ByVal Y1 Sebagai Long, ByVal X2 Sebagai Long, ByVal Y2 Sebagai Long,
ByVal X3 Sebagai Long, ByVal Y3 Sebagai Long, ByVal X4 Sebagai Long, ByVal Y4 Sebagai Long) Sebagai Long
Lembaran kerja Persendirian_SelectionChange (ByVal Target As Range)
Dim B As Long
'aktifkan UC dan lukiskannya (mencari HDC anda)
UserForm1.Show
'Mencari HDC dalam lembaran kerja Excel
monhdc = 0
Adakah semasa myhdc = 0
myhdc = GetForegroundWindow ()
B = myhdc
myhdc = GetDC (myhdc)
Loop
'Gambarkan terus pada Lembaran Kerja
B = Arc (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)
Sub Akhir
Dalam modul pengguna
Tampal kod berikut:
Jenis Persendirian POINTAPIX As Long
Y As Long
Jenis Tamat
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Fungsi Deklarasi Persendirian 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 Persendirian MoveToEx Lib "gdi32" (ByVal hdc As Long, _
ByVal X As Long, ByVal Y As Long, lpPoint As Any) As Long
Fungsi Deklarasi Persendirian GetDC Lib "user32" (ByVal hwnd As Long) Sebagai Long
Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Byte
Monhdc swasta Sebagai Long
Dim Buff Sebagai Boolean
Sub Peribadi UserForm_MouseDown (ByVal Button Sebagai Integer, ByVal Shift Sebagai Integer, ByVal X Sebagai Single, ByVal Y As Single)
Buff = Benar
Sub Akhir
Sub Peribadi UserForm_MouseMove (ByVal Button Sebagai Integer, ByVal Shift Sebagai Integer, ByVal X Sebagai Single, ByVal Y As Single)
Adakah semasa myhdc = 0
myhdc = GetForegroundWindow ()
myhdc = GetDC (monhdc)
Loop
Jika Button 1 Kemudian Keluar Sub
hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))
DeleteObject SelectObject (myhdc, hRPen)
Sekiranya Buff kemudian
MoveToEx myhdc, X * 1.32, Y * 1.32, & H0
Buff = Palsu
Akhir Jika
LineTo myhdc, X * 1.32, Y * 1.32
DoEvents
Sub Akhir