Image Map of Navigational Panel to Home / Contents / Search Generating and Handling Events from VB4 Classes

A Simple Demo - Displays a Form at Startup

Image of line

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


Image of arrow to previous article

Image of line

[HOME] [TABLE OF CONTENTS] [SEARCH]