[AccessD] Off the wall Events question...

Shamil Salakhetdinov shamil at smsconsulting.spb.ru
Thu Feb 13 16:21:00 CST 2003


> it is going to require more code
Just a few Drew,

You can deliver them together with your component the code for this generic
callback dispatcher I simulated by:

#If Acc97 Then
Public Sub MyEvent()
     mobjMyClassWithEvents_MyEvent
End Sub
#Else
#End If

They (you customers) will need to just comment unused calls.

Having Init and Terminate methods for your component isn't a bad idea at all
even if your component is running in A2K or AXP or A11.

Therefore the only code they will have to type/insert additionally to your
generic callback dispatcher is this:

#If Acc97 Then
Private mobjMyClassWithEvents As CMyClassWithEvents
#Else
Private WithEvents mobjMyClassWithEvents As CMyClassWithEvents
#End If

I think you'd agree that it's not that much to have the pleasure of your
component running in Acc97/A2K/AXP/A11?

Shamil

P.S. And of course the code sample I  presented should be generalized for
the case when one callback server (events source) has several callback
clients (events sinks) - here is where Collection is the most suitable
candidate IMO...


----- Original Message -----
From: "Drew Wutka" <DWUTKA at marlow.com>
To: <accessd at databaseadvisors.com>
Sent: Friday, February 14, 2003 12:40 AM
Subject: RE: [AccessD] Off the wall Events question...


> Thanks Shamil.  I was thinking along the same lines yesterday.  The only
> issue with this method is that it is going to require more code for the
end
> users (well end developers) to deal with on their forms.
>
> This method definitely works though.  So as of right now, it's a toss up
> between this method, and just 'hijacking' some of the current form
'events'.
>
> Thanks again.
>
> Drew
>
> -----Original Message-----
> From: Shamil Salakhetdinov [mailto:shamil at smsconsulting.spb.ru]
> Sent: Thursday, February 13, 2003 4:40 AM
> To: accessd at databaseadvisors.com
> Subject: Re: [AccessD] Off the wall Events question...
>
>
> > So, does anyone know how to accomplish the same thing in Access 97.
> Drew,
>
> It looks a little bit ugly but it can be done in Acc97 and ported to
> A2K/AXP/A11 with just a few edits of the source code - here is one of the
> ways to do it:
>
> '================  cut here ==================
> '+ CMyClassWithEvents (custom class module)
> #Const Acc97 = 1 ' change to 0 in A2K/AXP/A11
> #If Acc97 Then
> Private mobjCallBackClient As Object
>
> Public Sub Init(ByRef robjCallBackClient As Object)
>     Set mobjCallBackClient = robjCallBackClient
> End Sub
> Public Sub Terminate()
>     Set mobjCallBackClient = Nothing
> End Sub
> #Else
> 'Event MyEvent() ' uncomment in A2K/AXP/A11
> #End If
>
> Public Sub CallBackTest()
> #If Acc97 Then
>     mobjCallBackClient.MyEvent
> #Else
>     'RaiseEvent MyEvent  ' uncomment in A2K/AXP/A11
> #End If
> End Sub
> '- CMyClassWithEvents
>
> '================  cut here ==================
> '+ CMyCustomsEventsClient (custom class module)
> #Const Acc97 = 1 ' change to 0 in A2K/AXP/A11
>
> #If Acc97 Then
> Private mobjMyClassWithEvents As CMyClassWithEvents
> #Else
> Private WithEvents mobjMyClassWithEvents As CMyClassWithEvents
> #End If
>
> Public Sub Test()
>    Set mobjMyClassWithEvents = New CMyClassWithEvents
>    With mobjMyClassWithEvents
>      #If Acc97 Then
>       .Init Me
>       .CallBackTest
>       .Terminate
>      #Else
>       .CallBackTest
>      #End If
>    End With
> End Sub
>
> Private Sub mobjMyClassWithEvents_MyEvent()
>     MsgBox "MyEvent fired!", vbOKOnly + vbInformation
> End Sub
>
> #If Acc97 Then
> Public Sub MyEvent()
>     mobjMyClassWithEvents_MyEvent
> End Sub
> #Else
> #End If
> '- CMyCustomsEventsClient
>
> '================  cut here ==================
> '+ basTest (standard module)
> Public Sub a_test()
>     Dim o As CMyCustomsEventsClient
>     Set o = New CMyCustomsEventsClient
>     o.Test
> End Sub
> '- basTest
> '================  cut here ==================
>
> - Of course you can set project level conditional compilation constant
Acc97
> to have less work during your port to A2k/Axp/A11;
> - Unfortunately Event and RaiseEvent are reserved words in Acc97 and even
> conditional compilation doesn't allow to use them without comments - so
> during port to A2k/Axp/A11 additional work of uncommenting code lines with
> RaiseEvent and Event will be needed...;
> - I did use very simple custom event without any arguments to show the
> principle - in the case of the usage of event arguments callback methods
can
> be specific for every custom event or this technique can use more general
> callback method with EventName as the first paramater and ParamArray
> following it and Select Case inside it to call specific private custom
event
> sinks ...;
> - Init method is what MS Access does "behind the curtains" when you use
> WithEvents;
> - Terminate method is a MUST HAVE for this custom events Acc97
simulation -
> without it object instances will not be released because of cross-refs and
> you'll get memory leak....
>
> HTH,
> Shamil
>
>
> ----- Original Message -----
> From: "Drew Wutka" <DWUTKA at marlow.com>
> To: <AccessD at databaseadvisors.com>
> Sent: Thursday, February 13, 2003 7:49 AM
> Subject: [AccessD] Off the wall Events question...
>
>
> > With all of the posts about events recently, something just dawned on
me.
> > Actually, it came crashing down on me.
> >
> > I have been rewriting my MiniCalendar form lately.  My original works,
but
> > is far from elegant, or even slick.  I had visualized a lot of changes I
> > wanted to incorporate, and just starting wacking at them all.
> >
> > So far I have gotten some neat 'features', such as a rounded form,
> extended
> > dropdown capability, etc.  However, one of the new features that I had
> > planned on, I now know I can't do directly.  The old form accepted a
form
> > name and control name, and would return a date to that control.  What I
> > wanted to use in this version was raiseevent, to fire an event on the
> > calling form.  Thinking in VB 6 mode, I didn't even realize this would
be
> a
> > problem with Access 97, since I can do this easily in VB 6.  But with
all
> of
> > the recent posts, I realized that event and raiseevent are reserved
> keywords
> > in Access 97 (VBA 5.0), but do nothing.
> >
> > ARG!!!!
> >
> > So, does anyone know how to accomplish the same thing in Access 97.  I
> will
> > be making a 2000 version of my calendar, so obviously I can use event
and
> > raiseevent there, but I am developing the new version in 97 first, so I
> need
> > a work around.  I am thinking about using one of the form's current
> events,
> > and triggering it.  (Probably AfterUpdate).  I wanted my own event, but
> that
> > doesn't look possible.  I even tried hunting through the VBA .dll's, to
> see
> > if I could fudge an API or two, but no luck there.
> >
> > Any thoughts?
> >
> > Drew
> > _______________________________________________
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
>
> _______________________________________________
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> _______________________________________________
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com




More information about the AccessD mailing list