Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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'ов, как видите, динамичеси создаваемых.

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 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

Все просто...

Ответить

Номер ответа: 2
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #2 Добавлено: 31.05.04 10:24
Во уж спасибо!
Не думал что так быстро получу ответ(да и вообще получу).

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 31.05.04 10:49
Все, теперь все заработало?

Ответить

Номер ответа: 4
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #4 Добавлено: 31.05.04 19:01
Ага! То что надо.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам