Generating and Handling Events from VB4 Classes
A Simple Demo - Displays a Form at Startup
Class : Tdemo
Option Explicit
Private mobjEventHandler As Object
Public Sub ShowForm()
Set Form2.Owner = Me
Form2.Show vbModal
Unload Form2
End Sub
Public Property Set EventHandler(IN_vEventHandler)
Set mobjEventHandler = IN_vEventHandler
End Property
Public Property Get EventHandler()
Set EventHandler = mobjEventHandler
End Property
Class : TDemoEvent
Option Explicit
Private mlbxDisplay As Listbox
Public Property Set Listbox(vNewValue)
Set mlbxDisplay = vNewValue
End Property
Public Function NotifyEvent(IN_objSource As Object, IN_sEvent As String, _
Optional INOUT_vParam1 As Variant, _
Optional INOUT_vParam2 As Variant) As Variant
Dim vRetVal As Variant
Select Case UCase$(IN_sEvent)
Case "LOAD": vRetVal = OnLoad(IN_objSource)
Case "UNLOAD": vRetVal = OnUnload(IN_objSource)
Case "CLICK": vRetVal = OnClick(IN_objSource, _
CLng(INOUT_vParam1), CLng(INOUT_vParam2))
Case Else: vRetVal = OnUnexpectedEvent(IN_objSource, _
IN_sEvent, INOUT_vParam1, INOUT_vParam2)
End Select
NotifyEvent = vRetVal
End Function
Private Function OnLoad(IN_objSource As Object) As Variant
mlbxDisplay.AddItem "Load at " & Format$(Now, "h:mm:ss")
End Function
Private Function OnUnload(IN_objSource As Object) As Variant
mlbxDisplay.AddItem "unload at " & Format$(Now, "hh:mm:ss")
End Function
Private Function OnClick(IN_objSource As Object, _
ByVal X As Long, ByVal Y As Long) As Variant
Dim S As String
S = "Click at " & Format$(X) & ", " & Format$(Y)
mlbxDisplay.AddItem S
End Function
Private Function OnUnexpectedEvent(IN_objSource As Object, _
IN_sEvent As String, INOUT_vParam1 As Variant, _
INOUT_vParam2 As Variant) As Variant
mlbxDisplay.AddItem "UNEXPECTED EVENT : " & IN_sEvent
End Function
Form1 :
Option Explicit
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub cmdShow_Click()
Dim objDemo As Object
Dim objEvent As Object
Set objEvent = New TDemoEvent
Set objEvent.Listbox = lbxDisplay
Set objDemo = New TDemo
Set objDemo.EventHandler = objEvent
objDemo.ShowForm
End Sub
Form2 :
Option Explicit
Private mobjOwner As Object
Private mvEventHandler As Object
Private Sub cmdClose_Click()
Me.Hide
End Sub
Public Property Set Owner(IN_vNewOwner)
Set mobjOwner = IN_vNewOwner
If Not mobjOwner Is Nothing Then
Set mvEventHandler = mobjOwner.EventHandler
Else
Set mvEventHandler = Nothing
End If
End Property
Private Sub Form_Load()
If Not mvEventHandler Is Nothing Then
mvEventHandler.NotifyEvent Me, "LOAD", 0, 0
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Not mvEventHandler Is Nothing Then
mvEventHandler.NotifyEvent Me, "CLICK", X, Y
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
If Not mvEventHandler Is Nothing Then
mvEventHandler.NotifyEvent Me, "UNLOAD", 0, 0
End If
End Sub
![]()