Страница: 1 |
|
Вопрос: Опять Объекты
|
Добавлено: 31.05.04 09:26
|
|
Автор вопроса: Дмитрий Щапов
|
private type Xtype
CheckB as CheckBox
end type
private MasObj() as Xtype
private sub XXX
......
if ??? then
masobj(lng1).checkox=controls.add ("VB.Checkbox","Check" & UnicalID)
end if
......
end sub
мне надо обрабатвать события этих Check'ов, как видите, динамичеси создаваемых.
Ответить
|
Номер ответа: 1 Автор ответа: LamerOnLine
ICQ: 334781088
Вопросов: 108 Ответов: 2822
|
Профиль | | #1
|
Добавлено: 31.05.04 09:49
|
1. Если нужно создать массив объектов - сделай через Load
2. В твоем варианте все просто - используй сабклассинг. Вот примерно так:
'код формы
Option Explicit
Private Type Xtype
CheckB As CheckBox
End Type
Private MasObj() As Xtype
Private Sub XXX()
ReDim MasObj(1)
Dim UnicalID As Long
UnicalID = 35235 'Trash
Set MasObj(1).CheckB = Controls.Add("VB.Checkbox", "Check" & UnicalID)
MasObj(1).CheckB.Move 20, 20
MasObj(1).CheckB.Visible = True
End Sub
Private Sub Form_Load()
Call XXX
PrevProc = SetWindowLong(MasObj(1).CheckB.hwnd, GWL_WNDPROC, AddressOf CheckProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong MasObj(1).CheckB.hwnd, GWL_WNDPROC, PrevProc
End Sub
'код модуля
Option Explicit
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetClipboardViewer Lib "user32" (ByVal hwnd As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public PrevProc As Long
Private Const WM_LBUTTONUP = &H202
Public Function CheckProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
CheckProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_LBUTTONUP Then MsgBox "Left click"
End Function
Все просто...
Ответить
|
Страница: 1 |
Поиск по форуму