"0018eVegolaiD resU elbatpircS-DUSÿÍͺÿþÿ 18.0.0f7097ÿþÿ 18.0.0f7097ÍͺÍͺÍͺÿþÿDlg1sÿþÿ)XTable supported by class object controlsÿÿ ToSudFrameObÍͺÿþÿ)XTable supported by class object controlsïÕÿÿýÿÿÿþÿÿÿûÿÿûÿÿÿÿÿ€ÍͺÍͺÿþÿÿŽp'------------------------------------------------------------------------------- '-- SUD script file '-- Author: Mark W Kiehl ' www.SavvyDiademSolutions.com ' http://www.savvysolutions.info/savvycodesolutions/ ' '-- Comment: xTable with user capability to move cell contents up/down. ' ' The contents of xTable1 are retained in a dictionary object oXTableDic ' where the key corresponds to the xTable row, and each value in oXTableDic ' consists of an array holding a class object for each control (CheckBox, ' EditBox, or ComboBox). ' ' *** NOTE: a xTable never holds data, it only displays data. *** ' XTable1_EventInitialize() populates oXTableDic with initial values. ' XTable1_EventValGet() populates the XTable with the data in oXTableDic. ' XTable1_EventValChanged() and XTable1_EventValSet() updates oXTableDic with the ' changes to the XTable1. The updates to oXTableDic from these events are ' carefully engineered to achieve the desired control behaviour. ' ' The following controls are within the xTable (see also the corresponding class objects): ' Checkbox ' EditBox ' ComboBox ' ' See Sub btn_Done_EventClick() for an example on accessing the contents of oXTableDic. ' '------------------------------------------------------------------------------- Option Explicit Call LogFileDel() Dim oXTableDic, arrXTableRow, arrXTableColNames 'oXTableDic vKey = XTable row (integer); Value = arrXTableRow(oCol1, oCol2, ... oColN) Const bShowEvents = False '------------------------------------------------------------------------------- ' XTable1 Sub XTable1_EventInitialize(ByRef This) 'Created Event Handler 'Initialize oXTableDic with the initial data to be shown in 'XTable1. Event XTable1_EventValGet() will update XTable1 'with the data from oXTableDic. If bShowEvents Then Call LogFileWrite("XTable1_EventInitialize") 'Assign XTable column names to arrXTableColNames arrXTableColNames = Array("","CheckBox","EditBox","ComboBox") Set oXTableDic = CreateObject("Scripting.Dictionary") Dim oCheckBox, oEditBox, oComboBox, iRow For iRow = 1 To 3 Set oCheckBox = New c_CheckBox 'Disable CheckBox until the user makes a CombobBox selection oCheckBox.bEnable = False Set oEditBox = New c_EditBox oEditBox.sText = sStrRandomAlphaChars(5) Set oComboBox = New c_ComboBox 'NOTE: The iValue must be an integer index from 0 ...n Call oComboBox.Add(sStrRandomAlphaChars(6),0) Call oComboBox.Add(sStrRandomAlphaChars(6),1) Call oComboBox.Add(sStrRandomAlphaChars(6),2) 'arrXTableRow = Array(Col 0, Col 1, Col 2, Col 3) arrXTableRow = Array(0,oCheckBox,oEditBox,oComboBox) Call oXTableDic.Add(iRow,arrXTableRow) Set oCheckBox = Nothing: Set oEditBox = Nothing: Set oComboBox = Nothing If IsArray(arrXTableRow) Then Call Erase(arrXTableRow) Next 'iRow 'Next line very important! XTable1.RowCount = oXTableDic.Count End Sub Sub XTable1_EventColCtrlPreset(ByRef This, Col, ByRef Cell, IsInputCell) 'Created Event Handler 'Executed after XTable1_EventInitialize(), once for each column, and for each column twice: 'once (for display mode) IsInputCell = True, and then the 2nd (for entry mode) IsInputCell = False. 'NOTE: You cannot assign unique values to each row using this event. ' Every control in a column must have the same value. ' 'Use XTable1_EventValGet() to populate XTable1 controls uniquely by row with the data from oXTableDic. ''Example below demonstrates use of this event (MUST disable code under XTable1_EventValGet() if implemented). 'Call LogFileWrite("XTable1_EventColCtrlPreset Col = " & Col & " IsInputCell = " & IsInputCell) 'Select Case Col ' Case 1 'CheckBox ' Cell.Value = 0 ' Case 2 'EditBox ' Cell.Text = Str(Now,"#dd-ttt-yyyy hh:nn:ss AMPM") ' Case 3 'ComboBox ' Call Cell.Items.RemoveAll() ' Call Cell.FillItemsByVar("xChnStyle",True) 'End Select End Sub Sub XTable1_EventValGet(ByRef This, Row, Col, ByRef Cell, IsInputCell) 'Created Event Handler 'Called by XTable1_EventInitialize(). 'Triggered by a XTable Cell click (before XTable1_EventCellClick(). 'Triggered by a XTable Cell ComboBox selection (before XTable1_EventValChanged()) 'Use XTable1_EventValGet to populate XTable1 with data from oXTableDic Dim oCheckBox, oEditBox, oComboBox, oItem 'Table column titles If Col => 0 AND Row = 0 Then Cell.Text = arrXTableColNames(Col) 'Create row index number label on the left border If Col = 0 AND Row > 0 Then Cell.Text = Str(Row) If Col > 0 AND Row > 0 Then If bShowEvents Then Call LogFileWrite("XTable1_EventValGet Col = " & Col & " Row = " & Row & " IsInputCell = " & IsInputCell) Select Case Col Case 1 'CheckBox 'arrXTableRow = Array(Col 0, Col 1, Col 2, Col 3) arrXTableRow = oXTableDic(Row) Set oCheckbox = arrXTableRow(Col) Cell.Value = oCheckBox.iValue Cell.Text = oCheckBox.sText Cell.Enable = oCheckBox.bEnable Case 2 'EditBox arrXTableRow = oXTableDic(Row) Set oEditBox = arrXTableRow(Col) Cell.Text = oEditBox.sText Cell.Enable = oEditBox.bEnable Case 3 'ComboBox arrXTableRow = oXTableDic(Row) Set oComboBox = arrXTableRow(Col) Call Cell.Items.RemoveAll() For Each oItem In oComboBox.Items Call Cell.Items.Add(oItem.sKey, oItem.iValue) Next Cell.Value = oComboBox.iValue Cell.Enable = oComboBox.bEnable End Select Set oCheckBox = Nothing: Set oEditBox = Nothing: Set oComboBox = Nothing If IsArray(arrXTableRow) Then Call Erase(arrXTableRow) End If End Sub Sub XTable1_EventValChanged(ByRef This, Row, Col, ByRef Cell) 'Created Event Handler 'Triggered when a Cell is changed (CheckBox clicked, EditBox edited, ComboBox selection made). 'Update oXTableDic with the user changed made to XTable1 If bShowEvents Then Call LogFileWrite("XTable1_EventValChanged Col = " & Col & " Row = " & Row) If Col > 0 AND Row > 0 Then Dim oCheckBox, oEditBox, oComboBox, oItem Select Case Col Case 1 'CheckBox 'arrXTableRow = Array(Col 0, Col 1, Col 2, Col 3) arrXTableRow = oXTableDic(Row) Set oCheckbox = arrXTableRow(Col) oCheckBox.iValue = Cell.Value Set arrXTableRow(Col) = oCheckBox oXTableDic(Row) = arrXTableRow Case 2 'EditBox 'Validate the user input to the Cell. If Len(Cell.Text) > 0 Then arrXTableRow = oXTableDic(Row) Set oEditBox = arrXTableRow(Col) oEditBox.sText = Cell.Text Set arrXTableRow(Col) = oEditBox oXTableDic(Row) = arrXTableRow End If Case 3 'ComboBox arrXTableRow = oXTableDic(Row) Set oComboBox = arrXTableRow(Col) 'NOTE: New values (ComboBox editing) are processed by XTable1_EventValSet() If Cell.Items.Count = oComboBox.iCount Then 'ComboBox selection made by user oComboBox.iValue = Cell.Value End If Set arrXTableRow(Col) = oComboBox oXTableDic(Row) = arrXTableRow End Select Set oCheckBox = Nothing: Set oEditBox = Nothing: Set oComboBox = Nothing If IsArray(arrXTableRow) Then Call Erase(arrXTableRow) End If End Sub Sub XTable1_EventValSet(ByRef This, Row, Col, ByRef Cell) 'Created Event Handler 'Use XTable1_EventValGet to populate oXTableDic with data from XTable1 'Call LogFileWrite("XTable1_EventValSet Col = " & Col & " Row = " & Row) Dim oComboBox If Col > 0 AND Row > 0 Then Select Case Col Case 1,2 'CheckBox,EditBox, 'Nothing processed here. Case 3 'ComboBox 'If the user edits the ComboBox (adds something new), then process 'the new entry here. 'NOTE: In order for the ComboBox control to accept user editing, you ' must manually edit the control properties for 'Entry Control' ' and change the default Combo Type from '2 - StaticDropDown' to ' '1 EditableDropDown'. arrXTableRow = oXTableDic(Row) Set oComboBox = arrXTableRow(Col) If Not oComboBox.Exists(Cell.Text) AND Len(Cell.Text) > 0 Then Call oComboBox.Add(Cell.Text,oComboBox.iCount) oComboBox.iValue = oComboBox.iCount - 1 End If Set arrXTableRow(Col) = oComboBox oXTableDic(Row) = arrXTableRow If IsArray(arrXTableRow) Then Call Erase(arrXTableRow) Set oComboBox = Nothing 'EnableCheckBoxRowsIfRowContentsAreValid() is called by XTable1_EventValSet() and XTable1_EventCellClick() Call EnableCheckBoxRowsIfRowContentsAreValid() End Select End If End Sub Sub XTable1_EventToolTipShow(ByRef This, Row, Col, ByRef CellToolTip) 'Created Event Handler If bShowEvents Then Call LogFileWrite("XTable1_EventToolTipShow Col = " & Col & " Row = " & Row) Dim oCheckBox If Col > 0 AND Row > 0 Then Select Case Col Case 1 arrXTableRow = oXTableDic(Row) Set oCheckBox = arrXTableRow(Col) If oCheckBox.bEnable = True Then CellToolTip = "Click to enable save for this row " & Row Else CellToolTip = "You must make a ComboBox selection in order to enable row " & Row End If End Select End If End Sub Sub EnableCheckBoxRowsIfRowContentsAreValid() 'Enable the CheckBox (Col=1) for a row if the user has made a 'selection for the ComboBox (Col=3). 'Enable btn_Done if at least one CheckBox is checked. 'EnableCheckBoxRowsIfRowContentsAreValid() is called by XTable1_EventValSet() and XTable1_EventCellClick() Dim iRow, oCheckBox, oComboBox, iCount iCount = 0 For iRow = 1 To oXTableDic.Count arrXTableRow = oXTableDic(iRow) Set oCheckBox = arrXTableRow(1) If oCheckBox.iValue = 1 Then iCount = iCount + 1 Set oComboBox = arrXTableRow(3) If Not oComboBox.iValue = -1 Then oCheckBox.bEnable = True End If Set arrXTableRow(1) = oCheckBox oXTableDic(iRow) = arrXTableRow Call XTable1.Refresh() 'This updates xTable1 with the changes to oXTableDic Next Set oCheckBox = Nothing: Set oComboBox = Nothing If IsArray(arrXTableRow) Then Call Erase(arrXTableRow) If iCount > 0 Then btn_Done.Enable = True End Sub 'EnableCheckBoxRowsIfRowContentsAreValid() Sub XTable1_EventCellClick(ByRef This, Row, Col) 'Created Event Handler If bShowEvents Then Call LogFileWrite("XTable1_EventCellClick Col = " & Col & " Row = " & Row) 'EnableCheckBoxRowsIfRowContentsAreValid() is called by XTable1_EventValSet() and XTable1_EventCellClick() Call EnableCheckBoxRowsIfRowContentsAreValid() End Sub Sub XTable1_EventContextMenuPointSelected(ByRef This, Row, Col, MenuPoint) 'Created Event Handler If bShowEvents Then Call LogFileWrite("XTable1_EventContextMenuPointSelected() Col = " & Col & " Row = " & Row) End Sub Sub XTable1_EventContextMenuShowing(ByRef This, Row, Col, MenuPoints) 'Created Event Handler 'Add a new item to the context menu or submenu. 'Call MenuPoints.Add("Add Item",1) End Sub Sub XTable1_EventLostFocus(ByRef This) 'Created Event Handler If bShowEvents Then Call LogFileWrite("XTable1_EventLostFocus This.ActiveCellCol = "& This.ActiveCellCol & " This.ActiveCellRow = " & This.ActiveCellRow) End Sub Sub XTable1_EventRefresh(ByRef This) 'Created Event Handler If bShowEvents Then Call LogFileWrite("XTable1_EventRefresh " & This.ActiveCellCol & vbTab & This.ActiveCellRow) End Sub Sub XTable1_EventSelChanged(ByRef This) 'Created Event Handler If bShowEvents Then Call LogFileWrite("XTable1_EventSelChanged "& This.ActiveCellCol & vbTab & This.ActiveCellRow) End Sub '------------------------------------------------------------------------------- Class c_ComboBox 'An object to hold the data for a ListItem (ComboBox, ...) ' ' iCount - the number of ListItems ' iChars - the maximum number of characters for all of the sKey values. ' bEnable ' sText - sText and iValue relate the to currently selected value. ' iValue - If iValue = -1, no selection, otherwise 0 = first item, 1 = 2nd item, .. Private Sub Class_Initialize() bEnable_ = True iCount_ = 0 iChars_ = 0 iValue_ = -1 sText = "" End Sub 'Class_Initialize() Private Sub Class_Terminate() If IsArray(arrListItems) Then Call Erase(arrListItems) End Sub 'Class_Terminate '------------------------------------------------------------------------------- ' property bEnable Private bEnable_ Public Property Let bEnable(bEnable__) 'Assign a value to the property bEnable bEnable_ = bEnable__ End Property Public Property Get bEnable 'Read the property value bEnable bEnable = bEnable_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property iCount Private iCount_ Public Property Get iCount 'Read the read-only property value iCount iCount = iCount_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property iChars Private iChars_ Public Property Get iChars 'Read the read-only property value Chars iChars = iChars_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property iValue Private iValue_ Public Property Let iValue(iValue__) 'Assign a value to the property iValue iValue_ = iValue__ Dim oListItem, i i = 0 If IsArray(arrListItems) AND bArrayIsEmpty(arrListItems) = False Then If iValue__ > uBound(arrListItems) Then Call Err.Raise(65535,,"ERROR - the iValue of " & Str(iValue__) & " exceeds the maximum index for the ListItems (0 .." & Str(iCount_ - 1) & ")") For Each oListItem In arrListItems If i = iValue_ Then sText_ = oListItem.sKey Exit For End If i = i + 1 Next Else If iValue__ => 0 Then Call Err.Raise(65535,,"ERROR - the iValue of " & Str(iValue__) & " exceeds the number of ListItems") End If End Property Public Property Get iValue 'Read the property value iValue iValue = iValue_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property sText Private sText_ Public Property Let sText(sText__) 'Assign a value to the property sText sText_ = sText__ Dim oListItem, i i = 0 If IsArray(arrListItems) AND bArrayIsEmpty(arrListItems) = False Then iValue_ = -1 For Each oListItem In arrListItems If oListItem.sKey = sText__ Then iValue_ = i Exit For End If i = i + 1 Next If iValue_ = -1 Then Call Err.Raise(65535,,"ERROR - the sText of '" & Str(sText__) & "' does not exist in ListItems") Else If Len(sText__) > 0 Then Call Err.Raise(65535,,"ERROR - the sText of '" & Str(sText__) & "' does not exist in ListItems") End If End Property Public Property Get sText 'Read the property value sText sText = sText_ End Property '------------------------------------------------------------------------------- Private arrListItems ' Methods Public Function Add(ByVal sKey, ByVal iValue) If Len(sKey) = 0 Then Exit Function If IsEmpty(iValue) Then Exit Function If Len(sKey) > iChars_ Then iChars_ = Len(sKey) Dim oListItem Set oListItem = New c_ListItem If IsArray(arrListItems) AND bArrayIsEmpty(arrListItems) = False Then If Exists(sKey) Then Call Err.Raise(65535,,"ERROR - the sText of '" & Str(sKey) & "' already exists in ListItems. Use method Exists() to test for this.") Else oListItem.sKey = sKey oListItem.iValue = iValue ReDim Preserve arrListItems(uBound(arrListItems)+1) Set arrListItems(uBound(arrListItems)) = oListItem End If Else oListItem.sKey = sKey oListItem.iValue = iValue ReDim arrListItems(0) Set arrListItems(0) = oListItem End If iCount_ = uBound(arrListItems)+1 Set oListItem = Nothing End Function 'Add() Public Function Items() Items = arrListItems End Function 'Items() Public Function Remove(ByVal sKey) If Not IsArray(arrListItems) Then Exit Function End If Dim oListItem, arrListItemsCopy, i, bKeyExists, iCharsMax iCharsMax = 0 i = 0 bKeyExists = False i = 0 For Each oListItem In arrListItems If Len(oListItem.sKey) > iCharsMax Then iCharsMax = Len(oListItem.sKey) If StrComp(oListItem.sKey,sKey,vbTextCompare) = 0 Then bKeyExists = True 'Reset iValue because it currently points to the item to be removed. If iValue_ = i Then iValue_ = -1 sText_ = "" End If End If i = i + 1 Next iChars_ = iCharsMax If bKeyExists Then i = 0 ReDim arrListItemsCopy(uBound(arrListItems)-1) For Each oListItem In arrListItems If Not oListItem.sKey = sKey Then Set arrListItemsCopy(i) = oListItem i = i + 1 End If Next arrListItems = arrListItemsCopy iCount_ = uBound(arrListItems)+1 If IsArray(arrListItemsCopy) Then Call Erase(arrListItemsCopy) End If End Function 'Remove() Public Function RemoveAll() If IsArray(arrListItems) Then Call Erase(arrListItems) iCount_ = 0 iValue_ = -1 End Function 'RemoveAll() Public Function Exists(ByVal sKey) Exists = False If Not IsArray(arrListItems) Then Exit Function End If Dim oListItem, arrListItemsCopy, bKeyExists bKeyExists = False For Each oListItem In arrListItems If StrComp(oListItem.sKey,sKey,vbTextCompare) = 0 Then bKeyExists = True End If Next If bKeyExists Then Exists = True End Function 'Exists() End Class 'c_ComboBox '------------------------------------------------------------------------------- 'Call LogFileDel() 'Call Demo_C_ListItem() ' 'Sub Demo_C_ListItem() ' Dim oListItem ' Set oListItem = New c_ListItem ' oListItem.sKey = "A" ' oListItem.iValue = 10 ' Call LogFileWrite("sKey, iVal = " & oListItem.sKey & vbTab & oListItem.iValue) ' Set oListItem = Nothing 'End Sub 'Demo_C_ListItem() Class c_ListItem 'Provides for two properties, sKey and iValue corresponding to the properties for a ListItem. Private Sub Class_Initialize() End Sub 'Class_Initialize() Private Sub Class_Terminate() End Sub 'Class_Terminate '------------------------------------------------------------------------------- ' property sKey Private sKey_ Public Property Let sKey(sKey__) 'Assign a value to the property sKey sKey_ = sKey__ End Property Public Property Get sKey 'Read the property value sKey sKey = sKey_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property iValue Private iValue_ Public Property Let iValue(iValue__) 'Assign a value to the property iValue iValue_ = iValue__ End Property Public Property Get iValue 'Read the property value iValue iValue = iValue_ End Property '------------------------------------------------------------------------------- End Class 'c_ListItem Class C_EditBox ''bEnable, sText, bReadOnly Private Sub Class_Initialize() bEnable_ = True bReadOnly_ = False sText_ = "" End Sub 'Class_Initialize() Private Sub Class_Terminate() End Sub 'Class_Terminate '------------------------------------------------------------------------------- ' property sText Private sText_ Public Property Let sText(sText__) 'Assign a value to the property sText sText_ = sText__ End Property Public Property Get sText 'Read the property value sText sText = sText_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property bEnable Private bEnable_ Public Property Let bEnable(bEnable__) 'Assign a value to the property bEnable bEnable_ = bEnable__ End Property Public Property Get bEnable 'Read the property value bEnable bEnable = bEnable_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property bReadOnly Private bReadOnly_ Public Property Let bReadOnly(bReadOnly__) 'Assign a value to the property bReadOnly bReadOnly_ = bReadOnly__ End Property Public Property Get bReadOnly 'Read the property value bReadOnly bReadOnly = bReadOnly_ End Property '------------------------------------------------------------------------------- End Class 'C_EditBox Class C_Text ''bEnable, sText, iValue Private Sub Class_Initialize() bEnable_ = True iValue_ = 0 sText_ = "" End Sub 'Class_Initialize() Private Sub Class_Terminate() End Sub 'Class_Terminate '------------------------------------------------------------------------------- ' property sText Private sText_ Public Property Let sText(sText__) 'Assign a value to the property sText sText_ = sText__ End Property Public Property Get sText 'Read the property value sText sText = sText_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property bEnable Private bEnable_ Public Property Let bEnable(bEnable__) 'Assign a value to the property bEnable bEnable_ = bEnable__ End Property Public Property Get bEnable 'Read the property value bEnable bEnable = bEnable_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property iValue Private iValue_ Public Property Let iValue(iValue__) 'Assign a value to the property iValue iValue_ = iValue__ End Property Public Property Get iValue 'Read the property value iValue iValue = iValue_ End Property '------------------------------------------------------------------------------- End Class 'C_Text Class C_CheckBox 'bEnable sText iValue Private Sub Class_Initialize() bEnable_ = True iValue_ = 0 sText_ = "" End Sub 'Class_Initialize() Private Sub Class_Terminate() End Sub 'Class_Terminate '------------------------------------------------------------------------------- ' property sText Private sText_ Public Property Let sText(sText__) 'Assign a value to the property sText sText_ = sText__ End Property Public Property Get sText 'Read the property value sText sText = sText_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property bEnable Private bEnable_ Public Property Let bEnable(bEnable__) 'Assign a value to the property bEnable bEnable_ = bEnable__ End Property Public Property Get bEnable 'Read the property value bEnable bEnable = bEnable_ End Property '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- ' property iValue Private iValue_ Public Property Let iValue(iValue__) 'Assign a value to the property iValue iValue_ = iValue__ End Property Public Property Get iValue 'Read the property value iValue iValue = iValue_ End Property '------------------------------------------------------------------------------- End Class 'C_CheckBox 'Call LogFileDel() 'Dim arrItems 'ReDim arrItems(1) 'arrItems(0) = "One" 'arrItems(1) = "Two" 'Call LogFileWrite("IsArray() = " & IsArray(arrItems)) 'Call LogFileWrite("VarType(arrItems) = vbArray + vbVariant " & (VarType(arrItems) = vbArray + vbVariant)) 'Call LogFileWrite("VarType(arrItems) = " & VarType(arrItems)) 'Call LogFileWrite("bArrayIsEmpty() = " & bArrayIsEmpty(arrItems)) 'Call LogFileWrite(vbTab) 'If IsArray(arrItems) Then Call Erase(arrItems) 'Call LogFileWrite("IsArray() = " & IsArray(arrItems)) 'Call LogFileWrite("VarType(arrItems) = vbArray + vbVariant " & (VarType(arrItems) = vbArray + vbVariant)) 'Call LogFileWrite("VarType(arrItems) = " & VarType(arrItems)) 'Call LogFileWrite("bArrayIsEmpty() = " & bArrayIsEmpty(arrItems)) Function bArrayIsEmpty(ByVal arrArray) 'Returns TRUE if arrArray is an array, but empty. 'Returns FALSE if arrArray is not empty (has one or more values). 'You cannot execute uBound(), lBound() on an array that has been erased with: Call Erase(arrArray). 'This function allows you to determine if an array has been erased. 'Usage: ReDim arrArray() If IsArray(arrListItems) AND bArrayIsEmpty(arrListItems) = False Then bArrayIsEmpty = False Dim lErr, sErr, iUbound On Error Resume Next iUbound = uBound(arrArray) lErr = Err.number: sErr = Err.Description: On Error Goto 0 If lErr = 9 Then bArrayIsEmpty = True End If End Function 'bArrayIsEmpty() '------------------------------------------------------------------------------- Function sStrRandomAlphaChars(iLength) ' This function creates a string of random characters, both numbers ' and alpha, with a length of iLength. It uses Timer to seed the Rnd ' function. sStrRandomAlphaChars = "" Dim i, strCharBase, iPos strCharBase = "01234ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz56789" Randomize (Timer) For i = 1 To iLength iPos = Int((Len(strCharBase) - 1 + 1) * Rnd + 1) 'Call LogFileWrite(iPos & vbTab & "'" & Mid(strCharBase,iPos,1) & "'" & vbTab & "'" & sStrRandomAlphaChars & "'") sStrRandomAlphaChars = sStrRandomAlphaChars & Mid(strCharBase,iPos,1) Next End Function 'sStrRandomAlphaChars() '------------------------------------------------------------------------------- Sub Dialog_EventInitialize(ByRef This) 'Created Event Handler 'btn_Done is disabled by default until at least one CheckBox 'is checked. See EnableCheckBoxRowsIfRowContentsAreValid() btn_Done.Enable = False End Sub Sub Dialog_EventTerminate(ByRef This) 'Created Event Handler Call oXTableDic.RemoveAll: Set oXTableDic = Nothing End Sub Sub btn_Done_EventClick(ByRef This) 'Created Event Handler Call LogFileWrite(vbTab) Call LogFileWrite("btn_Done_EventClick") Dim oCheckBox, oEditBox, oComboBox, iRow Call LogFileWrite("iRow" & vbTab & "oCheckBox.iValue" & vbTab & "oEditBox.sText" & vbTab & "oComboBox.sText") For Each iRow In oXTableDic arrXTableRow = oXTableDic(iRow) Set oCheckBox = arrXTableRow(1) Set oEditBox = arrXTableRow(2) Set oComboBox = arrXTableRow(3) Call LogFileWrite(iRow & vbTab & oCheckBox.iValue & vbTab & oEditBox.sText & vbTab & "'" & oComboBox.sText & "'") Set oCheckBox = Nothing: Set oEditBox = Nothing: Set oComboBox = Nothing If IsArray(arrXTableRow) Then Call Erase(arrXTableRow) Next 'iRow End Sub '------------------------------------------------------------------------------- ÍͺÿÿÿÿÍͺÿþÿÿÿ ToBtnRteObÍͺÿþÿbtn_Done›¯æÈÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿDoneÍͺÿþÿÿÿÿÿÿÿÿÿÍͺÿþÿÿÿÿÿÍͺÍͺÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿbtn_Done_EventClickÍͺÍͺÍͺÿÿToVirtGridCtrlÍͺÿþÿXTable1æ¥Íͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventRefreshÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventInitializeÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventLostFocusÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÍͺÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventValGetÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventValSetÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventColCtrlPresetÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventSelChangedÍͺÿÿToStaticCtrlRtÍͺÿþÿnG«B‹G¹BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÍͺÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿÿÿÿcÿÿÿÿÍͺÿþÿ?ÍͺÿþÿÍͺÍͺÍͺÍͺÍͺÍͺ€ÍͺÿþÿnG«B§GµBÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÍͺÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿÿÿÿcÿÿÿÿÍͺÿþÿ?ÍͺÿþÿÍͺÍͺÍͺÍͺÍͺÍͺÍͺÍͺÿÿ ToCheckRtÍͺÿþÿnG«B©G¹BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿÿÿÿÿÿÿÿÿÍͺÿþÿÿÿÿÿÍͺÍͺÿþÿÿÿÿÿÍͺÿþÿ?ÍͺÍͺÍͺÍͺ €ÍͺÿþÿnG«B§G¶BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿÿÿÿÿÿÿÿÿÍͺÿþÿÿÿÿÿÍͺÍͺÿþÿÿÿÿÿÍͺÿþÿ?ÍͺÍͺÍͺÍͺÿþÿColumn1ÿÿÿÿÍͺÍͺÿÿ ToEditCtrlObÍͺÿþÿnG«B©G¹BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿÿÿÿÿÿÿÿÿÍͺÿþÿÍͺÍͺÍͺÍͺ €ÍͺÿþÿnG«B§G·BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿÿÿÿÿÿÿÿÿÍͺÿþÿÍͺ€ÍͺÍͺÍͺÿþÿColumn2ÿÿÿÿÍͺÍͺÿÿ ToComboRtÍͺÿþÿnG«B©G¹BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿÿÿÿÍͺÿþÿ ÍͺÿÿÿÿÿþÿÍͺÍͺÍͺÿþÿÿÿÿÿÍͺÍͺÍͺÍͺÍͺ€ÍͺÿþÿnG«B²G·BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿÿÿÿÍͺÿþÿ ÍͺÿÿÿÿÿþÿÍͺÍͺÍͺÿþÿÿÿÿÿÍͺÍͺÍͺÍͺÍͺÿþÿColumn3ÿÿÿÿÍͺÍͺ€ÍͺÿþÿnG«B©G¹BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÍͺÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿÿÿÿcÿÿÿÿÍͺÿþÿ?ÍͺÿþÿÍͺÍͺÍͺÍͺÍͺÍͺ€ÍͺÿþÿnG«B§GµBÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÍͺÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÍͺccÿÿÿÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿÿÿÿcÿÿÿÿÍͺÿþÿ?ÍͺÿþÿÍͺÍͺÍͺÍͺÍͺÍͺÍͺÍͺ €ÍͺÿþÿnG«B©G¹BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿÿÿÿÿÿÿÿÿÍͺÿþÿÍͺÍͺÍͺÍͺ €ÍͺÿþÿnG«B§G·BÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿþÿ1¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÿÿÿþÿÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿÿÿÿÿÿÿÿÿÍͺÿþÿÍͺ€ÍͺÍͺÍͺÿþÿ< Íͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventCellClickÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventToolTipShowÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventValChanged ÿÿÿÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿ€Íͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿXTable1_EventContextMenuShowingÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿ%XTable1_EventContextMenuPointSelectedÿÿ ToSudViewObÍͺÿÿÿÿð?ÿÿXÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿDialog_EventInitializeÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿDialog_EventTerminateÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿ(Declarations)ÍͺÿþÿÿþÿÿþÿDLG1ÍͺÿþÿDefaultÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿþÿ0.0¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÿÿÿÿÿþÿ¥¥¥¥ÿþÿÍͺÍͺ