home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Bureautique / LibreOffice / LibreOffice_4.3.5_Win_x86.msi / Event.xba < prev    next >
Extensible Markup Language  |  2014-12-11  |  22KB  |  486 lines

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
  3. <script:module xmlns:script="http://openoffice.org/2000/script" script:name="Event" script:language="StarBasic">REM =======================================================================================================================
  4. REM ===                    The Access2Base library is a part of the LibreOffice project.                                    ===
  5. REM ===                    Full documentation is available on http://www.access2base.com                                    ===
  6. REM =======================================================================================================================
  7.  
  8. Option Compatible
  9. Option ClassModule
  10.  
  11. Option Explicit
  12.  
  13. REM -----------------------------------------------------------------------------------------------------------------------
  14. REM --- CLASS ROOT FIELDS                                                                                                 ---
  15. REM -----------------------------------------------------------------------------------------------------------------------
  16.  
  17. Private    _Type                    As String                '    Must be EVENT
  18. Private    _EventSource            As Object
  19. Private    _EventType                As String
  20. Private    _EventName                As String
  21. Private _SubComponentName        As String
  22. Private _SubComponentType        As Long
  23. Private    _ContextShortcut        As String
  24. Private    _ButtonLeft                As Boolean                '    com.sun.star.awt.MouseButton.XXX
  25. Private    _ButtonRight            As Boolean
  26. Private    _ButtonMiddle            As Boolean
  27. Private    _XPos                    As Variant                '    Null or Long
  28. Private    _YPos                    As Variant                '    Null or Long
  29. Private    _ClickCount                As Long
  30. Private    _KeyCode                As Integer                '    com.sun.star.awt.Key.XXX
  31. Private    _KeyChar                As String
  32. Private    _KeyFunction            As Integer                '    com.sun.star.awt.KeyFunction.XXX
  33. Private _KeyAlt                    As Boolean
  34. Private _KeyCtrl                As Boolean
  35. Private _KeyShift                As Boolean
  36. Private    _FocusChangeTemporary    As Boolean                '    False if user action in same window
  37. Private    _RowChangeAction        As Long                    '    com.sun.star.sdb.RowChangeAction.XXX
  38. Private _Recommendation            As String                '    "IGNORE" or ""
  39.  
  40. REM -----------------------------------------------------------------------------------------------------------------------
  41. REM --- CONSTRUCTORS / DESTRUCTORS                                                                                        ---
  42. REM -----------------------------------------------------------------------------------------------------------------------
  43. Private Sub Class_Initialize()
  44.     _Type = OBJEVENT
  45.     _EventSource = Nothing
  46.     _EventType = ""
  47.     _EventName = ""
  48.     _SubComponentName = ""
  49.     _SubComponentType = -1
  50.     _ContextShortcut = ""
  51.     _ButtonLeft = False        '    See com.sun.star.awt.MouseButton.XXX
  52.     _ButtonRight = False
  53.     _ButtonMiddle = False
  54.     _XPos = Null
  55.     _YPos = Null
  56.     _ClickCount = 0
  57.     _KeyCode = 0
  58.     _KeyChar = ""
  59.     _KeyFunction = com.sun.star.awt.KeyFunction.DONTKNOW
  60.     _KeyAlt = False
  61.     _KeyCtrl = False
  62.     _KeyShift = False
  63.     _FocusChangeTemporary    = False
  64.     _RowChangeAction = 0
  65.     _Recommendation = ""
  66. End Sub        '    Constructor
  67.  
  68. REM -----------------------------------------------------------------------------------------------------------------------
  69. 'Private Sub Class_Terminate()
  70.  
  71. REM -----------------------------------------------------------------------------------------------------------------------
  72. REM --- CLASS GET/LET/SET PROPERTIES                                                                                    ---
  73. REM -----------------------------------------------------------------------------------------------------------------------
  74. Property Get ButtonLeft() As Variant
  75.     ButtonLeft = _PropertyGet("ButtonLeft")
  76. End Property        '    ButtonLeft (get)
  77.  
  78. REM -----------------------------------------------------------------------------------------------------------------------
  79. Property Get ButtonMiddle() As Variant
  80.     ButtonMiddle = _PropertyGet("ButtonMiddle")
  81. End Property        '    ButtonMiddle (get)
  82.  
  83. REM -----------------------------------------------------------------------------------------------------------------------
  84. Property Get ButtonRight() As Variant
  85.     ButtonRight = _PropertyGet("ButtonRight")
  86. End Property        '    ButtonRight (get)
  87.  
  88. REM -----------------------------------------------------------------------------------------------------------------------
  89. Property Get ClickCount() As Variant
  90.     ClickCount = _PropertyGet("ClickCount")
  91. End Property        '    ClickCount (get)
  92.  
  93. REM -----------------------------------------------------------------------------------------------------------------------
  94. Property Get ContextShortcut() As Variant
  95.     ContextShortcut = _PropertyGet("ContextShortcut")
  96. End Property        '    ContextShortcut (get)
  97.  
  98. REM -----------------------------------------------------------------------------------------------------------------------
  99. Property Get EventName() As Variant
  100.     EventName = _PropertyGet("EventName")
  101. End Property        '    EventName (get)
  102.  
  103. REM -----------------------------------------------------------------------------------------------------------------------
  104. Property Get EventSource() As Variant
  105.     EventSource = _PropertyGet("EventSource")
  106. End Property        '    EventSource (get)
  107.  
  108. REM -----------------------------------------------------------------------------------------------------------------------
  109. Property Get EventType() As Variant
  110.     EventType = _PropertyGet("EventType")
  111. End Property        '    EventType (get)
  112.  
  113. REM -----------------------------------------------------------------------------------------------------------------------
  114. Property Get FocusChangeTemporary() As Variant
  115.     FocusChangeTemporary = _PropertyGet("FocusChangeTemporary")
  116. End Property        '    FocusChangeTemporary (get)
  117.  
  118. REM -----------------------------------------------------------------------------------------------------------------------
  119. Property Get KeyAlt() As Variant
  120.     KeyAlt = _PropertyGet("KeyAlt")
  121. End Property        '    KeyAlt (get)
  122.  
  123. REM -----------------------------------------------------------------------------------------------------------------------
  124. Property Get KeyChar() As Variant
  125.     KeyChar = _PropertyGet("KeyChar")
  126. End Property        '    KeyChar (get)
  127.  
  128. REM -----------------------------------------------------------------------------------------------------------------------
  129. Property Get KeyCode() As Variant
  130.     KeyCode = _PropertyGet("KeyCode")
  131. End Property        '    KeyCode (get)
  132.  
  133. REM -----------------------------------------------------------------------------------------------------------------------
  134. Property Get KeyCtrl() As Variant
  135.     KeyCtrl = _PropertyGet("KeyCtrl")
  136. End Property        '    KeyCtrl (get)
  137.  
  138. REM -----------------------------------------------------------------------------------------------------------------------
  139. Property Get KeyFunction() As Variant
  140.     KeyFunction = _PropertyGet("KeyFunction")
  141. End Property        '    KeyFunction (get)
  142.  
  143. REM -----------------------------------------------------------------------------------------------------------------------
  144. Property Get KeyShift() As Variant
  145.     KeyShift = _PropertyGet("KeyShift")
  146. End Property        '    KeyShift (get)
  147.  
  148. REM -----------------------------------------------------------------------------------------------------------------------
  149. Property Get ObjectType() As String
  150.     ObjectType = _PropertyGet("ObjectType")
  151. End Property        '    ObjectType (get)
  152.  
  153. REM -----------------------------------------------------------------------------------------------------------------------
  154. Public Function Properties(ByVal Optional pvIndex As Variant) As Variant
  155. '    Return
  156. '        a Collection object if pvIndex absent
  157. '        a Property object otherwise
  158.  
  159. Dim vProperty As Variant, vPropertiesList() As Variant, sObject As String
  160.     vPropertiesList = _PropertiesList()
  161.     sObject = Utils._PCase(_Type)
  162.     If IsMissing(pvIndex) Then
  163.         vProperty = PropertiesGet._Properties(sObject, "", vPropertiesList)
  164.     Else
  165.         vProperty = PropertiesGet._Properties(sObject, "", vPropertiesList, pvIndex)
  166.         vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
  167.     End If
  168.     
  169. Exit_Function:
  170.     Set Properties = vProperty
  171.     Exit Function
  172. End Function    '    Properties
  173.  
  174. REM -----------------------------------------------------------------------------------------------------------------------
  175. Property Get Recommendation() As Variant
  176.     Recommendation = _PropertyGet("Recommendation")
  177. End Property        '    Recommendation (get)
  178.  
  179. REM -----------------------------------------------------------------------------------------------------------------------
  180. Property Get RowChangeAction() As Variant
  181.     RowChangeAction = _PropertyGet("RowChangeAction")
  182. End Property        '    RowChangeAction (get)
  183.  
  184. REM -----------------------------------------------------------------------------------------------------------------------
  185. Public Function Source() As Variant
  186. '    Return the object having fired the event: Form, Control or SubForm
  187. '    Else return the root Database object
  188.     Source = _PropertyGet("Source")
  189. End Function    '    Source (get)
  190.  
  191. REM -----------------------------------------------------------------------------------------------------------------------
  192. Property Get SubComponentName() As String
  193.     SubComponentName = _PropertyGet("SubComponentName")
  194. End Property        '    SubComponentName (get)
  195.  
  196. REM -----------------------------------------------------------------------------------------------------------------------
  197. Property Get SubComponentType() As Long
  198.     SubComponentType = _PropertyGet("SubComponentType")
  199. End Property        '    SubComponentType (get)
  200.  
  201. REM -----------------------------------------------------------------------------------------------------------------------
  202. Property Get XPos() As Variant
  203.     XPos = _PropertyGet("XPos")
  204. End Property        '    XPos (get)
  205.  
  206. REM -----------------------------------------------------------------------------------------------------------------------
  207. Property Get YPos() As Variant
  208.     YPos = _PropertyGet("YPos")
  209. End Property        '    YPos (get)
  210.  
  211. REM -----------------------------------------------------------------------------------------------------------------------
  212. REM --- CLASS METHODS                                                                                                     ---
  213. REM -----------------------------------------------------------------------------------------------------------------------
  214. Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
  215. '    Return property value of psProperty property name
  216.  
  217.     Utils._SetCalledSub("Form.getProperty")
  218.     If IsMissing(pvProperty) Then Call _TraceArguments()
  219.     getProperty = _PropertyGet(pvProperty)
  220.     Utils._ResetCalledSub("Form.getProperty")
  221.     
  222. End Function        '    getProperty
  223.  
  224. REM -----------------------------------------------------------------------------------------------------------------------
  225. Public Function hasProperty(ByVal Optional pvProperty As Variant) As Boolean
  226. '    Return True if object has a valid property called pvProperty (case-insensitive comparison !)
  227.  
  228.     If IsMissing(pvProperty) Then hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList()) Else hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList(), pvProperty)
  229.     Exit Function
  230.     
  231. End Function    '    hasProperty
  232.  
  233. REM -----------------------------------------------------------------------------------------------------------------------
  234. REM --- PRIVATE FUNCTIONS                                                                                                 ---
  235. REM -----------------------------------------------------------------------------------------------------------------------
  236. Public Sub _Initialize(poEvent As Object)
  237.  
  238. Dim oObject As Object, i As Integer
  239. Dim sShortcut As String, sAddShortcut As String, sArray() As String
  240. Dim sImplementation As String, oSelection As Object
  241. Dim iCurrentDoc As Integer, oDoc As Object
  242. Const cstDatabaseForm = "com.sun.star.comp.forms.ODatabaseForm"
  243.  
  244.     If _ErrorHandler() Then On Local Error Goto Error_Function
  245.  
  246.     Set oObject = poEvent.Source
  247.     _EventSource = oObject
  248.     sArray = Split(Utils._getUNOTypeName(poEvent), ".")
  249.     _EventType = UCase(sArray(UBound(sArray))
  250.     If Utils._hasUNOProperty(poEvent, "EventName") Then _EventName = poEvent.EventName
  251.  
  252.     Select Case _EventType
  253.         Case "DOCUMENTEVENT"
  254.             'SubComponent processing
  255.             Select Case UCase(_EventName)
  256.                 Case UCase("OnSubComponentClosed"), UCase("OnSubComponentOpened")
  257.                     Set oSelection = poEvent.ViewController.getSelection()(0)
  258.                     _SubComponentName = oSelection.Name
  259.                     With  com.sun.star.sdb.application.DatabaseObject
  260.                         Select Case oSelection.Type
  261.                             Case .TABLE        :    _SubComponentType = acTable
  262.                             Case .QUERY        :    _SubComponentType = acQuery
  263.                             Case .FORM        :    _SubComponentType = acForm
  264.                             Case .REPORT    :    _SubComponentType = acReport
  265.                             Case Else
  266.                         End Select
  267.                     End With
  268.                 Case Else
  269.             End Select
  270.         Case "EVENTOBJECT"
  271.         Case "ACTIONEVENT"
  272.         Case "FOCUSEVENT"
  273.             _FocusChangeTemporary = poEvent.Temporary
  274.         Case "ITEMEVENT"
  275.         Case "INPUTEVENT", "KEYEVENT"
  276.             _KeyCode        = poEvent.KeyCode
  277.             _KeyChar        = poEvent.KeyChar
  278.             _KeyFunction    = poEvent.KeyFunc
  279.             _KeyAlt            = Utils._BitShift(poEvent.Modifiers, com.sun.star.awt.KeyModifier.MOD2)
  280.             _KeyCtrl        = Utils._BitShift(poEvent.Modifiers, com.sun.star.awt.KeyModifier.MOD1)
  281.             _KeyShift        = Utils._BitShift(poEvent.Modifiers, com.sun.star.awt.KeyModifier.SHIFT)
  282.         Case "MOUSEEVENT"
  283.             _ButtonLeft        =    Utils._BitShift(poEvent.Buttons, com.sun.star.awt.MouseButton.LEFT)
  284.             _ButtonRight    =    Utils._BitShift(poEvent.Buttons, com.sun.star.awt.MouseButton.RIGHT)
  285.             _ButtonMiddle    =    Utils._BitShift(poEvent.Buttons, com.sun.star.awt.MouseButton.MIDDLE)
  286.             _XPos = poEvent.X
  287.             _YPos = poEvent.Y
  288.             _ClickCount = poEvent.ClickCount
  289.         Case "ROWCHANGEEVENT"
  290.             _RowChangeAction = poEvent.Action
  291.         Case "TEXTEVENT"
  292.         Case "ADJUSTMENTEVENT", "DOCKINGEVENT", "ENDDOCKINGEVENT", "ENDPOPUPMODEEVENT", "ENHANCEDMOUSEEVENT" _
  293.                 , "MENUEVENT", "PAINTEVENT", "SPINEVENT", "VCLCONTAINEREVENT", "WINDOWEVENT"
  294.             Goto Exit_Function
  295.         Case Else
  296.             Goto Exit_Function
  297.     End Select
  298.  
  299.     '    Evaluate ContextShortcut
  300.     iCurrentDoc = Application._CurrentDoc()
  301.     If iCurrentDoc < 0 Then Goto Exit_Function
  302.     Set oDoc = _A2B_.CurrentDoc(iCurrentDoc)
  303.     sShortcut = ""
  304.     sImplementation = Utils._ImplementationName(oObject)
  305.     
  306.     Select Case True
  307.         Case sImplementation = "stardiv.Toolkit.UnoDialogControl"            '    Dialog
  308.             _ContextShortcut = "Dialogs!" & _EventSource.Model.Name
  309.             Goto Exit_Function
  310.         Case Left(sImplementation, 16) = "stardiv.Toolkit."                    '    Control in Dialog
  311.             _ContextShortcut = "Dialogs!" & _EventSource.Context.Model.Name _
  312.                                 & "!" & _EventSource.Model.Name
  313.             Goto Exit_Function
  314.         Case Else
  315.     End Select
  316.     
  317.     '    To manage 2x triggers of "Before record action" form event
  318.     If _EventType = "ROWCHANGEEVENT" And sImplementation <> "com.sun.star.comp.forms.ODatabaseForm" Then _Recommendation = "IGNORE"
  319.  
  320.     Do While sImplementation <> "SwXTextDocument"
  321.         sAddShortcut = ""
  322.         Select Case sImplementation
  323.             Case "com.sun.star.comp.forms.OFormsCollection"            '    Do nothing
  324.             Case Else
  325.                 If Utils._hasUNOProperty(oObject, "Model") Then
  326.                     If oObject.Model.Name <> "MainForm" And oObject.Model.Name <> "Form" Then sAddShortcut = Utils._Surround(oObject.Model.Name)
  327.                 ElseIf Utils._hasUNOProperty(oObject, "Name") Then
  328.                     If oObject.Name <> "MainForm" And  oObject.Name <> "Form" Then sAddShortcut = Utils._Surround(oObject.Name)
  329.                 End If
  330.                 If sAddShortcut <> "" Then
  331.                     If sImplementation = cstDatabaseForm And oDoc.DbConnect = DBCONNECTBASE Then sAddShortcut = sAddShortcut & ".Form"
  332.                     sShortcut = sAddShortcut & Iif(Len(sShortcut) > 0, "!" & sShortcut, "")
  333.                 End If
  334.         End Select
  335.         Select Case True
  336.             Case Utils._hasUNOProperty(oObject, "Model")
  337.                 Set oObject = oObject.Model.Parent
  338.             Case Utils._hasUNOProperty(oObject, "Parent")
  339.                 Set oObject = oObject.Parent
  340.             Case Else
  341.                 Goto Exit_Function
  342.         End Select
  343.         sImplementation = Utils._ImplementationName(oObject)
  344.     Loop
  345.     '    Add Forms! prefix
  346. '    Select Case oDoc.DbConnect
  347. '        Case DBCONNECTBASE
  348.             If Utils._hasUNOProperty(oObject, "Args") Then        '    Current object is a SwXTextDocument
  349.                 For i = 0 To UBound(oObject.Args)
  350.                     If oObject.Args(i).Name = "DocumentTitle" Then
  351.                         sAddShortcut = Utils._Surround(oObject.Args(i).Value)
  352.                         Exit For
  353.                     End If
  354.                 Next i
  355.             End If
  356.             sShortcut = "Forms!" & sAddShortcut & "!" & sShortcut
  357. '        Case DBCONNECTFORM
  358. '            sShortcut = "Forms!0!" & sShortcut
  359. '    End Select
  360.  
  361.     sArray = Split(sShortcut, "!")
  362.     '    If presence of "Forms!myform!myform.Form", eliminate 2nd element
  363.     '    Eliminate anyway blanco subcomponents (e.g; Forms!!myForm)
  364.     If UBound(sArray) >= 2 Then
  365.         If UCase(sArray(1)) & ".FORM" = UCase(sArray(2)) Then sArray(1) = ""
  366.         sArray = Utils._TrimArray(sArray)
  367.     End If
  368.     '    If first element ends with .Form, remove suffix
  369.     If UBound(sArray) >= 1 Then
  370.         If Len(sArray(1)) > 5 And Right(sArray(1), 5) = ".Form" Then sArray(1) = left(sArray(1), Len(sArray(1)) - 5)
  371.         sShortcut = Join(sArray, "!")
  372.     End If
  373.     If Len(sShortcut) >= 2 Then
  374.         If Right(sShortcut, 1) = "!" Then
  375.             _ContextShortcut = Left(sShortcut, Len(sShortcut) - 1)
  376.         Else
  377.             _ContextShortcut = sShortcut
  378.         End If
  379.     End If
  380.  
  381. Exit_Function:
  382.     Exit Sub            
  383. Error_Function:
  384.     TraceError(TRACEWARNING, Err, "Event.Initialize", Erl)
  385.     GoTo Exit_Function
  386. End Sub            '    _Initialize        V0.9.1
  387.  
  388. REM -----------------------------------------------------------------------------------------------------------------------
  389. Private Function _PropertiesList() As Variant
  390.  
  391. Dim sSubComponentName As String, sSubComponentType As String
  392.     sSubComponentName = Iif(_SubComponentType > -1, "SubComponentName", "")
  393.     sSubComponentType = Iif(_SubComponentType > -1, "SubComponentType", "")
  394. Dim sXPos As String, sYPos As String
  395.     sXPos = Iif(IsNull(_XPos), "", "XPos")
  396.     sYPos = Iif(IsNull(_YPos), "", "YPos")
  397.  
  398.     _PropertiesList = Utils._TrimArray("ButtonLeft", "ButtonRight", "ButtonMiddle", "ClickCount" _
  399.                                         , "ContextShortcut", "EventName", "EventType", "FocusChangeTemporary",  _
  400.                                         , "KeyAlt", "KeyChar", "KeyCode", "KeyCtrl", "KeyFunction", "KeyShift" _
  401.                                         , "ObjectType", "Recommendation", "RowChangeAction", "Source" _
  402.                                         , sSubComponentName, sSubComponentType, sXPos, sYPos _
  403.                                     )
  404.  
  405. End Function    '    _PropertiesList
  406.  
  407. REM -----------------------------------------------------------------------------------------------------------------------
  408. Private Function _PropertyGet(ByVal psProperty As String) As Variant
  409. '    Return property value of the psProperty property name
  410.  
  411.     If _ErrorHandler() Then On Local Error Goto Error_Function
  412.     Utils._SetCalledSub("Event.get" & psProperty)
  413. Dim vEMPTY As Variant
  414.     _PropertyGet = vEMPTY
  415.     
  416.     Select Case UCase(psProperty)
  417.         Case UCase("ButtonLeft")
  418.             _PropertyGet = _ButtonLeft
  419.         Case UCase("ButtonMiddle")
  420.             _PropertyGet = _ButtonMiddle
  421.         Case UCase("ButtonRight")
  422.             _PropertyGet = _ButtonRight
  423.         Case UCase("ClickCount")
  424.             _PropertyGet = _ClickCount
  425.         Case UCase("ContextShortcut")
  426.             _PropertyGet = _ContextShortcut
  427.         Case UCase("FocusChangeTemporary")
  428.             _PropertyGet = _FocusChangeTemporary
  429.         Case UCase("EventName")
  430.             _PropertyGet = _EventName
  431.         Case UCase("EventSource")
  432.             _PropertyGet = _EventSource
  433.         Case UCase("EventType")
  434.             _PropertyGet = _EventType
  435.         Case UCase("KeyAlt")
  436.             _PropertyGet = _KeyAlt
  437.         Case UCase("KeyChar")
  438.             _PropertyGet = _KeyChar
  439.         Case UCase("KeyCode")
  440.             _PropertyGet = _KeyCode
  441.         Case UCase("KeyCtrl")
  442.             _PropertyGet = _KeyCtrl
  443.         Case UCase("KeyFunction")
  444.             _PropertyGet = _KeyFunction
  445.         Case UCase("KeyShift")
  446.             _PropertyGet = _KeyShift
  447.         Case UCase("ObjectType")
  448.             _PropertyGet = _Type
  449.         Case UCase("Recommendation")
  450.             _PropertyGet = _Recommendation
  451.         Case UCase("RowChangeAction")
  452.             _PropertyGet = _RowChangeAction
  453.         Case UCase("Source")
  454.             If _ContextShortcut = "" Then
  455.                 _PropertyGet = _EventSource
  456.             Else
  457.                 _PropertyGet = getObject(_ContextShortcut)
  458.             End If
  459.         Case UCase("SubComponentName")
  460.             _PropertyGet = _SubComponentName
  461.         Case UCase("SubComponentType")
  462.             _PropertyGet = _SubComponentType
  463.         Case UCase("XPos")
  464.             If IsNull(_XPos) Then Goto Trace_Error
  465.             _PropertyGet = _XPos
  466.         Case UCase("YPos")
  467.             If IsNull(_YPos) Then Goto Trace_Error
  468.             _PropertyGet = _YPos
  469.         Case Else
  470.             Goto Trace_Error
  471.     End Select
  472.     
  473. Exit_Function:
  474.     Utils._ResetCalledSub("Event.get" & psProperty)
  475.     Exit Function
  476. Trace_Error:
  477.     '    Errors are not displayed to avoid display infinite cycling
  478.     TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, False, psProperty)
  479.     _PropertyGet = vEMPTY
  480.     Goto Exit_Function
  481. Error_Function:
  482.     TraceError(TRACEABORT, Err, "Event._PropertyGet", Erl)
  483.     _PropertyGet = vEMPTY
  484.     GoTo Exit_Function
  485. End Function        '    _PropertyGet    V1.1.0
  486. </script:module>