diff options
author | Jean-Pierre Ledure <jp@ledure.be> | 2014-08-17 16:25:58 +0200 |
---|---|---|
committer | Jean-Pierre Ledure <jp@ledure.be> | 2014-08-22 15:34:58 +0200 |
commit | 1cbd9f7fbe327662d44605e4b3d4150b740b6f33 (patch) | |
tree | a853b7dc7d1cc10c185bda683f9bf69102522914 /wizards | |
parent | 82ddade71441ba98427470b8a05a56b7b572e74e (diff) |
Access2Base - Remove _This in Form and SubForm objects
The construction in Basic
Set a._This = a
is useful to export the address of an object to Subs or Functions.
It increases however the risk of memory leaks.
Avoid when avoidable.
Change-Id: I81bf01badf00687526a358eda117a55b12f5d72b
Diffstat (limited to 'wizards')
-rw-r--r-- | wizards/source/access2base/Application.xba | 2 | ||||
-rw-r--r-- | wizards/source/access2base/Control.xba | 1 | ||||
-rw-r--r-- | wizards/source/access2base/Form.xba | 10 | ||||
-rw-r--r-- | wizards/source/access2base/Methods.xba | 93 | ||||
-rw-r--r-- | wizards/source/access2base/SubForm.xba | 9 | ||||
-rw-r--r-- | wizards/source/access2base/acConstants.xba | 2 |
6 files changed, 60 insertions, 57 deletions
diff --git a/wizards/source/access2base/Application.xba b/wizards/source/access2base/Application.xba index 8b2af9a392e6..f68ced5d862a 100644 --- a/wizards/source/access2base/Application.xba +++ b/wizards/source/access2base/Application.xba @@ -329,7 +329,6 @@ Dim iCurrentDoc As Integer, vCurrentDoc As Variant, oForms As Variant, oCounter ' Process when ARGUMENT = STRING or INDEX => Initialize form object Dim ofForm As Object Set ofForm = New Form - Set ofForm._This = ofForm Dim sAllForms As Variant, i As Integer, vName As Variant, oDatabase As Object, bFound As Boolean Select Case vCurrentDoc.DbConnect Case DBCONNECTBASE @@ -1096,7 +1095,6 @@ Dim i As Integer, iCount As Integer, iAllCount As Integer, ofForm As Variant iCount = 0 If iAllCount > 0 Then Set ofForm = New Form - Set ofForm._This = ofForm For i = 0 To iAllCount - 1 Set ofForm = Application.AllForms(i) If ofForm.IsLoaded Then iCount = iCount + 1 diff --git a/wizards/source/access2base/Control.xba b/wizards/source/access2base/Control.xba index b6d0410501ed..1d54b01c670d 100644 --- a/wizards/source/access2base/Control.xba +++ b/wizards/source/access2base/Control.xba @@ -1223,7 +1223,6 @@ Dim vSelection As Variant, sSelectedText As String Case UCase("Form") Set ofSubForm = New SubForm ' Start building the SUBFORM object With ofSubForm - Set ._This = ofSubForm Set .DatabaseForm = ControlModel ._Name = _Name ._Shortcut = _Shortcut & ".Form" diff --git a/wizards/source/access2base/Form.xba b/wizards/source/access2base/Form.xba index 4ec19491707e..1a292957905c 100644 --- a/wizards/source/access2base/Form.xba +++ b/wizards/source/access2base/Form.xba @@ -15,7 +15,6 @@ REM --- CLASS ROOT FIELDS --- REM ----------------------------------------------------------------------------------------------------------------------- Private _Type As String ' Must be FORM -Private _This As Object Private _Shortcut As String Private _Name As String Private _DocEntry As Integer ' Doc- and DbContainer entries in Root structure @@ -32,7 +31,6 @@ REM --- CONSTRUCTORS / DESTRUCTORS --- REM ----------------------------------------------------------------------------------------------------------------------- Private Sub Class_Initialize() _Type = OBJFORM - Set _This = Nothing _Shortcut = "" _Name = "" _DocEntry = -1 @@ -225,11 +223,17 @@ Public Function OptionGroup(ByVal Optional pvGroupName As Variant) As Variant ' Return either an error or an object of type OPTIONGROUP based on its name Const cstThisSub = "Form.OptionGroup" +Dim ogGroup As Object Utils._SetCalledSub(cstThisSub) If IsMissing(pvGroupName) Then Call _TraceArguments() If _ErrorHandler() Then On Local Error Goto Error_Function - Set OptionGroup = _OptionGroup(pvGroupName, CTLPARENTISFORM, _This) + Set ogGroup = _OptionGroup(pvGroupName, CTLPARENTISFORM, Component, DatabaseForm) + If Not IsNull(ogGroup) Then + ogGroup._DocEntry = _DocEntry + ogGroup._DbEntry = _DbEntry + End If + Set OptionGroup = ogGroup Exit_Function: Utils._ResetCalledSub(cstThisSub) diff --git a/wizards/source/access2base/Methods.xba b/wizards/source/access2base/Methods.xba index 8d7a11aaa0a0..9afac28fc08f 100644 --- a/wizards/source/access2base/Methods.xba +++ b/wizards/source/access2base/Methods.xba @@ -199,7 +199,8 @@ REM --- PRIVATE FUNCTIONS --- REM ----------------------------------------------------------------------------------------------------------------------- Public Function _OptionGroup(ByVal pvGroupName As Variant _ , ByVal psParentType As String _ - , pvForm As Object _ + , poComponent As Object _ + , poDatabaseForm As Object _ ) As Variant ' Return either an error or an object of type OPTIONGROUP based on its name @@ -215,57 +216,53 @@ Dim lXY() As Long, iIndex() As Integer ' Two indexes X-Y coordinates Dim oView As Object Const cstPixels = 10 ' Tolerance on coordinates when drawed approximately - With pvForm - bFound = False - For i = 0 To .DatabaseForm.GroupCount - 1 ' Does a group with the right name exist ? - .DatabaseForm.getGroup(i, vOptionButtons, sGroupName) - If UCase(sGroupName) = UCase(Utils._Trim(pvGroupName)) Then - bFound = True - Exit For + bFound = False + For i = 0 To poDatabaseForm.GroupCount - 1 ' Does a group with the right name exist ? + poDatabaseForm.getGroup(i, vOptionButtons, sGroupName) + If UCase(sGroupName) = UCase(Utils._Trim(pvGroupName)) Then + bFound = True + Exit For + End If + Next i + + If bFound Then + ogGroup = New Optiongroup + ogGroup._Name = sGroupName + ogGroup._ButtonsGroup = vOptionButtons + ogGroup._Count = UBound(vOptionButtons) + 1 + ogGroup._ParentType = psParentType + Set ogGroup._ParentComponent = poComponent + + ReDim lXY(1, ogGroup._Count - 1) + ReDim iIndex(ogGroup._Count - 1) + For i = 0 To ogGroup._Count - 1 ' Find the position of each radiobutton + Set oView = poComponent.CurrentController.getControl(ogGroup._ButtonsGroup(i)) + lXY(0, i) = oView.PosSize.X + lXY(1, i) = oView.PosSize.Y + Next i + For i = 0 To ogGroup._Count - 1 ' Sort them on XY coordinates + If i = 0 Then + iIndex(0) = 0 + Else + iIndex(i) = i + For j = i - 1 To 0 Step -1 + If lXY(1, i) - lXY(1, j) < - cstPixels Or ( Abs(lXY(1, i) - lXY(1, j)) <= cstPixels And lXY(0, i) - lXY(0, j) < - cstPixels ) Then + iIndex(i) = iIndex(j) + iIndex(j) = iIndex(j) + 1 + End If + Next j End If Next i + ogGroup._ButtonsIndex = iIndex() - If bFound Then - ogGroup = New Optiongroup - ogGroup._Name = sGroupName - ogGroup._ButtonsGroup = vOptionButtons - ogGroup._Count = UBound(vOptionButtons) + 1 - ogGroup._ParentType = psParentType - Set ogGroup._ParentComponent = .Component - ogGroup._DocEntry = ._DocEntry - ogGroup._DbEntry = ._DbEntry - - ReDim lXY(1, ogGroup._Count - 1) - ReDim iIndex(ogGroup._Count - 1) - For i = 0 To ogGroup._Count - 1 ' Find the position of each radiobutton - Set oView = .Component.CurrentController.getControl(ogGroup._ButtonsGroup(i)) - lXY(0, i) = oView.PosSize.X - lXY(1, i) = oView.PosSize.Y - Next i - For i = 0 To ogGroup._Count - 1 ' Sort them on XY coordinates - If i = 0 Then - iIndex(0) = 0 - Else - iIndex(i) = i - For j = i - 1 To 0 Step -1 - If lXY(1, i) - lXY(1, j) < - cstPixels Or ( Abs(lXY(1, i) - lXY(1, j)) <= cstPixels And lXY(0, i) - lXY(0, j) < - cstPixels ) Then - iIndex(i) = iIndex(j) - iIndex(j) = iIndex(j) + 1 - End If - Next j - End If - Next i - ogGroup._ButtonsIndex = iIndex() - - Set _OptionGroup = ogGroup - - Else - - Set _OptionGroup = Nothing - TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, , Array(1, pvGroupName)) + Set _OptionGroup = ogGroup - End If - End With + Else + + Set _OptionGroup = Nothing + TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), 0, , Array(1, pvGroupName)) + + End If Exit_Function: Exit Function diff --git a/wizards/source/access2base/SubForm.xba b/wizards/source/access2base/SubForm.xba index 1ddb62c03dc7..0f8b164a0bb3 100644 --- a/wizards/source/access2base/SubForm.xba +++ b/wizards/source/access2base/SubForm.xba @@ -15,7 +15,6 @@ REM --- CLASS ROOT FIELDS --- REM ----------------------------------------------------------------------------------------------------------------------- Private _Type As String ' Must be SUBFORM -Private _This As Object Private _Shortcut As String Private _Name As String Private _DocEntry As Integer @@ -126,11 +125,17 @@ Public Function OptionGroup(ByVal Optional pvGroupName As Variant) As Variant ' Return either an error or an object of type OPTIONGROUP based on its name Const cstThisSub = "SubForm.OptionGroup" +Dim ogGroup As Object Utils._SetCalledSub(cstThisSub) If IsMissing(pvGroupName) Then Call _TraceArguments() If _ErrorHandler() Then On Local Error Goto Error_Function - Set OptionGroup = _OptionGroup(pvGroupName, CTLPARENTISSUBFORM, _This) + Set ogGroup = _OptionGroup(pvGroupName, CTLPARENTISSUBFORM, ParentComponent, DatabaseForm) + If Not IsNull(ogGroup) Then + ogGroup._DocEntry = _DocEntry + ogGroup._DbEntry = _DbEntry + End If + Set OptionGroup = ogGroup Exit_Function: Utils._ResetCalledSub(cstThisSub) diff --git a/wizards/source/access2base/acConstants.xba b/wizards/source/access2base/acConstants.xba index 400a0292470d..c5849ffc19bd 100644 --- a/wizards/source/access2base/acConstants.xba +++ b/wizards/source/access2base/acConstants.xba @@ -8,7 +8,7 @@ REM ============================================================================ Option Explicit REM Access2Base ----------------------------------------------------- -Global Const Access2Base_Version = "1.1.0b" +Global Const Access2Base_Version = "1.1.0c" REM AcCloseSave REM ----------------------------------------------------------------- |