home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 February / PCWK0297.iso / envelop / envelop.3 / Program / dbtools.eto < prev    next >
Text File  |  1996-07-08  |  133KB  |  3,968 lines

  1.  
  2. Type DatabaseConstants From Globals
  3.   Dim DBC_READ_ONLY As Integer
  4.   Dim DBC_READ_WRITE As Integer
  5.   Dim DBC_LABEL As Integer
  6.   Dim DBC_NO_CHANGE As Long
  7.   Dim DBC_ALL As Integer
  8.  
  9.   ' METHODS for object: DatabaseConstants
  10.   Function DeSpace(ByVal OldStr as String) As String
  11.     Dim i as integer
  12.     i = 0
  13.     While i <= Len(OldStr)
  14.       If Mid$(OldStr, i, 1) = " " Then 
  15.         OldStr = Left$(OldStr, i - 1) & Right$(OldStr, Len(OldStr) - i)
  16.       Else 
  17.         i = i + 1
  18.       End If
  19.     Wend
  20.     DeSpace = OldStr
  21.   
  22.   End Function
  23.  
  24. End Type
  25.  
  26. Type DataBaseFormMaker
  27.   Dim DBFMForm As Form
  28.   Dim DBFMRecordSet As RecordSet
  29.   Dim CurrentY As Long
  30.   Dim Margin As Long
  31.   Declare Function GetTabbedTextExtent Lib "User32.dll" Alias "GetTabbedTextExtentA" (ByVal hdc As Long, ByVal lpsz As String, ByVal cchString As Long, ByVal nTabPos As Long, ByVal lpnTabStopPos As Long) As Long
  32.   Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hFont As Long) As Long
  33.   Declare Function GetStockObject Lib "gdi32" (ByVal fnObject) As Long
  34.   Type FieldOptions
  35.     Dim CanEdit As Boolean
  36.     Dim FieldName As String
  37.     Dim MaxLength As Integer
  38.     Dim Width As Integer
  39.     Dim Caption As String
  40.  
  41.     ' METHODS for object: DataBaseFormMaker.FieldOptions
  42.     Sub Report
  43.       Debug.Print "-----------------------------------------------"
  44.       Debug.Print "CanEdit ---- " & IIf(CanEdit, "True", "False")
  45.       Debug.Print "Caption ---- " & Caption
  46.       Debug.Print "FieldName -- " & FieldName
  47.       Debug.Print "MaxLength -- " & MaxLength
  48.       Debug.Print "Width ------ " & Width
  49.       Debug.Print "-----------------------------------------------"
  50.     End Sub
  51.  
  52.   End Type
  53.   Type OptionGroup From Group
  54.  
  55.     ' METHODS for object: DataBaseFormMaker.OptionGroup
  56.     Function Report(pos as integer) As String
  57.       Dim StackString, endl as string
  58.       endl = "^J^M"
  59.       StackString = "Report for position " & pos & endl
  60.       If pos >= Count Then 
  61.         StackString = StackString & "Out of range " & endl
  62.       Else 
  63.         StackString = StackString & "CanEdit: " & IIf(ObjectAt(pos).CanEdit, "True", "False") & endl
  64.         StackString = StackString & "Include: " & IIf(ObjectAt(pos).Include, "True", "False") & endl
  65.         StackString = StackString & "FieldName: " & ObjectAt(pos).FieldName & endl
  66.       End If
  67.       Report = StackString
  68.     
  69.     End Function
  70.  
  71.     Function SpecialField(pos as integer) As Object
  72.       Dim i as integer
  73.       If Count Then 
  74.         For i = 0 To Count - 1
  75.           If ObjectAt(i).Position = pos Then 
  76.             SpecialField = ObjectAt(i)
  77.             Exit Function
  78.           End If
  79.         Next i
  80.       End If
  81.       SpecialField = Nothing
  82.     End Function
  83.  
  84.   End Type
  85.   Dim DBLblFont As Font
  86.   Dim DBRWFont As Font
  87.   Dim DBROFont As Font
  88.   Dim LblBackColor As Long
  89.   Dim LblForeColor As Long
  90.   Dim DBROForeColor As Long
  91.   Dim DBROBackColor As Long
  92.   Dim DBRWBackColor As Long
  93.   Dim DBRWForeColor As Long
  94.   Dim DefaultFont As New Font
  95.   Dim SystemFont As Long
  96.   Dim LabelWidth As Integer
  97.   Dim LabelHeight As Integer
  98.   Dim DBFieldHeight As Integer
  99.   Dim DBROMaxCharWidth As Integer
  100.   Dim DBRWMaxCharWidth As Integer
  101.   Dim HyperWidth As Long
  102.   Dim LblFldHeight As Long
  103.  
  104.   ' METHODS for object: DataBaseFormMaker
  105.   Sub GetFontDims(ByVal TForm as Form, ByVal TFont as Font, ByVal Tstr as string, wid as integer, hei as integer)
  106.     ' WARNING: This method will do the SelectObject with on the Form with the
  107.     ' font, and not restore the original font. BE WARNED
  108.  
  109.     If TForm && TForm.hDC Then
  110.       SelectObject(TForm.hDC, IIF(TFont && TFont.HFont, TFont.HFont, SystemFont))
  111.       GetTextExtent(TForm.hDC, Tstr, wid, hei)
  112.     End If
  113.   End Sub
  114.  
  115.   Function SetReferences(o as RecordSet) As Long
  116.     Dim flag as Boolean
  117.     Dim Pointer as Object
  118.     
  119.     DBFMRecordSet = o
  120.     Pointer = o
  121.  
  122.     While Pointer && Not(TypeOf Pointer is Form)
  123.       Pointer = HostObject(Pointer)
  124.     Wend
  125.  
  126.     If Pointer then
  127.       DBFMForm = IIF(TypeOf Pointer is DataControl, HostObject(Pointer), Pointer)
  128.       SetReferences = True
  129.     Else
  130.       SetReferences = False
  131.     End If
  132.  
  133.     If DBFMForm && DBFMForm.Font && DBFMForm.Font.HFont Then
  134.        SystemFont = DBFMForm.Font.HFont
  135.     Else
  136.         SystemFont = GetStockObject(13) 'SYSTEM_FONT = 13
  137.         If SystemFont = 0 Then SystemFont = DefaultFont.HFont
  138.     End If
  139.  
  140.   End Function
  141.  
  142.   Sub BuildGroup
  143.     Dim i as integer
  144.     OptionGroup.Clear
  145.     If DBFMRecordSet && DBFMRecordSet.FieldCount Then 
  146.       With DBFMRecordSet
  147.         For i = 0 To .FieldCount - 1
  148.           Dim Blank as DataBaseFormMaker.FieldOptions
  149.           Blank = CopyObject(DataBaseFormMaker.FieldOptions, "")
  150.           Blank.CanEdit = True
  151.           Blank.Include = True
  152.           .FieldIndex = i
  153.           Blank.FieldName = .FieldName
  154.           Blank.MaxLength = .FieldMaxLength
  155.           Blank.Position = i
  156.           OptionGroup.Append(Blank)
  157.         Next i
  158.       End With
  159.     End If
  160.   End Sub
  161.  
  162.   Function CalculateWidth(OldObj as Control, NewObj as Control) As Long
  163.     If OldObj.MaxLength = 0 Then 
  164.       CalculateWidth = OldObj.Width
  165.     Else 
  166.       If TypeOf NewObj Is DatabaseReadOnlyField Then 
  167.         CalculateWidth = (OldObj.MaxLength + 2) * DBROMaxCharWidth
  168.       Else 
  169.         CalculateWidth = (OldObj.MaxLength + 2) * DBRWMaxCharWidth
  170.       End If
  171.     End If
  172.   End Function
  173.  
  174.   Sub ClearColors
  175.     LblBackColor = -1
  176.     LblForeColor = -1
  177.     DBROBackColor = RGB(255, 255, 255)
  178.     DBROForeColor = -1
  179.     DBRWBackColor = -1
  180.     DBRWForeColor = -1
  181.   End Sub
  182.  
  183.   Sub CreateSet(pos as integer)
  184.     Dim Opts as DataBaseFormMaker.FieldOptions
  185.     Dim Lbl, Tb as Object
  186.  
  187.     Opts = OptionGroup(pos)
  188.     If Opts.CanEdit Then 
  189.       Tb = EmbedObject(DBFMForm, DatabaseReadWriteField, UniqueEmbedName(DBFMForm, "DBRW" & DeSpace(Opts.FieldName)))
  190.     Else 
  191.       Tb = EmbedObject(DBFMForm, DatabaseReadOnlyField, UniqueEmbedName(DBFMForm, "DBRO" & DeSpace(Opts.FieldName)))
  192.     End If
  193.     ' If Width is specified, use it, otherwise use old methods
  194.     If Opts.Width Then 
  195.       Tb.Move(LabelWidth + (2 * Margin), CurrentY + ((LblFldHeight - DBFieldHeight) / 2) + Margin, Opts.Width, DBFieldHeight)
  196.     Else 
  197.       If Opts.MaxLength Then 
  198.         Tb.Move(LabelWidth + (2 * Margin), CurrentY + ((LblFldHeight - DBFieldHeight) / 2) + Margin, ((Opts.MaxLength + 2) * IIf(Opts.CanEdit, DBRWMaxCharWidth, DBROMaxCharWidth)), DBFieldHeight)
  199.       Else 
  200.         Tb.Move(LabelWidth + (2 * Margin), CurrentY + ((LblFldHeight - DBFieldHeight) / 2) + Margin, HyperWidth - Margin - LabelWidth, DBFieldHeight)
  201.       End If
  202.     End If
  203.     If Opts.Caption <> "" Then 
  204.       Lbl = EmbedObject(DBFMForm, DatabaseLabel, UniqueEmbedName(DBFMForm, "DBLbl" & DeSpace(Opts.FieldName)))
  205.       Lbl.Move(Margin, CurrentY + Margin + ((LblFldHeight - LabelHeight) / 2) , LabelWidth, LabelHeight)
  206.       Lbl.Caption = Opts.Caption & ":"
  207.     End If
  208.     Tb.MaxLength = Opts.MaxLength
  209.     CurrentY = CurrentY + LblFldHeight + Margin
  210.     Tb.DataField = Opts.FieldName
  211.     Tb.IndexPosition = pos
  212.     Tb.ZOrder = 32767
  213.   End Sub
  214.  
  215.   Sub DestroyControls
  216.     Dim o as Control
  217.     If DBFMRecordSet = Nothing Then Exit Sub
  218.     For Each o In DBFMRecordSet.Controls
  219.       DestroyObject(o)
  220.     Next o
  221.   End Sub
  222.  
  223.   Sub GetTextExtent(dc As Long, s As String, width, height as Integer)
  224.     dim result as long
  225.   
  226.     result = GetTabbedTextExtent(dc, s, Len(s), 0, 0)
  227.     ' The results are stored in the upper word and lower word of return value as pixels,
  228.     ' convert these numbers to twips before returning.
  229.     width = (result And &Hffff) * Screen.TwipsPerPixelX
  230.     height = ((result And &Hffff0000) / &H10000) * Screen.TwipsPerPixelY
  231.   End Sub
  232.  
  233.   Sub Go
  234.     Dim i as integer
  235.     Dim OldSMode, OldSHeight, OldSLeft, OldSTop, OldSWidth as single
  236.  
  237.     ' Verify the existence of the Form and the RecordSet
  238.     If Not DBFMForm Then 
  239.       InfoBox.SetIconStop
  240.       InfoBox.Message("Fatal Error", "You must have the DBFMForm reference set")
  241.       Exit Sub
  242.     End If
  243.     If Not DBFMRecordSet Then 
  244.       InfoBox.SetIconStop
  245.       InfoBox.Message("Fatal Error", "You must have the DBFMRecordSet reference set")
  246.       Exit Sub
  247.     End If
  248.  
  249.     ' Cache away the old ScaleMode
  250.     With DBFMForm
  251.       OldSMode = .ScaleMode
  252.       If OldSMode = 0 then
  253.     OldSLeft = .ScaleLeft
  254.     OldSTop = .ScaleTop
  255.     OldSWidth = .ScaleWidth
  256.     OldSHeight = .ScaleHeight
  257.       End If
  258.  
  259.       ' Set ScaleMode to twips, and set the top left corner to avoid bevels
  260.       .ScaleMode = "Twip"
  261.       If .BevelInner <> 0 Then
  262.         .ScaleLeft = .ScaleLeft + (.BevelWidth * Screen.TwipsPerPixelX)
  263.         .ScaleTop = .ScaleTop + (.BevelWidth * Screen.TwipsPerPixelY)
  264.       End If
  265.       If .BevelOuter <> 0 Then
  266.         .ScaleLeft = .ScaleLeft + (.BevelWidth * Screen.TwipsPerPixelX)
  267.         .ScaleTop = .ScaleTop + (.BevelWidth * Screen.TwipsPerPixelY)
  268.       End If
  269.       .ScaleLeft = .ScaleLeft + (.BorderWidth * Screen.TwipsPerPixelX)
  270.       .ScaleTop = .ScaleTop + (.BorderWidth * Screen.TwipsPerPixelY)
  271.     End With
  272.  
  273.     ' Whatever CurrentY is initialized to is where the layout will begin (top)
  274.     ' (Although a margin will be added above the first control)
  275.     CurrentY = 0
  276.  
  277.     ' HyperWidth will be the MAXIMUM TOTAL Width of the layout from the left of the labels
  278.     ' To the right of any Fields with no MaxChar and no specified width
  279.     ' For now, we're using the ScaleWidth of the form (which we just set to twips twips)
  280.     ' Then subtract Double the BevelWidth if BevelInner or Outer is set, double the
  281.     ' BorderWidth, and two margins
  282.     DBFMForm.Show
  283.     With DBFMForm
  284.       HyperWidth = .ScaleWidth - 2 * Margin
  285.       HyperWidth = HyperWidth - IIF(.BevelInner > 0, (2 * .BevelWidth * Screen.TwipsPerPixelX), 0)
  286.       HyperWidth = HyperWidth - IIF(.BevelOuter > 0, (2 * .BevelWidth * Screen.TwipsPerPixelX), 0)
  287.       HyperWidth = HyperWidth - (2 * .BorderWidth * Screen.TwipsPerPixelX)
  288.     End With
  289.     ' Figure out Label and Textbox Widths
  290.     SetLabelDims
  291.     SetTemplate
  292.     For i = 0 To OptionGroup.Count - 1
  293.       CreateSet(i)
  294.     Next i
  295.     ResetTemplates
  296.     RecordSet.MoveLast
  297.     RecordSet.MoveFirst
  298.  
  299.     ' Restore the ScaleMode
  300.     DBFMForm.ScaleMode = OldSMode
  301.     If OldSMode = 0 then
  302.       DBFMForm.ScaleLeft = OldSLeft
  303.       DBFMForm.ScaleTop = OldSTop
  304.       DBFMForm.ScaleWidth = OldSWidth
  305.       DBFMForm.ScaleHeight = OldSHeight
  306.     End If 
  307.   End Sub
  308.  
  309.   Function LocateObjectByField(field as string) As Object
  310.     Dim o as Control
  311.     For Each o EmbeddedIn DBFMForm
  312.       If DBFMRecordSet = o.DataSource && o.DataField = field Then 
  313.         LocateObjectByField = o
  314.         Exit Function
  315.       End If
  316.     Next o
  317.     Throw CouldNotFindField
  318.   End Function
  319.  
  320.   Sub Modify(ByVal element as integer, ByVal NewBackColor as long, ByVal NewForeColor as long, NewFont as Font)
  321.     ' This algorithm is designed so that if Nothing is passed as the
  322.     ' last parameter, the font will not be changed. Also if DBC_NO_CHANGE
  323.     ' is passed for NewBackColor or NewForeColor, those values will
  324.     ' not be changed
  325.   
  326.     ' The algorithm will only change controls embedded in the form
  327.     ' pointed to by the DBFMForm reference who's DataSource is set to
  328.     ' the DBFMRecordSet pointed at by the DBFMRecordSet reference
  329.     Select Case element
  330.       Case DBC_READ_ONLY
  331.         Dim o as DatabaseReadOnlyField
  332.         For Each o EmbeddedIn DBFMForm
  333.           UpdateElement(o, NewBackColor, NewForeColor, NewFont)
  334.         Next o
  335.       Case DBC_READ_WRITE
  336.         Dim o as DatabaseReadWriteField
  337.         For Each o EmbeddedIn DBFMForm
  338.           UpdateElement(o, NewBackColor, NewForeColor, NewFont)
  339.         Next o
  340.       Case DBC_LABEL
  341.         Dim o as DatabaseLabel
  342.         For Each o EmbeddedIn DBFMForm
  343.           UpdateElement(o, NewBackColor, NewForeColor, NewFont)
  344.         Next o
  345.       Case Else
  346.         Throw InvalidElement
  347.     End Select
  348.   End Sub
  349.  
  350.   Sub ReconstructGroup()
  351.     Dim i as integer
  352.     Dim DataField, DataLabel as object
  353.     Dim o(100) as object
  354.     Dim OldSMode, OldSHeight, OldSLeft, OldSTop, OldSWidth as single
  355.     If Not DBFMRecordSet Then Throw NoDBFMRecordSet
  356.     If DBFMRecordSet.Controls.Count = 0 Then Throw EmptyDBFMRecordSet
  357.     If DBFMRecordSet.FieldCount > 100 then Redim o(DBFMRecordSet.FieldCount)
  358.  
  359.     ' Cache away the old ScaleMode
  360.     OldSMode = DBFMForm.ScaleMode
  361.     If OldSMode = 0 then
  362.       OldSLeft = DBFMForm.ScaleLeft
  363.       OldSTop = DBFMForm.ScaleTop
  364.       OldSWidth = DBFMForm.ScaleWidth
  365.       OldSHeight = DBFMForm.ScaleHeight
  366.     End If
  367.  
  368.     ' Set ScaleMode to twips
  369.     DBFMForm.ScaleMode = "Twip"
  370.  
  371.     OptionGroup.Clear
  372.     For i = 0 To DBFMRecordSet.Controls.Count - 1
  373.       Dim FO as DataBaseFormMaker.FieldOptions
  374.       FO = CopyObject(DataBaseFormMaker.FieldOptions, "")
  375.       ' I'm depending on FieldOptions Defaults as CanEdit = True, and MaxLength = 0 (unlimited)
  376.       DataField = DBFMRecordSet.Controls(i)
  377.       ' We're building the list based on the Field controls, not the labels (We get the label from the Fields)
  378.       If Not TypeOf DataField Is DatabaseLabel Then 
  379.         If DataField.Parent Then DataLabel = FindEmbed(DataField.Parent, "DBLbl" & Right$(DataField.Name, Len(DataField.Name) - 4))
  380.         If TypeOf DataField Is DatabaseReadOnlyField Then FO.CanEdit = False
  381.         FO.MaxLength = DataField.MaxLength
  382.         ' Need to make a "guess" at width here as follows:
  383.         If FO.MaxLength <> 0 Then 
  384.           If DataField.Width <> (IIf(FO.CanEdit, DBRWMaxCharWidth, DBROMaxCharWidth) * (FO.MaxLength + 2)) Then 
  385.             FO.Width = DataField.Width
  386.           Else 
  387.             FO.Width = 0
  388.           End If
  389.         Else 
  390.           ' MaxLength = 0,
  391.           ' This part is left out until I decide where/if I want to store HyperWidth
  392.           If DataField.Width <> HyperWidth - LabelWidth - Margin Then 
  393.             FO.Width = DataField.Width
  394.           Else 
  395.             FO.Width = 0 ' 'I think
  396.           End If
  397.         End If
  398.         FO.Caption = IIf(DataLabel <> Nothing, Left$(DataLabel.Caption, Len(DataLabel.Caption) - 1), "*~!~*")
  399.         FO.FieldName = DataField.DataField
  400.         o(DataField.IndexPosition) = FO
  401.       End If
  402.     Next i
  403.     For i = 0 to DBFMRecordSet.FieldCount
  404.       If o(i) then OptionGroup.Append(o(i))
  405.     Next i
  406.    
  407.     ' Restore the ScaleMode
  408.     DBFMForm.ScaleMode = OldSMode
  409.     If OldSMode = 0 then
  410.       DBFMForm.ScaleLeft = OldSLeft
  411.       DBFMForm.ScaleTop = OldSTop
  412.       DBFMForm.ScaleWidth = OldSWidth
  413.       DBFMForm.ScaleHeight = OldSHeight
  414.     End If 
  415.   End Sub
  416.  
  417.   Sub Refresh(element As Integer)
  418.     Select Case element
  419.       Case DBC_READ_ONLY
  420.         Modify(element, DBROBackColor, DBROForeColor, DBROFont)
  421.       Case DBC_READ_WRITE
  422.         Modify(element, DBRWBackColor, DBRWForeColor, DBRWFont)
  423.       Case DBC_LABEL
  424.         Modify(element, LblBackColor, LblForeColor, DBLblFont)
  425.       Case DBC_ALL
  426.         Modify(DBC_READ_ONLY, DBROBackColor, DBROForeColor, DBROFont)
  427.         Modify(DBC_READ_WRITE, DBRWBackColor, DBRWForeColor, DBRWFont)
  428.         Modify(DBC_LABEL, LblBackColor, LblForeColor, DBLblFont)
  429.     End Select
  430.   End Sub
  431.  
  432.   Sub ResetTemplates
  433.     With DatabaseReadOnlyField
  434.       .BackColor = RGB(255, 255, 255)
  435.       .ForeColor = -1
  436.       .Font = Nothing
  437.       .DataSource = Nothing
  438.     End With
  439.     With DatabaseReadWriteField
  440.       .BackColor = -1
  441.       .ForeColor = -1
  442.       .Font = Nothing
  443.       .DataSource = Nothing
  444.     End With
  445.     With DatabaseLabel
  446.       .BackColor = -1
  447.       .ForeColor = -1
  448.       .Font = Nothing
  449.       .DataSource = Nothing
  450.     End With
  451.   End Sub
  452.  
  453.   Sub SetLabelDims
  454.     Dim i as integer
  455.     Dim x,y as integer
  456.     Dim OldSMode, OldSHeight, OldSLeft, OldSTop, OldSWidth as single
  457.     Dim junk as integer
  458.  
  459.     ' Cache away the old ScaleMode
  460.     OldSMode = DBFMForm.ScaleMode
  461.     If OldSMode = 0 then
  462.       OldSLeft = DBFMForm.ScaleLeft
  463.       OldSTop = DBFMForm.ScaleTop
  464.       OldSWidth = DBFMForm.ScaleWidth
  465.       OldSHeight = DBFMForm.ScaleHeight
  466.     End If
  467.  
  468.     ' Set ScaleMode to twips
  469.     DBFMForm.ScaleMode = "Twip"
  470.  
  471.     If DBLblFont Then 
  472.       SelectObject(DBFMForm.hDC, DBLblFont.HFont)
  473.     Else 
  474.       SelectObject(DBFMForm.hDC, SystemFont)
  475.     End If
  476.     LabelWidth = 0
  477.     LabelHeight = 0
  478.     DBFieldHeight = 0
  479.     LblFldHeight = 0
  480.     With OptionGroup
  481.       For i = 0 To .Count - 1
  482.         GetTextExtent(DBFMForm.hDC, .ObjectAt(i).Caption & ":", x, y)
  483.         x = x + (Margin)
  484.         If LabelWidth < x Then LabelWidth = x
  485.       Next i
  486.       ' Set defaults for MaxCharWidth and LabelHeight
  487.       GetTextExtent(DBFMForm.hDC, "M", x, LabelHeight)
  488.       GetTextExtent(DBFMForm.hDC, "hj", junk, LabelHeight)
  489.       LblFldHeight = LabelHeight
  490.     End With
  491.     ' Insure that we're large enough for DataLabels
  492.     If DBROFont Then 
  493.       SelectObject(DBFMForm.hDC, DBROFont.HFont)
  494.       GetTextExtent(DBFMForm.hDC, "M", x, y)
  495.       GetTextExtent(DBFMForm.hDC, "hj", junk, y)
  496.     Else 
  497.       SelectObject(DBFMForm.hDC, SystemFont)
  498.       GetTextExtent(DBFMForm.hDC, "M", DBROMaxCharWidth, y)
  499.       GetTextExtent(DBFMForm.hDC, "hj", junk, y)
  500.     End If
  501.     DBFieldHeight = IIf(DBFieldHeight < y, y, DBFieldHeight)
  502.     DBROMaxCharWidth = x
  503.     ' Insure that we're large enough for TextBoxes
  504.     If DBRWFont Then 
  505.       SelectObject(DBFMForm.hDC, DBRWFont.HFont)
  506.       GetTextExtent(DBFMForm.hDC, "M", x, y)
  507.       GetTextExtent(DBFMForm.hDC, "hj", junk, y)
  508.     Else 
  509.       SelectObject(DBFMForm.hDC, SystemFont)
  510.       GetTextExtent(DBFMForm.hDC, "M", DBRWMaxCharWidth, y)
  511.       GetTextExtent(DBFMForm.hDC, "hj", junk, y)
  512.     End If
  513.     DBFieldHeight = IIf(DBFieldHeight < y, y, DBFieldHeight)
  514.     DBRWMaxCharWidth = x
  515.     ' For our fudge factor, tack on 6 extra pixels
  516.     DBFieldHeight = DBFieldHeight + 6 * Screen.TwipsPerPixelY
  517.     LblFldHeight = IIf(DBFieldHeight > LblFldHeight, DBFieldHeight, LblFldHeight)
  518.     ' Restore the ScaleMode
  519.     DBFMForm.ScaleMode = OldSMode
  520.     If OldSMode = 0 then
  521.       DBFMForm.ScaleLeft = OldSLeft
  522.       DBFMForm.ScaleTop = OldSTop
  523.       DBFMForm.ScaleWidth = OldSWidth
  524.       DBFMForm.ScaleHeight = OldSHeight
  525.     End If
  526.   End Sub
  527.  
  528.   Sub SetTemplate
  529.     With DatabaseReadOnlyField
  530.       .BackColor = DBROBackColor
  531.       .ForeColor = DBROForeColor
  532.       .Font = DBROFont
  533.       .DataSource = DBFMRecordSet
  534.     End With
  535.     With DatabaseReadWriteField
  536.       .BackColor = DBRWBackColor
  537.       .ForeColor = DBRWForeColor
  538.       .Font = DBRWFont
  539.       .DataSource = DBFMRecordSet
  540.     End With
  541.     With DatabaseLabel
  542.       .BackColor = LblBackColor
  543.       .ForeColor = LblForeColor
  544.       .Font = DBLblFont
  545.       .DataSource = DBFMRecordSet
  546.     End With
  547.   End Sub
  548.  
  549.   Function SwapName(OldName as string) As String
  550.     Dim StackString as string
  551.     StackString = "DBR"
  552.     StackString = StackString & IIf(Mid$(OldName, 4, 1) = "O", "W", "O")
  553.     SwapName = StackString & Right$(OldName, Len(OldName) - 4)
  554.   End Function
  555.  
  556.   Sub ToggleReadOnly(pos as integer)
  557.     Dim OldObj, NewObj as Object
  558.     Dim OldName as string
  559.     Dim OldZOrder as Integer
  560.     SetTemplate
  561.     OldObj = LocateObjectByField(OptionGroup(pos).FieldName)
  562.     OldZOrder = OldObj.ZOrder
  563.     If TypeOf OldObj Is DatabaseReadOnlyField Then 
  564.       NewObj = EmbedObject(DBFMForm, DatabaseReadWriteField, UniqueEmbedName(DBFMForm, "Temp"))
  565.     Else 
  566.       NewObj = EmbedObject(DBFMForm, DatabaseReadOnlyField, UniqueEmbedName(DBFMForm, "Temp"))
  567.     End If
  568.     NewObj.DataSource = DBFMRecordSet
  569.     NewObj.DataField = OldObj.DataField
  570.     NewObj.MaxLength = OldObj.MaxLength
  571.     NewObj.IndexPosition = OldObj.IndexPosition
  572.     NewObj.Move(OldObj.Left, OldObj.Top, OldObj.Width, OldObj.Height)
  573.     OldName = OldObj.Name
  574.     DestroyObject(OldObj)
  575.     NewObj.Name = SwapName(OldName)
  576.     NewObj.ZOrder = OldZOrder
  577.     ResetTemplates
  578.   End Sub
  579.  
  580.   Sub UpdateElement(o as Object, NewBackColor as long, NewForeColor as long, NewFont as Object)
  581.     If o.DataSource = DBFMRecordSet Then 
  582.       With o
  583.         If NewBackColor <> DBC_NO_CHANGE Then .BackColor = NewBackColor
  584.         If NewForeColor <> DBC_NO_CHANGE Then .ForeColor = NewForeColor
  585.         If NewFont Then .Font = NewFont
  586.       End With
  587.     End If
  588.   End Sub
  589.  
  590. End Type
  591.  
  592. Type QBEDataSourceName From Form
  593.   Dim DataSourceList As New ListBox
  594.   Dim CancelBttn As New Button
  595.   Dim ConnectButton As New Button
  596.   Dim TablesButton As New Button
  597.   Dim TableList As New ListBox
  598.   Dim QueryObject As Database
  599.   Dim ConnectTextBox As New TextBox
  600.   Dim ConnectLabel As New Label
  601.   Dim DataSourceLabel As New Label
  602.   Dim TableListLabel As New Label
  603.   Dim Processing As Integer
  604.   Dim Canceled As Integer
  605.  
  606.   ' METHODS for object: QBEDataSourceName
  607.   Sub CancelBttn_Click()
  608.     Canceled = 1
  609.     QueryObject.Close()
  610.     Processing = 0
  611.     Hide
  612.   End Sub
  613.  
  614.   Sub Connect(q as Database)
  615.     dim i as integer
  616.     Processing = 1
  617.     Canceled = 0
  618.     Show
  619.     DataSourceList.Clear
  620.     TableList.Clear
  621.     ConnectTextBox.Text = ""
  622.     q.UpdateDataSources()
  623.     While (i < q.DataSourceCount)
  624.       q.DataSourceIndex = i
  625.       DataSourceList.AddItem(q.DataSourceName)
  626.       i = i + 1
  627.     Wend
  628.     DataSourceList.Refresh()
  629.     QueryObject = q
  630.   End Sub
  631.  
  632.   Sub ConnectButton_Click()
  633.     QueryObject.Connect = ConnectTextBox.Text
  634.     Hide
  635.     Processing = 0
  636.   End Sub
  637.  
  638.   Sub ConnectModal(q as Database)
  639.     dim i as integer
  640.     DataSourceList.Clear
  641.     While (i < q.DataSourceCount)
  642.       DataSourceIndex = i
  643.       DataSourceList.AddItem(q.DataSourceName)
  644.       i = i + 1
  645.     Wend
  646.     QueryObject = q
  647.   End Sub
  648.  
  649.   Sub DataSourceList_Click()
  650.     dim connectString as string
  651.     connectString = "dsn=" & DataSourceList.Text
  652.     ConnectTextBox.Text = connectString
  653.   End Sub
  654.  
  655.   Sub TablesButton_Click()
  656.     dim i as integer
  657.     TableList.Clear
  658.     ' If there is a current selection, find available tables
  659.     If DataSourceList.ListIndex <> -1 Then 
  660.       QueryObject.ConnectString = ConnectTextBox.Text
  661.       While (i < QueryObject.TableCount)
  662.         QueryObject.TableIndex = i
  663.         TableList.AddItem(QueryObject.TableName)
  664.         i = i + 1
  665.       Wend
  666.     End If
  667.   End Sub
  668.  
  669. End Type
  670.  
  671. Type QBETableData From Form
  672.   Dim FieldsList As New ListBox
  673.   Dim TablesList As New ComboBox
  674.   Dim DB As ODBC
  675.  
  676.   ' METHODS for object: QBETableData
  677.   Sub GetTables()
  678.     dim i as integer
  679.     TablesList.Clear
  680.     For i = 0 To DB.TableCount - 1
  681.       DB.TableIndex = i
  682.       TablesList.InsertItem(DB.TableName, TablesList.ListCount)
  683.     Next i
  684.     TablesList.ListIndex = 0
  685.   End Sub
  686.  
  687.   Sub MoveLeft()
  688.     Left = Left - ScaleWidth
  689.   End Sub
  690.  
  691.   Sub MoveRight()
  692.     Left = Left + ScaleWidth
  693.   End Sub
  694.  
  695.   Sub Resize()
  696.     TablesList.Move(0, 0, ScaleWidth, TablesList.Height)
  697.     FieldsList.Move(0, TablesList.Height, ScaleWidth, ScaleHeight - TablesList.Height)
  698.   End Sub
  699.  
  700.   Sub ScrollPosition(amt as Integer)
  701.     Left = Left + amt
  702.   End Sub
  703.  
  704.   Sub TablesList_Click()
  705.     dim i as integer
  706.     FieldsList.Clear
  707.     DB.TableIndex = TablesList.ListIndex
  708.     FieldsList.InsertItem("*", FieldsList.ListCount)
  709.     For i = 0 To DB.FieldCount - 1
  710.       DB.FieldIndex = i
  711.       FieldsList.InsertItem(DB.FieldName, FieldsList.ListCount)
  712.     Next i
  713.     FieldsList.ListIndex = 0
  714.   End Sub
  715.  
  716. End Type
  717.  
  718. Type PickDatabaseDriver From Form
  719.   Dim btnOK As New Button
  720.   Dim btnCancel As New Button
  721.   Dim lbDrivers As New ListBox
  722.   Dim Label1 As New Label
  723.   Dim Label2 As New Label
  724.   Dim EnvelopFont As New Font
  725.  
  726.   ' METHODS for object: PickDatabaseDriver
  727.   Sub btnCancel_Click()
  728.     ModalResult(False) : Hide
  729.   End Sub
  730.  
  731.   Sub btnOK_Click()
  732.     ModalResult(True) : Hide
  733.   End Sub
  734.  
  735.   Function Execute(db as ODBC) As String
  736.     Execute = ""
  737.     If db Then 
  738.       dim i as integer
  739.       db.UpdateDrivers
  740.       ' Make sure the form is created before filling the list.
  741.       LoadForm
  742.       lbDrivers.Clear
  743.       For i = 0 To db.DriverCount - 1
  744.         db.DriverIndex = i
  745.         lbDrivers.AddItem(db.DriverName)
  746.       Next i
  747.   
  748.       If ShowModal() Then Execute = lbDrivers.Text
  749.     End If
  750.   End Function
  751.  
  752.   Sub Resize()
  753.     const margin = 120
  754.     btnOK.Left = ScaleWidth - btnOK.Width - margin
  755.     btnCancel.Left = btnOK.Left
  756.     lbDrivers.Move(lbDrivers.Left, lbDrivers.Top, btnOK.Left - margin - lbDrivers.Left, ScaleHeight - margin - lbDrivers.Top)
  757.   End Sub
  758.  
  759. End Type
  760.  
  761. Type QBEFieldData From Form
  762.   Dim Table As New Label
  763.   Dim Field As New Label
  764.   Dim SortOrder As New ComboBox
  765.   Dim CriteriaAnd As New TextBox
  766.   Dim CriteriaOr As New TextBox
  767.  
  768.   ' METHODS for object: QBEFieldData
  769.   Sub CriteriaAnd_DragAndDrop(source As XferData, x As Single, y As Single, state As OleDropState, effect As OleDropEffect)
  770.     DragAndDrop(source, x, y, state, effect)
  771.   End Sub
  772.  
  773.   Sub CriteriaOr_DragAndDrop(source As XferData, x As Single, y As Single, state As OleDropState, effect As OleDropEffect)
  774.     DragAndDrop(source, x, y, state, effect)
  775.   End Sub
  776.  
  777.   Sub DragAndDrop(source As XferData, x As Single, y As Single, state As OleDropState, effect As OleDropEffect)
  778.     SendEvent Parent.DragAndDrop(source, x, y, state, effect)
  779.   End Sub
  780.  
  781.   Sub Field_DragAndDrop(source As XferData, x As Single, y As Single, state As OleDropState, effect As OleDropEffect)
  782.     DragAndDrop(source, x, y, state, effect)
  783.   End Sub
  784.  
  785.   Sub Load()
  786.     SortOrder.InsertItem("None", 0)
  787.     SortOrder.InsertItem("Ascending", 1)
  788.     SortOrder.InsertItem("Descending", 2)
  789.     SortOrder.ListIndex = 0
  790.   End Sub
  791.  
  792.   Sub MoveLeft()
  793.     Left = Left - ScaleWidth
  794.   End Sub
  795.  
  796.   Sub MoveRight()
  797.     Left = Left + ScaleWidth
  798.   End Sub
  799.  
  800.   Sub Resize()
  801.     Table.Move(0, 0, ScaleWidth, Table.Height)
  802.     Field.Move(0, Table.Height, ScaleWidth, Field.Height)
  803.     SortOrder.Move(0, Field.Height + Field.Top, ScaleWidth, SortOrder.Height)
  804.     CriteriaAnd.Move(0, SortOrder.Height + SortOrder.Top, ScaleWidth, CriteriaAnd.Height)
  805.     CriteriaOr.Move(0, CriteriaAnd.Height + CriteriaAnd.Top, ScaleWidth, CriteriaOr.Height)
  806.   End Sub
  807.  
  808.   Sub ScrollPosition(amt as Integer)
  809.     Left = Left + amt
  810.   End Sub
  811.  
  812.   Sub SortOrder_DragAndDrop(source As XferData, x As Single, y As Single, state As OleDropState, effect As OleDropEffect)
  813.     DragAndDrop(source, x, y, state, effect)
  814.   End Sub
  815.  
  816.   Sub Table_DragAndDrop(source As XferData, x As Single, y As Single, state As OleDropState, effect As OleDropEffect)
  817.     DragAndDrop(source, x, y, state, effect)
  818.   End Sub
  819.  
  820. End Type
  821.  
  822. Type QBE From Form
  823.   Dim Spacing As Integer
  824.   Dim Execute As New Button
  825.   Dim SQLText As New TextBox
  826.   Dim Dismiss As New Button
  827.   Dim DataConnection As ODBC
  828.   Dim LabelTable As New Label
  829.   Dim LabelField As New Label
  830.   Dim LabelSort As New Label
  831.   Dim LabelAnd As New Label
  832.   Dim LabelOr As New Label
  833.   Dim BuildSql As New Button
  834.   Type DeleteTable From Image
  835.     Dim pict As New Bitmap
  836.   End Type
  837.   Type TablesScroll From ScrollBar
  838.     Dim OldValue As Long
  839.   End Type
  840.   Dim FieldsCount As Long
  841.   Dim TablesCount As Long
  842.   Dim NewTable As New Button
  843.   Dim TablesContainer As New Form
  844.   Type FieldsContainer From Form
  845.  
  846.     ' METHODS for object: QBE.FieldsContainer
  847.     Sub AppendItem(s as string, item as string)
  848.       If s = "" Then 
  849.         s = item
  850.       Else 
  851.         s = s & ", " & item
  852.       End If
  853.     End Sub
  854.  
  855.     Sub BuildCriteriaString(criteria as string, t as string, item as string, criteriaString as String)
  856.       If criteria = "" Then Exit Sub
  857.       If criteriaString <> "" Then 
  858.         criteriaString = criteriaString & t
  859.       Else 
  860.         criteriaString = "WHERE "
  861.       End If
  862.       If criteria <> "" Then criteriaString = criteriaString & " " & item & " " & criteria
  863.     End Sub
  864.  
  865.     Sub BuildSortString(sortOrder as string, item as string, sortString as String)
  866.       dim sortOrderString as String
  867.       If sortOrder = "None" Then Exit Sub
  868.       If item = "*" Then Exit Sub
  869.       If sortOrder = "Ascending" Then 
  870.         sortOrderString = "Asc"
  871.       ElseIf sortOrder = "Descending" Then 
  872.         sortOrderString = "Desc"
  873.       End If
  874.       If sortString <> "" Then 
  875.         sortString = sortString & ", "
  876.       Else 
  877.         sortString = " ORDER BY "
  878.       End If
  879.       sortString = sortString & item & " " & sortOrderString
  880.     End Sub
  881.  
  882.     Function BuildSqlString() as String
  883.       dim i as integer
  884.       dim qry as string
  885.       dim item as string
  886.       dim tableString as string
  887.       dim fieldString as string
  888.       dim sortOrder as string
  889.       dim criteria as string
  890.     
  891.       dim q as QBEFieldData
  892.       For i = 0 To Controls.Count - 1
  893.         q = Controls(i)
  894.         item = q.Table.Text
  895.         If UniqueTable(item, i) Then AppendItem(tableString, item)
  896.         item = q.Field.Text
  897.         If item = "*" Then fieldString = "*"
  898.         If fieldString <> "*" And UniqueField(item, i) Then AppendItem(fieldString, item)
  899.         BuildSortString(q.SortOrder.Text, item, sortOrder)
  900.         BuildCriteriaString(q.CriteriaAnd.Text, " AND ", item, criteria)
  901.         BuildCriteriaString(q.CriteriaOr.Text, " OR ", item, criteria)
  902.       Next i
  903.     
  904.       If fieldString = "" Then 
  905.         BuildSqlString = ""
  906.       Else 
  907.         BuildSqlString = "SELECT " & fieldString & " FROM " & tableString & " " & criteria & " " & sortOrder
  908.       End If
  909.     End Function
  910.  
  911.     Function UniqueField(fieldName as string, i as integer) as Integer
  912.       dim j as integer
  913.       UniqueField = 1
  914.       If i <> 0 Then 
  915.         For j = 0 To i - 1
  916.           If Controls(j).Field.Text = fieldName Then UniqueField = 0
  917.         Next j
  918.       End If
  919.     End Function
  920.  
  921.     Function UniqueTable(tableName as string, i as integer) as Integer
  922.       dim j as integer
  923.       UniqueTable = 1
  924.       If i <> 0 Then 
  925.         For j = 0 To i - 1
  926.           If Controls(j).Table.Text = tableName Then UniqueTable = 0
  927.         Next j
  928.       End If
  929.     End Function
  930.  
  931.   End Type
  932.   Dim FieldsScroll As New QBE.TablesScroll
  933.  
  934.   ' METHODS for object: QBE
  935.   Function BuildQuery(db as Database) as String
  936.     dim i, res as integer
  937.     If db.Connected = False Then 
  938.       QBEDataSourceName.Connect(db)
  939.       While QBEDataSourceName.Processing
  940.         Application.DoEvents()
  941.       Wend
  942.       If QBEDataSourceName.Canceled Then Exit Function
  943.     End If
  944.     Initialize(db)
  945.     res = ShowModal()
  946.     If (res = True) Then 
  947.       BuildQuery = SQLText.Text
  948.     Else 
  949.       BuildQuery = ""
  950.     End If
  951.     CleanUp
  952.   End Function
  953.  
  954.   Sub BuildSql_Click()
  955.     SQLText.Text = FieldsContainer.BuildSqlString()
  956.   End Sub
  957.  
  958.   Sub CleanUp()
  959.     While TablesContainer.Controls.Count
  960.       DestroyObject(TablesContainer.Controls(0))
  961.     Wend
  962.     While FieldsContainer.Controls.Count
  963.       DestroyObject(FieldsContainer.Controls(0))
  964.     Wend
  965.   
  966.   End Sub
  967.  
  968.   Sub CreateFieldData(ByVal table as String, ByVal field as String)
  969.     dim ind as Integer
  970.     dim newObj as QBEFieldData
  971.     With FieldsContainer
  972.       ind = .Controls.Count
  973.       newObj = EmbedObject(FieldsContainer, QBEFieldData, UniqueEmbedName(FieldsContainer, QBEFieldData))
  974.       newObj.Table.Text = table
  975.       newObj.Field.Text = field
  976.       If (ind) Then 
  977.         newObj.Move(.Controls(ind - 1).Left + .Controls(ind - 1).Width, 0, newObj.ScaleWidth, newObj.ScaleHeight)
  978.       Else 
  979.         newObj.Move(0, 0, newObj.ScaleWidth, newObj.ScaleHeight)
  980.       End If
  981.     End With
  982.   End Sub
  983.  
  984.   Sub DeleteTable_DragAndDrop(source As XferData, x As Single, y As Single, state As OleDropState, effect As OleDropEffect)
  985.     If TypeOf source.ObjectRef Is QBEFieldData Then 
  986.       effect = 1
  987.       If state = 3 Then 
  988.         RemoveColumn(source.ObjectRef)
  989.       End If
  990.     ElseIf TypeOf source.ObjectRef Is Control And TypeOf source.ObjectRef.Parent Is QBEFieldData Then 
  991.       effect = 1
  992.       If state = 3 Then 
  993.         RemoveColumn(source.ObjectRef.Parent)
  994.       End If
  995.     ElseIf TypeOf source.ObjectRef Is QBETableData Then 
  996.       effect = 1
  997.       If state = 3 Then 
  998.         RemoveTable(source.ObjectRef)
  999.       End If
  1000.     ElseIf TypeOf source.ObjectRef Is Control And TypeOf source.ObjectRef.Parent Is QBETableData Then 
  1001.       effect = 1
  1002.       If state = 3 Then 
  1003.         RemoveTable(source.ObjectRef.Parent)
  1004.       End If
  1005.     End If
  1006.     Refresh
  1007.   End Sub
  1008.  
  1009.   Sub Dismiss_Click()
  1010.     Hide()
  1011.     ModalResult(False)
  1012.   End Sub
  1013.  
  1014.   Sub Execute_Click()
  1015.     Hide()
  1016.     BuildSql_Click()
  1017.     ModalResult(True)
  1018.   End Sub
  1019.  
  1020.   Sub FieldsContainer_DragAndDrop(source As XferData, x As Single, y As Single, state As OleDropState, effect As OleDropEffect)
  1021.     dim o as QBETableData
  1022.     effect = 0
  1023.     If TypeOf source.ObjectRef Is QBETableData Then 
  1024.       effect = 1
  1025.       If state = 3 Then 
  1026.         o = source.ObjectRef
  1027.         CreateFieldData(o.TablesList.Text, o.FieldsList.Text)
  1028.       End If
  1029.     ElseIf TypeOf source.ObjectRef Is Control And TypeOf source.ObjectRef.Parent Is QBETableData Then 
  1030.       effect = 1
  1031.       If state = 3 Then 
  1032.         o = source.ObjectRef.Parent
  1033.         CreateFieldData(o.TablesList.Text, o.FieldsList.Text)
  1034.       End If
  1035.     End If
  1036.   End Sub
  1037.  
  1038.   Sub FieldsScroll_Change()
  1039.     dim cnt as Integer
  1040.     With FieldsContainer
  1041.       If FieldsScroll.Value = FieldsScroll.OldValue Then Exit Sub
  1042.       cnt = .Controls.Count
  1043.       If cnt Then 
  1044.         If FieldsScroll.OldValue > FieldsScroll.Value Then 
  1045.           .Controls.ScrollPosition(FieldsScroll.OldValue - FieldsScroll.Value)
  1046.         Else 
  1047.           If cnt And .Controls(cnt - 1).Left + .Controls(cnt - 1).Width > .ScaleWidth Then 
  1048.             .Controls.ScrollPosition(FieldsScroll.OldValue - FieldsScroll.Value)
  1049.           Else 
  1050.             FieldsScroll.Value = FieldsScroll.OldValue
  1051.           End If
  1052.         End If
  1053.       Else 
  1054.         FieldsScroll.Value = FieldsScroll.OldValue
  1055.       End If
  1056.     End With
  1057.     FieldsScroll.OldValue = FieldsScroll.Value
  1058.   End Sub
  1059.  
  1060.   Function FieldsShownCount() as Integer
  1061.     FieldsShownCount = FieldsContainer.Controls.Count
  1062.   End Function
  1063.  
  1064.   Sub Initialize(db as Database)
  1065.     SQLText.Text = ""
  1066.     DataConnection = db
  1067.     NewTable_Click
  1068.   End Sub
  1069.  
  1070.   Function IsFieldShown(field as Integer) as Integer
  1071.     If FieldsCount = 0 Then 
  1072.       IsFieldShown = False
  1073.     Else 
  1074.       IsFieldShown = True
  1075.     End If
  1076.   End Function
  1077.  
  1078.   Sub NewTable_Click()
  1079.     dim ind as Integer
  1080.     dim newObj as QBETableData
  1081.     LoadForm()
  1082.     With TablesContainer
  1083.       ind = .Controls.Count
  1084.       newObj = EmbedObject(TablesContainer, QBETableData, UniqueEmbedName(TablesContainer, QBETableData))
  1085.       newObj.DB = DataConnection
  1086.       newObj.GetTables()
  1087.       If (ind) Then 
  1088.         newObj.Move(.Controls(ind - 1).Left + .Controls(ind - 1).Width, 0, newObj.ScaleWidth, newObj.ScaleHeight)
  1089.       Else 
  1090.         newObj.Move(0, 0, newObj.ScaleWidth, newObj.ScaleHeight)
  1091.       End If
  1092.     End With
  1093.   End Sub
  1094.  
  1095.   Sub RemoveColumn(item as QBEFieldData)
  1096.     dim i, done as Integer
  1097.   
  1098.     While (i < FieldsContainer.Controls.Count) And Not done
  1099.       If (item = FieldsContainer.Controls(i)) Then 
  1100.         done = True
  1101.       Else 
  1102.         i = i + 1
  1103.       End If
  1104.     Wend
  1105.     If (i < FieldsContainer.Controls.Count) Then DestroyObject(item)
  1106.     While (i < FieldsContainer.Controls.Count)
  1107.       FieldsContainer.Controls(i).MoveLeft()
  1108.       i = i + 1
  1109.     Wend
  1110.   
  1111.   End Sub
  1112.  
  1113.   Sub RemoveTable(item as QBETableData)
  1114.     dim i, done as Integer
  1115.   
  1116.     While (i < TablesContainer.Controls.Count) And Not done
  1117.       If (item = TablesContainer.Controls(i)) Then 
  1118.         done = True
  1119.       Else 
  1120.         i = i + 1
  1121.       End If
  1122.     Wend
  1123.     If (i < TablesContainer.Controls.Count) Then DestroyObject(item)
  1124.     While (i < TablesContainer.Controls.Count)
  1125.       TablesContainer.Controls(i).MoveLeft()
  1126.       i = i + 1
  1127.     Wend
  1128.   
  1129.   End Sub
  1130.  
  1131.   Sub Resize()
  1132.   End Sub
  1133.  
  1134.   Sub Setup()
  1135.   End Sub
  1136.  
  1137.   Sub TablesScroll_Change()
  1138.     dim cnt as Integer
  1139.     With TablesContainer
  1140.       If TablesScroll.Value = TablesScroll.OldValue Then Exit Sub
  1141.       cnt = .Controls.Count
  1142.       If cnt Then 
  1143.         If TablesScroll.OldValue > TablesScroll.Value Then 
  1144.           .Controls.ScrollPosition(TablesScroll.OldValue - TablesScroll.Value)
  1145.         Else 
  1146.           If cnt And .Controls(cnt - 1).Left + .Controls(cnt - 1).Width > .ScaleWidth Then 
  1147.             .Controls.ScrollPosition(TablesScroll.OldValue - TablesScroll.Value)
  1148.           Else 
  1149.             TablesScroll.Value = TablesScroll.OldValue
  1150.           End If
  1151.         End If
  1152.       Else 
  1153.         TablesScroll.Value = TablesScroll.OldValue
  1154.       End If
  1155.     End With
  1156.     TablesScroll.OldValue = TablesScroll.Value
  1157.   
  1158.   End Sub
  1159.  
  1160. End Type
  1161.  
  1162. Type DataConConfigureWizard From WizardMaster.Wizard
  1163.   Dim DATASET As Object
  1164.   Type Branch From WizardMaster.FrmStep
  1165.     Dim OBAuto As New OptionButton
  1166.     Dim OBManual As New OptionButton
  1167.  
  1168.     ' METHODS for object: DataConConfigureWizard.Branch
  1169.     Sub ValidateDisplay(ok As Boolean)
  1170.       If Not initialized Then 
  1171.         OBAuto.Value = True
  1172.         initialized = True
  1173.       Else 
  1174.         If NextStep = wizard.ConfigCtrls Then 
  1175.           OBManual.Value = True
  1176.         Else 
  1177.           OBAuto.Value = True
  1178.         End If
  1179.       End If
  1180.     End Sub
  1181.  
  1182.     Sub ValidateNext(ok As Boolean)
  1183.       With wizard
  1184.     If OBAuto.Value then
  1185.       NextStep = .SelectFields
  1186.       .FormMaker.SetReferences(.DATASET)
  1187.     Else
  1188.       NextStep = .ConfigCtrls
  1189.     End If
  1190.     ' NextStep = IIf(OBAuto.Value, wizard.SelectFields, wizard.ConfigCtrls)
  1191.       End With
  1192.     End Sub
  1193.  
  1194.   End Type
  1195.   Type ConfigureFields From WizardMaster.FrmStep
  1196.     Dim Frame2 As New Frame
  1197.     Type LBLFieldName7 From Label
  1198.       Property NextField Get getNextField As Object
  1199.       Property Position Get getPosition As Integer
  1200.  
  1201.       ' METHODS for object: DataConConfigureWizard.ConfigureFields.LBLFieldName7
  1202.       Function getNextField As Object
  1203.         Dim TempStr as string
  1204.         TempStr = "TBFieldLabel" & Position
  1205.         getNextField = FindEmbed(Parent, TempStr)
  1206.       End Function
  1207.  
  1208.       Function getPosition As Integer
  1209.         getPosition = Right$(Name, 1)
  1210.       End Function
  1211.  
  1212.       Sub HandOff(obj as object)
  1213.         If obj Then 
  1214.           Visible = True
  1215.           Caption = obj.FieldName
  1216.         Else 
  1217.           Visible = False
  1218.           Caption = ""
  1219.         End If
  1220.         NextField.HandOff(obj)
  1221.       End Sub
  1222.  
  1223.     End Type
  1224.     Type TBFieldLabel7 From TextBox
  1225.       Property Position Get getPosition As Integer
  1226.       Property NextField Get getNextField As Object
  1227.  
  1228.       ' METHODS for object: DataConConfigureWizard.ConfigureFields.TBFieldLabel7
  1229.       Function getNextField As Object
  1230.         Dim TempStr as string
  1231.         TempStr = "CHKField" & Position
  1232.         getNextField = FindEmbed(Parent, TempStr)
  1233.       End Function
  1234.  
  1235.       Function getPosition As Integer
  1236.         getPosition = Right$(Name, 1)
  1237.       End Function
  1238.  
  1239.       Sub HandOff(obj as object)
  1240.         If obj Then 
  1241.           Visible = True
  1242.           If Caption = "*~!~*" Then
  1243.             Caption = "NO LABEL"
  1244.             Enabled = False
  1245.           Else
  1246.             Caption = obj.Caption
  1247.             Enabled = True
  1248.           End If
  1249.         Else 
  1250.           Visible = False
  1251.           Caption = ""
  1252.         End If
  1253.         NextField.HandOff(obj)
  1254.       End Sub
  1255.  
  1256.       Sub LostFocus
  1257.         With Parent.wizard.FormMaker
  1258.           If Parent.Editing Then 
  1259.             Dim o as Object
  1260.             Dim n as Object
  1261.             o = .LocateObjectByField(Parent.GetField(Position)).Label
  1262.             If o Then 
  1263.               o.Caption = Text & ":"
  1264.             Else
  1265.               ' This object wasn't created...
  1266.               ' This algorithm is NOT complete
  1267.               Dim o as DatabaseLabel
  1268.               Dim l, t, w, h as Single
  1269.               w = 0
  1270.               For Each o EmbeddedIn .DBFMForm
  1271.                 l = o.Left
  1272.                 w = IIF(o.Width = 0, 15, o.Width)
  1273.                 h = o.Height
  1274.                 Exit For
  1275.               Next o
  1276.               if w = 0 then Throw NoLabels
  1277.               ' Need to figure out the top
  1278.               n = EmbedObject(.DBFMForm, DatabaseLabel, UniqueEmbedName("HookMeUp"))
  1279.               n.Move(l, t, w, h)
  1280.               ' n.DataControl hookup
  1281.             End If
  1282.           Else 
  1283.             .OptionGroup(Position + Parent.ScrollBar1.Value - 1).Caption = Text
  1284.           End If
  1285.         End With
  1286.       End Sub
  1287.  
  1288.     End Type
  1289.     Type CHKField7 From CheckBox
  1290.       Dim SuppressClicks As Integer
  1291.       Property Position Get getPosition As Integer
  1292.       Property NextField Get getNextField As Object
  1293.  
  1294.       ' METHODS for object: DataConConfigureWizard.ConfigureFields.CHKField7
  1295.       Sub Click
  1296.         If SuppressClicks = 0 Then 
  1297.           If Parent.wizard.Editing then
  1298.             Parent.wizard.FormMaker.ToggleReadOnly(Parent.ScrollBar1.Value + Position - 1)
  1299.           End If
  1300.  
  1301.       With Parent.wizard.FormMaker
  1302.         Try
  1303.           .OptionGroup(Position + Parent.ScrollBar1.Value - 1).CanEdit = IIf(Value = 0, False, True)
  1304.         Catch RangeError
  1305.         End Try
  1306.       End With
  1307.  
  1308.         End If
  1309.       End Sub
  1310.  
  1311.       Function getNextField As Object
  1312.         Dim TempStr as string
  1313.         TempStr = "TBMaxChar" & Position
  1314.         getNextField = FindEmbed(Parent, TempStr)
  1315.       End Function
  1316.  
  1317.       Function getPosition As Integer
  1318.         getPosition = Right$(Name, 1)
  1319.       End Function
  1320.  
  1321.       Sub HandOff(obj as object)
  1322.         ' Set flag to suppress handling click events.  Setting the Value
  1323.         ' on a checkbox will trigger a Click event.  We do not want
  1324.         ' process these events, since we're setting the Value to reflect
  1325.         ' the object's current state, not to change its state.
  1326.         SuppressClicks = 1
  1327.         If obj Then 
  1328.           Visible = True
  1329.           Value = IIf(obj.CanEdit, 1, 0)
  1330.         Else 
  1331.           Visible = False
  1332.           Value = 0
  1333.         End If
  1334.         SuppressClicks = 0
  1335.  
  1336.         NextField.HandOff(obj)
  1337.       End Sub
  1338.  
  1339.     End Type
  1340.     Type TBMaxChar7 From TextBox
  1341.       Property Position Get getPosition As Integer
  1342.       Property NextField Get getNextField As Object
  1343.  
  1344.       ' METHODS for object: DataConConfigureWizard.ConfigureFields.TBMaxChar7
  1345.       Function getNextField As Object
  1346.         Dim TempStr as string
  1347.         TempStr = "TBWidth" & Position
  1348.         getNextField = FindEmbed(Parent, TempStr)
  1349.       End Function
  1350.  
  1351.       Function getPosition As Integer
  1352.         getPosition = Right$(Name, 1)
  1353.       End Function
  1354.  
  1355.       Sub HandOff(obj as object)
  1356.         If obj Then 
  1357.           Visible = True
  1358.           Caption = obj.MaxLength
  1359.         Else 
  1360.           Visible = False
  1361.           Caption = ""
  1362.         End If
  1363.         NextField.HandOff(obj)
  1364.       End Sub
  1365.  
  1366.       Sub LostFocus
  1367.         With Parent.wizard.FormMaker
  1368.           If Parent.Editing Then 
  1369.             .LocateObjectByField(Parent.GetField(Position)).MaxLength = Text
  1370.           Else 
  1371.             .OptionGroup(Position + Parent.ScrollBar1.Value - 1).MaxLength = Text
  1372.           End If
  1373.         End With
  1374.       End Sub
  1375.  
  1376.     End Type
  1377.     Type TBWidth7 From TextBox
  1378.       Property Position Get getPosition As Integer
  1379.  
  1380.       ' METHODS for object: DataConConfigureWizard.ConfigureFields.TBWidth7
  1381.       Function getPosition As Integer
  1382.         getPosition = Right$(Name, 1)
  1383.       End Function
  1384.  
  1385.       Sub HandOff(obj as object)
  1386.         If obj Then 
  1387.           Visible = True
  1388.           Caption = obj.Width
  1389.         Else 
  1390.           Visible = False
  1391.           Caption = ""
  1392.         End If
  1393.       End Sub
  1394.  
  1395.       Sub LostFocus
  1396.         With Parent.wizard.FormMaker
  1397.           If Parent.Editing Then 
  1398.             If Text = "0" Then 
  1399.               Dim o as Window
  1400.               o = .LocateObjectByField(Parent.GetField(Position))
  1401.               If o.MaxLength = 0 Then 
  1402.                 o.Width = .HyperWidth - .LabelWidth - .Margin
  1403.               Else 
  1404.                 o.Width = (2 + MaxLength) * (IIf(TypeOf o Is DatabaseReadOnlyField, .DBROMaxCharWidth, .DBRWMaxCharWidth))
  1405.               End If
  1406.             Else 
  1407.               .LocateObjectByField(Parent.GetField(Position)).Width = Text
  1408.             End If
  1409.           Else 
  1410.             .OptionGroup(Position + Parent.ScrollBar1.Value - 1).Width = Text
  1411.           End If
  1412.         End With
  1413.       End Sub
  1414.  
  1415.     End Type
  1416.     Dim TBWidth1 As New DataConConfigureWizard.ConfigureFields.TBWidth7
  1417.     Dim TBMaxChar1 As New DataConConfigureWizard.ConfigureFields.TBMaxChar7
  1418.     Dim CHKField1 As New DataConConfigureWizard.ConfigureFields.CHKField7
  1419.     Dim TBFieldLabel1 As New DataConConfigureWizard.ConfigureFields.TBFieldLabel7
  1420.     Dim LBLFieldName1 As New DataConConfigureWizard.ConfigureFields.LBLFieldName7
  1421.     Dim TBWidth2 As New DataConConfigureWizard.ConfigureFields.TBWidth7
  1422.     Dim TBMaxChar2 As New DataConConfigureWizard.ConfigureFields.TBMaxChar7
  1423.     Dim CHKField2 As New DataConConfigureWizard.ConfigureFields.CHKField7
  1424.     Dim TBFieldLabel2 As New DataConConfigureWizard.ConfigureFields.TBFieldLabel7
  1425.     Dim LBLFieldName2 As New DataConConfigureWizard.ConfigureFields.LBLFieldName7
  1426.     Dim TBWidth3 As New DataConConfigureWizard.ConfigureFields.TBWidth7
  1427.     Dim TBMaxChar3 As New DataConConfigureWizard.ConfigureFields.TBMaxChar7
  1428.     Dim CHKField3 As New DataConConfigureWizard.ConfigureFields.CHKField7
  1429.     Dim TBFieldLabel3 As New DataConConfigureWizard.ConfigureFields.TBFieldLabel7
  1430.     Dim LBLFieldName3 As New DataConConfigureWizard.ConfigureFields.LBLFieldName7
  1431.     Dim TBWidth4 As New DataConConfigureWizard.ConfigureFields.TBWidth7
  1432.     Dim TBMaxChar4 As New DataConConfigureWizard.ConfigureFields.TBMaxChar7
  1433.     Dim CHKField4 As New DataConConfigureWizard.ConfigureFields.CHKField7
  1434.     Dim TBFieldLabel4 As New DataConConfigureWizard.ConfigureFields.TBFieldLabel7
  1435.     Dim LBLFieldName4 As New DataConConfigureWizard.ConfigureFields.LBLFieldName7
  1436.     Dim TBWidth5 As New DataConConfigureWizard.ConfigureFields.TBWidth7
  1437.     Dim TBMaxChar5 As New DataConConfigureWizard.ConfigureFields.TBMaxChar7
  1438.     Dim CHKField5 As New DataConConfigureWizard.ConfigureFields.CHKField7
  1439.     Dim TBFieldLabel5 As New DataConConfigureWizard.ConfigureFields.TBFieldLabel7
  1440.     Dim LBLFieldName5 As New DataConConfigureWizard.ConfigureFields.LBLFieldName7
  1441.     Dim TBWidth6 As New DataConConfigureWizard.ConfigureFields.TBWidth7
  1442.     Dim TBMaxChar6 As New DataConConfigureWizard.ConfigureFields.TBMaxChar7
  1443.     Dim CHKField6 As New DataConConfigureWizard.ConfigureFields.CHKField7
  1444.     Dim TBFieldLabel6 As New DataConConfigureWizard.ConfigureFields.TBFieldLabel7
  1445.     Dim LBLFieldName6 As New DataConConfigureWizard.ConfigureFields.LBLFieldName7
  1446.     Dim ScrollBar1 As New ScrollBar
  1447.     Dim LBLCanEditHeading As New Label
  1448.     Dim LBLCaptionHeading As New Label
  1449.     Dim LBLFieldHeading As New Label
  1450.     Dim LBLWidthHeading As New Label
  1451.     Dim LBLMaxCharHeading As New Label
  1452.     Dim ColumnGroup As New Group
  1453.     Property Editing Get getEditing As Boolean
  1454.  
  1455.     ' METHODS for object: DataConConfigureWizard.ConfigureFields
  1456.     Sub DisplayFields(TopRow as integer)
  1457.       Dim STT as New SuspendDebugExceptionTrapping
  1458.       Dim i as integer
  1459.       Dim o as Label
  1460.       Dim n as integer
  1461.       Dim g as Group
  1462.       g = wizard.FormMaker.OptionGroup
  1463.       n = g.Count - 1
  1464.       i = 0
  1465.       For Each o In ColumnGroup
  1466.         o.HandOff(IIf(i <= n, g(TopRow + i), Nothing))
  1467.         i = i + 1
  1468.       Next o
  1469.     End Sub
  1470.  
  1471.     Function getEditing As Boolean
  1472.       With wizard.FormMaker.DBFMRecordSet
  1473.         getEditing = .Controls && .Controls.Count
  1474.       End With
  1475.     End Function
  1476.  
  1477.     Function GetField(pos as integer) as string
  1478.       Dim o as object
  1479.       o = FindEmbed(Me, "LBLFieldName" & pos)
  1480.       GetField = o.Caption
  1481.     End Function
  1482.  
  1483.     Sub ScrollBar1_Change()
  1484.       DisplayFields(ScrollBar1.Value)
  1485.     End Sub
  1486.  
  1487.   End Type
  1488.   Type SelectFields From WizardMaster.FrmStep
  1489.     Dim LBFieldList As New ListBox
  1490.     Dim LBSelFields As New ListBox
  1491.     Dim BTNAddAll As New Button
  1492.     Dim BTNAdd As New Button
  1493.     Dim BTNRemove As New Button
  1494.     Dim BTNRemoveAll As New Button
  1495.     Dim LBLInclude As New Label
  1496.     Dim LBLAllFields As New Label
  1497.  
  1498.     ' METHODS for object: DataConConfigureWizard.SelectFields
  1499.     Sub BTNAddAll_Click()
  1500.       While LBFieldList.ListCount > 0
  1501.         LBFieldList.ListIndex = 0
  1502.         BTNAdd_Click
  1503.       Wend
  1504.     End Sub
  1505.  
  1506.     Sub BTNAdd_Click()
  1507.       If LBFieldList.ListIndex = -1 Then 
  1508.         Throw NoFieldSelected
  1509.       Else 
  1510.         Dim i as integer
  1511.         With LBSelFields
  1512.           Dim TheItem as string
  1513.           Dim Blank as Object
  1514.           TheItem = LBFieldList.Text
  1515.           If .ItemIndex(TheItem) = -1 Then .InsertItem(LBFieldList.Text, IIf(.ListIndex > -1, .ListIndex + 1, .ListCount))
  1516.           Blank = CopyObject(DataBaseFormMaker.FieldOptions, "")
  1517.           Blank.FieldName = TheItem
  1518.           Blank.Caption = Blank.FieldName
  1519.           ' Smart Compute MaxWidth part here
  1520.           If LBSelFields.ListIndex = -1 Then 
  1521.             DataBaseFormMaker.OptionGroup.Append(Blank)
  1522.             LBSelFields.ListIndex = LBSelFields.ListCount - 1
  1523.           Else 
  1524.             DataBaseFormMaker.OptionGroup.InsertAt(Blank, LBSelFields.ListIndex + 1)
  1525.             LBSelFields.ListIndex = LBSelFields.ListIndex + 1
  1526.           End If
  1527.           i = LBFieldList.ListIndex
  1528.         End With
  1529.         With LBFieldList
  1530.           .RemoveItem(.ListIndex)
  1531.           .ListIndex = IIf(i < .ListCount - 1, i, .ListCount - 1)
  1532.         End With
  1533.       End If
  1534.     End Sub
  1535.  
  1536.     Sub BTNRemoveAll_Click()
  1537.       LBSelFields.Clear
  1538.       FillFieldList
  1539.       wizard.FormMaker.OptionGroup.Clear
  1540.     End Sub
  1541.  
  1542.     Sub BTNRemove_Click()
  1543.       If LBSelFields.ListIndex = -1 Then 
  1544.         Throw NoSelField
  1545.       Else 
  1546.         With LBSelFields
  1547.           Dim i as integer
  1548.           SortedInsert(.Text)
  1549.           wizard.FormMaker.OptionGroup.RemoveAt(.ListIndex)
  1550.           i = .ListIndex
  1551.           .RemoveItem(.ListIndex)
  1552.           .ListIndex = IIf(i < .ListCount - 1, i, .ListCount - 1)
  1553.         End With
  1554.     
  1555.       End If
  1556.     End Sub
  1557.  
  1558.     Sub FillFieldList
  1559.       With wizard.FormMaker.DBFMRecordSet
  1560.         Dim i as integer
  1561.         LBFieldList.Clear
  1562.         For i = 0 To .FieldCount - 1
  1563.           .FieldIndex = i
  1564.           LBFieldList.AddItem(.FieldName)
  1565.         Next i
  1566.       End With
  1567.     End Sub
  1568.  
  1569.     Sub SortedInsert(item as string)
  1570.       With wizard.FormMaker.DBFMRecordSet
  1571.         Dim i as integer
  1572.         Dim j as integer
  1573.         Dim f as string
  1574.         j = 0
  1575.         For i = 0 To .FieldCount - 1
  1576.           ' Compare Database(i) with j
  1577.           .FieldIndex = i
  1578.           f = .FieldName
  1579.           If f = item Then 
  1580.             LBFieldList.InsertItem(item, j)
  1581.             LBFieldList.ListIndex = j
  1582.             Exit Sub
  1583.           End If
  1584.           If LBFieldList.List(j) = f Then j = j + 1
  1585.         Next i
  1586.         LBFieldList.AddItem(item)
  1587.       End With
  1588.     End Sub
  1589.  
  1590.   End Type
  1591.   Property FormMaker Get getFormMaker As Object
  1592.   Type SetColors From WizardMaster.FrmStep
  1593.     Dim FieldReadOnly As New Label
  1594.     Dim TBReadOnly As New TextBox
  1595.     Dim TBReadWrite As New TextBox
  1596.     Dim FieldReadWrite As New Label
  1597.     Dim LBLNotice As New Label
  1598.     Dim BTNSetROBack As New Button
  1599.     Dim BTNSetROFore As New Button
  1600.     Dim BTNSetROFont As New Button
  1601.     Dim BTNSetRWFont As New Button
  1602.     Dim BTNSetRWFore As New Button
  1603.     Dim BTNSetRWBack As New Button
  1604.     Dim BTNSetLBLFont As New Button
  1605.     Dim BTNSetLBLFore As New Button
  1606.     Dim BTNSetLBLBack As New Button
  1607.     Dim LBLSetRO As New Label
  1608.     Dim LBLSetRW As New Label
  1609.     Dim LBLSetLabel As New Label
  1610.     Dim ColorDlg As New ColorDialog
  1611.  
  1612.     ' METHODS for object: DataConConfigureWizard.SetColors
  1613.     Sub BTNSetLBLBack_Click()
  1614.       SetColor(wizard.FormMaker.LblBackColor)
  1615.       If wizard.Editing Then wizard.FormMaker.Refresh(DBC_LABEL)
  1616.     End Sub
  1617.  
  1618.     Sub BTNSetLBLFont_Click()
  1619.       Dim FP as New FontPicker
  1620.       If FP.Execute = IDOK Then 
  1621.         FieldReadOnly.Font = FP.FontRef
  1622.         FieldReadWrite.Font = FP.FontRef
  1623.         If wizard.Editing Then 
  1624.           wizard.FormMaker.Modify(DBC_LABEL, DBC_NO_CHANGE, DBC_NO_CHANGE, FP.FontRef)
  1625.         Else 
  1626.           wizard.FormMaker.DBLblFont = FP.FontRef
  1627.         End If
  1628.         LayDisplay
  1629.       End If
  1630.     End Sub
  1631.  
  1632.     Sub BTNSetLBLFore_Click()
  1633.       SetColor(wizard.FormMaker.LblForeColor)
  1634.       If wizard.Editing Then wizard.FormMaker.Refresh(DBC_LABEL)
  1635.     End Sub
  1636.  
  1637.     Sub BTNSetROBack_Click()
  1638.       SetColor(wizard.FormMaker.DBROBackColor)
  1639.       If wizard.Editing Then wizard.FormMaker.Refresh(DBC_READ_ONLY)
  1640.     End Sub
  1641.  
  1642.     Sub BTNSetROFont_Click()
  1643.       Dim FP as New FontPicker
  1644.       If FP.Execute = IDOK Then 
  1645.         TBReadOnly.Font = FP.FontRef
  1646.         If wizard.Editing Then 
  1647.           wizard.FormMaker.Modify(DBC_READ_ONLY, DBC_NO_CHANGE, DBC_NO_CHANGE, FP.FontRef)
  1648.         Else 
  1649.           wizard.FormMaker.DBROFont = FP.FontRef
  1650.         End If
  1651.         LayDisplay
  1652.       End If
  1653.     End Sub
  1654.  
  1655.     Sub BTNSetROFore_Click()
  1656.       SetColor(wizard.FormMaker.DBROForeColor)
  1657.       If wizard.Editing Then wizard.FormMaker.Refresh(DBC_READ_ONLY)
  1658.     End Sub
  1659.  
  1660.     Sub BTNSetRWBack_Click()
  1661.       SetColor(wizard.FormMaker.DBRWBackColor)
  1662.       If wizard.Editing Then wizard.FormMaker.Refresh(DBC_READ_WRITE)
  1663.     End Sub
  1664.  
  1665.     Sub BTNSetRWFont_Click()
  1666.       Dim FP as New FontPicker
  1667.       If FP.Execute = IDOK Then 
  1668.         TBReadWrite.Font = FP.FontRef
  1669.         If wizard.Editing Then 
  1670.           wizard.FormMaker.Modify(DBC_READ_WRITE, DBC_NO_CHANGE, DBC_NO_CHANGE, FP.FontRef)
  1671.         Else 
  1672.           wizard.FormMaker.DBRWFont = FP.FontRef
  1673.         End If
  1674.         LayDisplay
  1675.       End If
  1676.     End Sub
  1677.  
  1678.     Sub BTNSetRWFore_Click()
  1679.       SetColor(wizard.FormMaker.DBRWForeColor)
  1680.       If wizard.Editing Then wizard.FormMaker.Refresh(DBC_READ_WRITE)
  1681.     End Sub
  1682.  
  1683.     Sub ClearFonts()
  1684.       FieldReadOnly.Font = Nothing
  1685.       FieldReadWrite.Font = Nothing
  1686.       TBReadOnly.Font = Nothing
  1687.       TBReadWrite.Font = Nothing
  1688.     End Sub
  1689.  
  1690.     Sub LayDisplay()
  1691.       Dim SetHt as integer
  1692.       Dim Margin as integer
  1693.       Dim LblW, LblH, RWW, RWH, ROW, ROH as integer
  1694.       Dim CurX, CurY as integer
  1695.  
  1696.       ' Ensure that the Scale of the page is 15tpp
  1697.       ScaleMode = 0
  1698.       ScaleWidth = 7140
  1699.       ScaleHeight = 4410
  1700.  
  1701.       Margin = 150
  1702.  
  1703.       ' Get the dimensions
  1704.       DataBaseFormMaker.GetFontDims(Me, FieldReadOnly.Font, "Read Only:", LblW, LblH)
  1705.       DataBaseFormMaker.GetFontDims(Me, TBReadOnly.Font, "D. Gagne", ROW, ROH)
  1706.       DataBaseFormMaker.GetFontDims(Me, TBReadWrite.Font, "Active", RWW, RWH)
  1707.  
  1708.       ' Fudge the textboxes
  1709.       ROH = ROH * 1.25
  1710.       RWH = RWH * 1.25
  1711.  
  1712.       ' Figure out which is the largest variable of the three
  1713.       SetHt = LblH
  1714.       SetHt = IIf(SetHt > ROH, SetHt, ROH)
  1715.       SetHt = IIf(SetHt > RWH, SetHt, RWH)
  1716.  
  1717.       ' Since All TextBoxes are the same height, use the larger of ROH and RWH
  1718.       ROH = IIF(ROH > RWH, ROH, RWH)
  1719.  
  1720.       ' Ensure that we don't go bounding into the buttons
  1721.       If (2 * SetHt) + Margin > 1500 Then SetHt = (1500 - Margin) / 2
  1722.  
  1723.       CurX = 2850
  1724.       CurY = 525
  1725.  
  1726.       FieldReadOnly.Move(CurX, ((SetHt - LblH) / 2) + CurY, LblW, LblH)
  1727.       CurX = CurX + LblW + Margin
  1728.       TBReadOnly.Move(CurX, ((SetHt - ROH) / 2) + CurY, 6825 - CurX, ROH)
  1729.       CurX = 2850
  1730.       CurY = CurY + SetHt + Margin
  1731.       FieldReadWrite.Move(CurX, ((SetHt - LblH) / 2) + CurY, LblW, LblH)
  1732.       CurX = CurX + LblW + Margin
  1733.       TBReadWrite.Move(CurX, ((SetHt - ROH) / 2) + CurY, 6825 - CurX, ROH)
  1734.  
  1735.       ' Put the ScaleMode back to twips
  1736.       ScaleMode = 1
  1737.     End Sub
  1738.  
  1739.     Sub SetColor(OldColor as long)
  1740.       ' OldColor is INTENTIONALLY passed ByRef
  1741.     
  1742.       ColorDlg.Color = OldColor
  1743.       If ColorDlg.Execute = IDOK Then 
  1744.         OldColor = ColorDlg.Color
  1745.         SetColors
  1746.       End If
  1747.     End Sub
  1748.  
  1749.     Sub SetColors
  1750.       With wizard.FormMaker
  1751.         FieldReadOnly.BackColor = .LblBackColor
  1752.         FieldReadOnly.ForeColor = .LblForeColor
  1753.         FieldReadWrite.BackColor = .LblBackColor
  1754.         FieldReadWrite.ForeColor = .LblForeColor
  1755.         TBReadOnly.BackColor = .DBROBackColor
  1756.         TBReadOnly.ForeColor = .DBROForeColor
  1757.         TBReadWrite.BackColor = .DBRWBackColor
  1758.         TBReadWrite.ForeColor = .DBRWForeColor
  1759.       End With
  1760.     End Sub
  1761.  
  1762.     Sub SetDefaults()
  1763.       Dim DBRW as DatabaseReadWriteField
  1764.       Dim DBRO as DatabaseReadOnlyField
  1765.       Dim DBLbl as DatabaseLabel
  1766.       For Each DBRW EmbeddedIn wizard.FormMaker.DBFMForm
  1767.     With TBReadWrite
  1768.           .BackColor = DBRW.BackColor
  1769.           .ForeColor = DBRW.ForeColor
  1770.           .Font = DBRW.Font
  1771.           Exit For
  1772.         End With
  1773.       Next DBRW
  1774.       For Each DBRO EmbeddedIn wizard.FormMaker.DBFMForm
  1775.     With TBReadOnly
  1776.           .BackColor = DBRO.BackColor
  1777.           .ForeColor = DBRO.ForeColor
  1778.           .Font = DBRO.Font
  1779.           Exit For
  1780.         End With
  1781.       Next DBRO
  1782.       For Each DBLbl EmbeddedIn wizard.FormMaker.DBFMForm
  1783.     With FieldReadOnly
  1784.           .BackColor = DBLbl.BackColor
  1785.           .ForeColor = DBLbl.ForeColor
  1786.           .Font = DBLbl.Font
  1787.         End With
  1788.     With FieldReadWrite
  1789.           .BackColor = DBLbl.BackColor
  1790.           .ForeColor = DBLbl.ForeColor
  1791.           .Font = DBLbl.Font
  1792.           Exit For
  1793.         End With
  1794.       Next DBLbl
  1795.     End Sub
  1796.  
  1797.   End Type
  1798.   Property Editing Get getEditing As Boolean
  1799.   Type SelectSource From WizardMaster.FrmStep
  1800.     Dim CBSource As New ComboBox
  1801.     Dim BTNModify As New Button
  1802.     Dim BTNNew As New Button
  1803.  
  1804.     ' METHODS for object: DataConConfigureWizard.SelectSource
  1805.     Sub BTNModify_Click()
  1806.       ODBC.ManageDataSources(hWnd)
  1807.       ' Because ManageDataSources may add/remove Data Sources, regen the listbox contents
  1808.       UpdateListBoxes()
  1809.     End Sub
  1810.  
  1811.     Sub BTNNew_Click()
  1812.       dim msgStr as String
  1813.       dim SExTrp as New SuspendDebugExceptionTrapping
  1814.       Try
  1815.         If CBSource.Text = "" Then 
  1816.           msgStr = "Please enter the name of the DataSource to create."
  1817.           InfoBox.Message("Input required", msgStr)
  1818.         ElseIf (Not CBSource.ItemIndex(CBSource.Text) = -1) Then 
  1819.           msgStr = "DataSource '" & CBSource.Text & "' already exists.  Please enter new DataSource name."
  1820.           InfoBox.Message("Name conflict", msgStr)
  1821.         Else 
  1822.           Try
  1823.             ' Get the name of the driver to use
  1824.             dim drvName As String
  1825.             drvName = PickDatabaseDriver.Execute(ODBC)
  1826.             If drvName <> "" Then 
  1827.               ODBC.CreateDataSource(hWnd, drvName, CBSource.Text)
  1828.               msgStr = CBSource.Text
  1829.               UpdateListBoxes
  1830.               CBSource.ListIndex = CBSource.ItemIndex(msgStr)
  1831.             End If
  1832.           Catch
  1833.             MessageBox.Message("Failed Create New", "Could not create new DataSource, please try again")
  1834.           End Try
  1835.         End If
  1836.       Catch
  1837.       End Try
  1838.     End Sub
  1839.  
  1840.     Function UpdateListBoxes() as Boolean
  1841.       Dim ok as Boolean
  1842.       ok = False
  1843.       If (Not TypeOf wizard.DATASET Is RecordSet) && (Not TypeOf wizard.DATASET Is Dynaset) Then 
  1844.         UpdateListBoxes = ok
  1845.         Exit Function
  1846.       End If
  1847.       If (Not TypeOf wizard.DATASET.Database Is ODBC) Then wizard.DATASET.Database = Nothing
  1848.     
  1849.       ODBC.UpdateDataSources
  1850.       CBSource.Clear
  1851.       ODBC.DataSourceIndex = 0
  1852.       While (ODBC.DataSourceIndex < ODBC.DataSourceCount - 1)
  1853.         CBSource.InsertItem(ODBC.DataSourceName, ODBC.DataSourceIndex)
  1854.         ODBC.DataSourceIndex = ODBC.DataSourceIndex + 1
  1855.       Wend
  1856.       If (ODBC.DataSourceIndex = ODBC.DataSourceCount - 1) Then 
  1857.         CBSource.InsertItem(ODBC.DataSourceName, ODBC.DataSourceIndex)
  1858.         ODBC.DataSourceIndex = ODBC.DataSourceIndex + 1
  1859.       End If
  1860.       CBSource.ListIndex = CBSource.ItemIndex(wizard.DATASET.Connect)
  1861.       If (CBSource.ListIndex = -1) Then CBSource.ListIndex = 0
  1862.     
  1863.       ok = True
  1864.       UpdateListBoxes = ok
  1865.     End Function
  1866.  
  1867.   End Type
  1868.   Type FillSource From WizardMaster.FrmStep
  1869.     Dim LBTable As New ListBox
  1870.     Dim OBTable As New OptionButton
  1871.     Dim OBSQL As New OptionButton
  1872.     Dim TBSQL As New TextBox
  1873.   End Type
  1874.   Type StartStep From WizardMaster.FrmStep
  1875.     Dim OBAscii As New OptionButton
  1876.     Dim OBODBC As New OptionButton
  1877.     Dim ObjRef As DataControl
  1878.     Dim OBJump As New OptionButton
  1879.     Dim BtnWhackLayout As New Button
  1880.  
  1881.     ' METHODS for object: DataConConfigureWizard.StartStep
  1882.     Sub BtnWhackLayout_Click()
  1883.       Dim YNBox As New YesNoBox
  1884.       If YNBox.Message("Verify Destruction", "You are sure you want to destroy the existing layout") = IDYES Then 
  1885.     wizard.FormMaker.DestroyControls
  1886.     ' Enable appropriate OptButton
  1887.     If wizard.DATASET.DatabaseType = "ODBC" Then 
  1888.       OBODBC.Value = True
  1889.     Else 
  1890.       OBAscii.Value = True
  1891.     End If
  1892.     ' Disable OBJump and Hide BtnWhack
  1893.     OBJump.Enabled = False
  1894.     BtnWhackLayout.Visible = False
  1895.       End If
  1896.     End Sub
  1897.  
  1898.   End Type
  1899.   Type ConfigText From WizardMaster.FrmStep
  1900.     Dim CHKFirstLine As New CheckBox
  1901.     Dim OBDelim As New OptionButton
  1902.     Dim OBFixed As New OptionButton
  1903.     Dim TBRowDelim As New TextBox
  1904.     Dim TBRowDelimXpr As New TextBox
  1905.     Dim TBFieldDelim As New TextBox
  1906.     Dim TBFieldDelimXpr As New TextBox
  1907.     Dim TBNumFields As New TextBox
  1908.     Dim TBFieldWidth As New TextBox
  1909.     Dim LBLFieldDelimXpr As New Label
  1910.     Dim LBLFieldDelim As New Label
  1911.     Dim LBLNumFields As New Label
  1912.     Dim LBLFieldWidth As New Label
  1913.     Dim LBLRowDelim As New Label
  1914.     Dim LBLRowDelimXpr As New Label
  1915.  
  1916.     ' METHODS for object: DataConConfigureWizard.ConfigText
  1917.     Sub CHKFirstLine_Click()
  1918.       If CHKFirstLine.Value = 0 Then 
  1919.         wizard.DATASET.Database.FirstLineAsFieldNames = True
  1920.       Else 
  1921.         wizard.DATASET.Database.FirstLineAsFieldNames = False
  1922.       End If
  1923.     End Sub
  1924.  
  1925.     Sub OBDelim_Click()
  1926.       If OBDelim.Value = True Then 
  1927.         LBLRowDelim.Visible = True
  1928.         LBLRowDelimXpr.Visible = True
  1929.         LBLFieldDelimXpr.Visible = True
  1930.         TBRowDelim.Visible = True
  1931.         TBRowDelimXpr.Visible = True
  1932.         TBFieldDelimXpr.Visible = True
  1933.         TBFieldDelim.Visible = True
  1934.         TBFieldWidth.Visible = False
  1935.         TBNumFields.Visible = False
  1936.         LBLFieldDelim.Visible = True
  1937.         LBLFieldWidth.Visible = False
  1938.         LBLNumFields.Visible = False
  1939.     
  1940.         wizard.DATASET.DatabaseType = "DelimitedAscii"
  1941.         If CHKFirstLine.Value = 1 Then 
  1942.           wizard.DATASET.Database.FirstLineAsFieldNames = True
  1943.         Else 
  1944.           wizard.DATASET.Database.FirstLineAsFieldNames = False
  1945.         End If
  1946.       End If
  1947.     End Sub
  1948.  
  1949.     Sub OBFixed_Click()
  1950.       If OBFixed.Value = True Then 
  1951.         LBLRowDelim.Visible = False
  1952.         LBLRowDelimXpr.Visible = False
  1953.         LBLFieldDelimXpr.Visible = False
  1954.         TBRowDelim.Visible = False
  1955.         TBRowDelimXpr.Visible = False
  1956.         TBFieldDelimXpr.Visible = False
  1957.         TBFieldDelim.Visible = False
  1958.         TBFieldWidth.Visible = True
  1959.         TBNumFields.Visible = True
  1960.         LBLFieldDelim.Visible = False
  1961.         LBLFieldWidth.Visible = True
  1962.         LBLNumFields.Visible = True
  1963.     
  1964.         wizard.DATASET.DatabaseType = "FixedAscii"
  1965.         If CHKFirstLine.Value = 1 Then 
  1966.           wizard.DATASET.Database.FirstLineAsFieldNames = True
  1967.         Else 
  1968.           wizard.DATASET.Database.FirstLineAsFieldNames = False
  1969.         End If
  1970.       End If
  1971.     End Sub
  1972.  
  1973.     Sub TBFieldDelim_KeyUp(keyCode As Integer, ByVal shift As Integer)
  1974.       If TBFieldDelim.Text <> "" Then 
  1975.         wizard.DATASET.Database.FieldDelimiter = TBFieldDelim.Text
  1976.       End If
  1977.     End Sub
  1978.  
  1979.     Sub TBFieldWidth_KeyUp(keyCode As Integer, ByVal shift As Integer)
  1980.       If TBFieldWidth.Text <> "" Then 
  1981.         wizard.DATASET.Database.FieldWidthList = TBFieldWidth.Text
  1982.         TBNumFields.Text = wizard.DATASET.Database.FieldCount
  1983.       End If
  1984.     End Sub
  1985.  
  1986.     Sub TBNumFields_KeyUp(keyCode As Integer, ByVal shift As Integer)
  1987.       If TBNumFields.Text <> "" Then 
  1988.         wizard.DATASET.Database.FieldCount = TBNumFields.Text
  1989.         TBFieldWidth.Text = wizard.DATASET.Database.FieldWidthList
  1990.       End If
  1991.     End Sub
  1992.  
  1993.   End Type
  1994.   Type SelectFile From WizardMaster.FrmStep
  1995.     Dim TBFileName As New TextBox
  1996.     Dim BTNBrowse As New Button
  1997.     Type TBFileView From TextBox
  1998.       Dim font As New Font
  1999.     End Type
  2000.     Dim BTNViewFile As New Button
  2001.     Dim DATABASE As Database
  2002.  
  2003.     ' METHODS for object: DataConConfigureWizard.SelectFile
  2004.     Sub BTNBrowse_Click()
  2005.       dim fileNav as new OpenDialog
  2006.       dim ok as integer
  2007.       dim OldFile as string
  2008.  
  2009.       ' Use OldFile in case the user cancels the OpenDialog
  2010.       OldFile = TBFileName.Text
  2011.  
  2012.       fileNav.Filter = "*.txt"
  2013.       fileNav.FileName = "*.txt"
  2014.       ok = fileNav.Execute
  2015.       If (ok = 1) Then 
  2016.         TBFileName.Text = fileNav.FileName
  2017.         DisplayFile
  2018.       Else 
  2019.         TBFileName.Text = OldFile
  2020.       End If
  2021.     End Sub
  2022.  
  2023.     Sub BTNViewFile_Click()
  2024.       DisplayFile
  2025.     End Sub
  2026.  
  2027.     Sub DisplayFile
  2028.       dim f as new TextFile
  2029.     
  2030.       f.FileName = TBFileName.Text
  2031.       If (f.Exists) Then 
  2032.         TBFileView.Text = f.ContentsAsString
  2033.       Else 
  2034.         TBFileView.Text = ""
  2035.       End If
  2036.     End Sub
  2037.  
  2038.   End Type
  2039.   Type ConfigCtrls From WizardMaster.FrmStep
  2040.     Dim LBControls As New ListBox
  2041.     Dim BTNClearLB As New Button
  2042.     Dim LBFields As New ListBox
  2043.     Dim BTNAdd As New Button
  2044.     Dim BTNRemove As New Button
  2045.     Dim LBLControls As New Label
  2046.     Dim LBLFields As New Label
  2047.     Dim DATABASE As Database
  2048.     Dim DragFeedback As New Label
  2049.  
  2050.     ' METHODS for object: DataConConfigureWizard.ConfigCtrls
  2051.     Sub BTNAdd_Click()
  2052.       dim c as Window
  2053.     
  2054.       If (LBControls.ListIndex = -1) Then 
  2055.         InfoBox.Message("Need selection", "You must first Select a Control.")
  2056.         Exit Sub
  2057.       End If
  2058.       If (LBFields.ListIndex = -1) Then 
  2059.         InfoBox.Message("Need selection", "You must first Select a Field.")
  2060.         Exit Sub
  2061.       End If
  2062.     
  2063.       c = FindObject(LBControls.Text)
  2064.       If (c) Then 
  2065.         c.DataSource = wizard.DATASET
  2066.         c.DataField = LBFields.Text
  2067.       Else 
  2068.         LBControls.RemoveItem(LBControls.ListIndex)
  2069.       End If
  2070.     End Sub
  2071.  
  2072.     Sub BTNClearLB_Click()
  2073.       LBControls.Clear
  2074.     End Sub
  2075.  
  2076.     Sub BTNRemove_Click()
  2077.       dim c as Window
  2078.     
  2079.       If (LBControls.ListIndex = -1) Then 
  2080.         InfoBox.Message("Need selection", "You must first Select a Control.")
  2081.         Exit Sub
  2082.       End If
  2083.     
  2084.       c = FindObject(LBControls.Text)
  2085.       LBControls.RemoveItem(LBControls.ListIndex)
  2086.       If (c) Then 
  2087.         c.DataSource = Nothing
  2088.         c.DataField = ""
  2089.       End If
  2090.     End Sub
  2091.  
  2092.     Sub LBControls_Click()
  2093.       dim c as Window
  2094.       c = FindObject(LBControls.Text)
  2095.       If c Then LBFields.ListIndex = LBFields.ItemIndex(c.DataField)
  2096.     End Sub
  2097.  
  2098.     Sub LBControls_DragAndDrop(source As XferData, x As Single, y As Single, state As OleDropState, effect As OleDropEffect)
  2099.       ' We allow 'Window' type of objects, and no others.
  2100.       If TypeOf source.ObjectRef Is Window Then effect = 1 Else effect = 0
  2101.     
  2102.       If state = 2 Then 
  2103.         ' Provide feedback for any type of object
  2104.         DragFeedback.Text = source.ObjectRef
  2105.         Exit Sub
  2106.       ElseIf state = 3 && TypeOf source.ObjectRef Is Window Then 
  2107.         LBControls.InsertItem(source.ObjectRef, LBControls.ListCount)
  2108.         LBControls.ListIndex = LBControls.ListCount - 1
  2109.       End If
  2110.       ' Clear feedback after drop, and for state=Leave
  2111.       DragFeedback.Text = ""
  2112.     End Sub
  2113.  
  2114.     Sub PopulateLB(ByVal o as Object)
  2115.       Dim i as integer
  2116.     
  2117.       LBControls.Clear
  2118.     
  2119.       While Not TypeOf o Is Form
  2120.         o = HostObject(o)
  2121.       Wend
  2122.       If TypeOf o Is DataControl Then o = o.Parent
  2123.       For i = 0 To o.Controls.Count - 1
  2124.         LBControls.AddItem(o.Controls(i))
  2125.       Next i
  2126.     End Sub
  2127.  
  2128.   End Type
  2129.   Dim ConnectString As String
  2130.  
  2131.   ' METHODS for object: DataConConfigureWizard
  2132.   Function CanModify as Boolean
  2133.     If Not DATASET || Not TypeOf DATASET Is RecordSet || Not DATASET.Controls Then 
  2134.       CanModify = False
  2135.     Else 
  2136.       Dim o as object
  2137.       Dim Flag as Boolean
  2138.       Flag = False
  2139.       For Each o In DATASET.Controls
  2140.         If TypeOf o Is DatabaseLabel || TypeOf o Is DatabaseReadOnlyField || TypeOf o Is DatabaseReadWriteField Then Flag = True
  2141.       Next o
  2142.       CanModify = Flag
  2143.     End If
  2144.   End Function
  2145.  
  2146.   Sub ConfigCtrls_ValidateDisplay(ok As Boolean)
  2147.     dim I as integer
  2148.   
  2149.     ConfigCtrls.BtnFinish.Enabled = True
  2150.     ConfigCtrls.BtnCancel.Enabled = False
  2151.   
  2152.     If Not ConfigCtrls.initialized Then 
  2153.       ConfigCtrls.PopulateLB(DATASET)
  2154.       ConfigCtrls.initialized = True
  2155.     End If
  2156.     ConfigCtrls.LBFields.Clear
  2157.     For I = 0 To DATASET.FieldCount - 1
  2158.       DATASET.FieldIndex = I
  2159.       ConfigCtrls.LBFields.AddItem(DATASET.FieldName)
  2160.     Next I
  2161.   
  2162.   End Sub
  2163.  
  2164.   Sub ConfigureFields_ValidateDisplay(ok As Boolean)
  2165.     With ConfigureFields
  2166.       If .Editing Then 
  2167.         FormMaker.ReconstructGroup
  2168.         .BtnCancel.Enabled = False
  2169.         SetColors.SetDefaults
  2170.       Else
  2171.         .BtnCancel.Enabled = True
  2172.       End If
  2173.  
  2174.       If .ScrollBar1.Value <> 0 Then 
  2175.         .ScrollBar1.Value = 0
  2176.       Else 
  2177.         .DisplayFields(0)
  2178.       End If
  2179.       .ScrollBar1.Max = IIf(FormMaker.OptionGroup.Count > 7, FormMaker.OptionGroup.Count - 7, 0)
  2180.       If .ScrollBar1.Max = 0 Then 
  2181.         .ScrollBar1.Enabled = False
  2182.       Else
  2183.         .ScrollBar1.Enabled = True
  2184.       End If
  2185.     End With
  2186.   End Sub
  2187.  
  2188.   Sub ConfigureFields_ValidateFinish(ok As Boolean)
  2189.     If Not Editing Then FormMaker.Go
  2190.   End Sub
  2191.  
  2192.   Function getEditing As Boolean
  2193.     getEditing = ConfigureFields.Editing
  2194.   End Function
  2195.  
  2196.   Function getFormMaker As Object
  2197.     ' Initially this code is hard coded for the DataBaseFormMaker
  2198.     ' but this method may be changed for other FormMaker paradigns
  2199.     If FindObject("DataBaseFormMaker") Then getFormMaker = DataBaseFormMaker Else getFormMaker = Nothing
  2200.   End Function
  2201.  
  2202.   Sub SelectFields_ValidateDisplay(ok As Boolean)
  2203.     If ConfigureFields.Editing Then 
  2204.       Dim YN as New YesNoBox
  2205.       YN.title = "Editing DATASET with Controls"
  2206.       YN.message = "WARNING: Editing the order of the fields, or adding or deleting from the SelectedFields will destroy any previous work. Are you sure you want to edit the selected fields list?"
  2207.       YN.Execute
  2208.       If YN.result = IDYES Then 
  2209.         DataBaseFormMaker.DestroyControls
  2210.       Else 
  2211.         SelectFields.BtnNext_Click
  2212.         Exit Sub
  2213.       End If
  2214.     End If
  2215.     If Not SelectFields.initialized Then 
  2216.       If FormMaker Then 
  2217.         FormMaker.OptionGroup.Clear
  2218.         With SelectFields
  2219.           .FillFieldList
  2220.           .LBSelFields.Clear
  2221.           If Not Editing Then
  2222.             FormMaker.ResetTemplates
  2223.           End If
  2224.         End With
  2225.         SelectFields.initialized = True
  2226.       End If
  2227.     End If
  2228.   End Sub
  2229.  
  2230.   Sub SelectFields_ValidateFinish(ok As Boolean)
  2231.     If Not Editing Then FormMaker.Go
  2232.   End Sub
  2233.  
  2234.   Sub SelectFields_ValidateNext(ok As Boolean)
  2235.     Dim i as integer
  2236.     If SelectFields.LBSelFields.ListCount = 0 Then 
  2237.       Dim MBX as New MessageBox
  2238.       MBX.Message("No Fields", "You must select at least one field to continue")
  2239.       ok = False
  2240.     End If
  2241.     If Not FormMaker Then Throw NoFormMaker
  2242.   End Sub
  2243.  
  2244.   Sub SetColors_ValidateDisplay(ok As Boolean)
  2245.     With SetColors
  2246.       If Not .initialized Then 
  2247.     FormMaker.ClearColors
  2248.     .SetColors
  2249.     .ClearFonts
  2250.         If Editing then 
  2251.           .SetDefaults
  2252.         End If
  2253.     .initialized = True
  2254.       End If
  2255.       If Editing then
  2256.         .BtnCancel.Enabled = False
  2257.       Else
  2258.         .BtnCancel.Enabled = True
  2259.       End If
  2260.       .LayDisplay
  2261.     End With
  2262.   End Sub
  2263.  
  2264.   Sub SetColors_ValidateFinish(ok As Boolean)
  2265.     If Not Editing Then FormMaker.Go
  2266.   End Sub
  2267.  
  2268.   Sub ConfigText_ValidateDisplay(ok As Boolean)
  2269.     ConfigText.BtnFinish.Enabled = False
  2270.     ConfigText.BtnCancel.Enabled = True
  2271.   
  2272.     ' If we're working with a Dynaset, we don't need to configure
  2273.     ' controls
  2274.     If TypeOf DATASET Is Dynaset Then 
  2275.       ConfigText.NextStep = Nothing
  2276.       ConfigText.BtnNext.Enabled = False
  2277.       ConfigText.BtnFinish.Enabled = True
  2278.     Else 
  2279.       ConfigText.NextStep = Branch
  2280.       ConfigText.BtnNext.Enabled = True
  2281.       ConfigText.BtnFinish.Enabled = False
  2282.     End If
  2283.   
  2284.     If DATASET.DatabaseType <> "None" Then 
  2285.       If DATASET.Database.FirstLineAsFieldNames = True Then 
  2286.         ConfigText.CHKFirstLine.Value = 1
  2287.       Else 
  2288.         ConfigText.CHKFirstLine.Value = 0
  2289.       End If
  2290.     End If
  2291.   
  2292.     Select Case DATASET.DatabaseType
  2293.       Case "None"
  2294.         ConfigText.OBDelim.Value = True
  2295.         DATASET.DatabaseType = "DelimitedAscii"
  2296.         ConfigText.OBFixed.Value = False
  2297.         ConfigText.TBFieldDelim.Text = ","
  2298.         DATASET.Database.FieldDelimiter = ","
  2299.         ConfigText.TBFieldDelimXpr.Text = DATASET.Database.FieldDelimiterExpr
  2300.         ConfigText.TBRowDelim.Text = "^^M^^J"
  2301.         DATASET.Database.RowDelimiter = "^M^J"
  2302.         ConfigText.TBRowDelimXpr.Text = DATASET.Database.RowDelimiterExpr
  2303.         ConfigText.TBNumFields.Text = "4"
  2304.         ConfigText.TBFieldWidth.Text = "10, 10, 10, 10"
  2305.       Case "DelimitedAscii"
  2306.         ConfigText.OBFixed.Value = False
  2307.         ConfigText.OBDelim.Value = True
  2308.         ConfigText.TBNumFields.Text = "4"
  2309.         ConfigText.TBFieldWidth.Text = "10, 10, 10, 10"
  2310.         ConfigText.TBFieldDelim.Text = DATASET.Database.FieldDelimiter
  2311.         ConfigText.TBFieldDelimXpr.Text = DATASET.Database.FieldDelimiterExpr
  2312.         If DATASET.Database.RowDelimiter = "^M^J" Then 
  2313.           ConfigText.TBRowDelim.Text = "^^M^^J"
  2314.         Else 
  2315.           ConfigText.TBRowDelim.Text = DATASET.Database.RowDelimiter
  2316.         End If
  2317.         If DATASET.Database.RowDelimiterExpr = "^M^J" Then 
  2318.           ConfigText.TBRowDelimXpr.Text = "^^M^^J"
  2319.         Else 
  2320.           ConfigText.TBRowDelimXpr.Text = DATASET.Database.RowDelimiterExpr
  2321.         End If
  2322.       Case "FixedAscii"
  2323.         ConfigText.OBFixed.Value = True
  2324.         ConfigText.OBDelim.Value = False
  2325.         ConfigText.TBFieldDelim.Text = ","
  2326.         ConfigText.TBNumFields.Text = DATASET.Database.FieldCount
  2327.         ConfigText.TBFieldWidth.Text = DATASET.Database.FieldWidthList
  2328.     End Select
  2329.   End Sub
  2330.  
  2331.   Sub ConfigText_ValidateFinish(ok as Boolean)
  2332.     If TypeOf DATASET Is Dynaset Then 
  2333.       ConfigText_ValidateNext(ok)
  2334.     Else 
  2335.       MessageBox.Message("Error", "You may not finish at this point unless the RecordSet in question is a Dynaset")
  2336.     End If
  2337.   End Sub
  2338.  
  2339.   Sub ConfigText_ValidateNext(ok As Boolean)
  2340.     ok = False
  2341.   
  2342.     If ConfigText.OBFixed.Value = True Then 
  2343.       If ConfigText.TBNumFields.Text = "" Then 
  2344.         InfoBox.Message("DataControl Configuration", "A FixedTable must have a Number of Fields.")
  2345.         ok = False
  2346.         Exit Sub
  2347.       End If
  2348.       If ConfigText.TBFieldWidth.Text = "" Then 
  2349.         InfoBox.Message("DataControl Configuration", "A FixedTable must have a Field Width.")
  2350.         ok = False
  2351.         Exit Sub
  2352.       End If
  2353.       DATASET.DatabaseType = "FixedAscii"
  2354.       DATASET.Database.FieldCount = ConfigText.TBNumFields.Text
  2355.       DATASET.Database.FieldWidthList = ConfigText.TBFieldWidth.Text
  2356.       DATASET.Connect = ConnectString
  2357.     Else 
  2358.       If ConfigText.TBFieldDelim.Text = "" Then 
  2359.         InfoBox.Message("DataControl Configuration", "A DelimitedAscii Table must have a Field Delimiter.")
  2360.         ok = False
  2361.         Exit Sub
  2362.       End If
  2363.       DATASET.DatabaseType = "DelimitedAscii"
  2364.       DATASET.Database.FieldDelimiter = ExpandCtrlCharSequences(ConfigText.TBFieldDelim.Text)
  2365.       DATASET.Database.FieldDelimiterExpr = ExpandCtrlCharSequences(ConfigText.TBFieldDelimXpr.Text)
  2366.       DATASET.Database.RowDelimiter = ExpandCtrlCharSequences(ConfigText.TBRowDelim.Text)
  2367.       DATASET.Database.RowDelimiterExpr = ExpandCtrlCharSequences(ConfigText.TBRowDelimXpr.Text)
  2368.     End If
  2369.   
  2370.     If ConfigText.CHKFirstLine.Value = 1 Then 
  2371.       DATASET.Database.FirstLineAsFieldNames = True
  2372.     Else 
  2373.       DATASET.Database.FirstLineAsFieldNames = False
  2374.     End If
  2375.   
  2376.     DATASET.Connect = ConnectString
  2377.     DATASET.Refresh
  2378.     ok = True
  2379.   End Sub
  2380.  
  2381.   Sub Edit(o as Object)
  2382.     If (o && (TypeOf o Is Dynaset || TypeOf o Is RecordSet)) Then 
  2383.       DATASET = o
  2384.       Show
  2385.     ElseIf (o && TypeOf o Is DataControl) Then 
  2386.       DATASET = o.RecordSet
  2387.       Show
  2388.     Else 
  2389.       Error
  2390.     End If
  2391.   End Sub
  2392.  
  2393.   Sub FillSource_ValidateDisplay(ok As Boolean)
  2394.     dim d as Database
  2395.     dim i as Integer
  2396.     FillSource.BtnFinish.Enabled = False
  2397.     FillSource.BtnCancel.Enabled = True
  2398.   
  2399.     d = DATASET.Database
  2400.   
  2401.     ' If we're working with a Dynaset, we don't need to configure
  2402.     ' controls
  2403.     If TypeOf DATASET Is Dynaset Then 
  2404.       FillSource.NextStep = Nothing
  2405.       FillSource.BtnNext.Enabled = False
  2406.       FillSource.BtnFinish.Enabled = True
  2407.     Else 
  2408.       FillSource.NextStep = Branch
  2409.       FillSource.BtnNext.Enabled = True
  2410.       FillSource.BtnFinish.Enabled = False
  2411.     End If
  2412.   
  2413.     FillSource.LBTable.Clear
  2414.     For i = 0 To d.TableCount - 1
  2415.       d.TableIndex = i
  2416.       FillSource.LBTable.InsertItem(d.TableName, d.TableIndex)
  2417.     Next i
  2418.     FillSource.LBTable.ListIndex = FillSource.LBTable.ItemIndex(DATASET.RecordSource)
  2419.   
  2420.     If (FillSource.LBTable.ListIndex <> -1 Or DATASET.RecordSource = "") Then 
  2421.       If (FillSource.LBTable.ListIndex = -1) Then FillSource.LBTable.ListIndex = 0
  2422.       FillSource.OBTable.Value = True
  2423.       FillSource.OBSQL.Value = False
  2424.     Else 
  2425.       FillSource.OBTable.Value = False
  2426.       FillSource.OBSQL.Value = True
  2427.     End If
  2428.   
  2429.   End Sub
  2430.  
  2431.   Sub FillSource_ValidateFinish(ok as Boolean)
  2432.     If TypeOf DATASET Is Dynaset Then 
  2433.       FillSource_ValidateNext(ok)
  2434.     Else 
  2435.       MessageBox.Message("Error", "You may not finish at this point unless the RecordSet in question is a Dynaset")
  2436.     End If
  2437.   End Sub
  2438.  
  2439.   Sub FillSource_ValidateNext(ok As Boolean)
  2440.     Try
  2441.       If (FillSource.OBTable.Value = True) Then 
  2442.         If (FillSource.LBTable.ListIndex <> -1) Then 
  2443.           DATASET.RecordSource = FillSource.LBTable.Text
  2444.           DATASET.Refresh
  2445.           ok = True
  2446.         Else 
  2447.           InfoBox.Message("Need selection", "You must first select a Table before continuing.")
  2448.           ok = False
  2449.         End If
  2450.       Else 
  2451.         DATASET.RecordSource = FillSource.TBSQL.Text
  2452.         DATASET.Refresh
  2453.         ok = True
  2454.       End If
  2455.     Catch
  2456.     End Try
  2457.   End Sub
  2458.  
  2459.   Function ExpandCtrlCharSequences(oldstr as string) as string
  2460.     Dim newstr, tempchar as string
  2461.     Dim I as integer
  2462.   
  2463.     ' The purpose of this function is to take a string with encoded control sequences
  2464.     ' and turn them into real control characters.  An encoded control character sequence
  2465.     ' is something like "^M", this is turned into Chr(13) in the return string.
  2466.  
  2467.     newstr = ""
  2468.     For I = 1 To Len(oldstr)
  2469.       If Mid$(oldstr, I, 1) = "^^" Then 
  2470.         tempchar = UCase(Mid$(oldstr, I + 1, 1))
  2471.         If tempchar >= "A" && tempchar <= "Z" Then 
  2472.           newstr = newstr & Chr(Asc(tempchar) - Asc("A") + 1)
  2473.           ' Advance the string past the next char, we used it.
  2474.           I = I + 1
  2475.         ElseIf tempchar = "^^" Then 
  2476.           ' Skip the first character of a "^^" sequence
  2477.         End If
  2478.       Else 
  2479.         newstr = newstr & Mid$(oldstr, I, 1)
  2480.       End If
  2481.     Next I
  2482.     ExpandCtrlCharSequences = newstr
  2483.   End Function
  2484.  
  2485.   Sub SelectFile_ValidateBack(ok As Boolean)
  2486.     ConnectString = SelectFile.TBFileName.Text
  2487.   End Sub
  2488.  
  2489.   Sub SelectFile_ValidateDisplay(ok As Boolean)
  2490.     SelectFile.BtnFinish.Enabled = False
  2491.     SelectFile.BtnCancel.Enabled = True
  2492.   
  2493.     If Not SelectFile.initialized Then 
  2494.       SelectFile.TBFileName.Clear
  2495.       SelectFile.initialized = True
  2496.     End If
  2497.   
  2498.     SelectFile.TBFileName.Text = ConnectString
  2499.     SelectFile.TBFileView.Clear
  2500.   
  2501.   End Sub
  2502.  
  2503.   Sub SelectFile_ValidateNext(ok As Boolean)
  2504.     ok = False
  2505.   
  2506.     If SelectFile.TBFileName.Text = "" Then 
  2507.       InfoBox.Message("Select File", "You must select a file name first")
  2508.       Exit Sub
  2509.     End If
  2510.   
  2511.   
  2512.     ConnectString = SelectFile.TBFileName.Text
  2513.   
  2514.     ok = True
  2515.   End Sub
  2516.  
  2517.   Sub SelectSource_ValidateDisplay(ok As Boolean)
  2518.     SelectSource.BtnFinish.Enabled = False
  2519.     SelectSource.BtnCancel.Enabled = True
  2520.   
  2521.     ok = SelectSource.UpdateListBoxes
  2522.   End Sub
  2523.  
  2524.   Sub SelectSource_ValidateNext(ok As Boolean)
  2525.     Dim SExTrp as New SuspendDebugExceptionTrapping
  2526.     If SelectSource.CBSource.Text <> "" Then 
  2527.       If Not StrComp(DATASET.Connect, SelectSource.CBSource.Text, 1) = 0 Then 
  2528.         Try
  2529.           DATASET.Connect = SelectSource.CBSource.Text
  2530.           ok = True
  2531.         Catch
  2532.           MessageBox.Message("Failed to Connect", "Could not connect to DataSource, please verify Connect string and try again")
  2533.           ok = False
  2534.         End Try
  2535.       End If
  2536.     Else 
  2537.       InfoBox.Message("Need selection", "Please select Data Source before continuing.")
  2538.       ok = False
  2539.     End If
  2540.   End Sub
  2541.  
  2542.   Sub StartStep_ValidateDisplay(ok As Boolean)
  2543.     With StartStep
  2544.       .BtnFinish.Enabled = False
  2545.       .BtnCancel.Enabled = True
  2546.       .OBJump.Enabled = CanModify
  2547.       .BtnWhackLayout.Visible = .OBJump.Enabled
  2548.  
  2549.       If Not .initialized Then 
  2550.         ConnectString = ""
  2551.         .OBJump.Value = False
  2552.         .initialized = True
  2553.       End If
  2554.    
  2555.       Select Case DATASET.DatabaseType
  2556.         Case "ODBC", "None"
  2557.           .OBODBC.Value = True
  2558.         Case "DelimitedAscii", "FixedAscii"
  2559.           If Len(DATASET.Connect) > 0 Then 
  2560.             ConnectString = DATASET.Connect
  2561.           End If
  2562.           .OBAscii.Value = True
  2563.       End Select
  2564.       ' If we can jump, set it as the default
  2565.       .OBJump.Value = .OBJump.Enabled
  2566.  
  2567.       ' If we can jump, set the appropriate references
  2568.       If .OBJump.Enabled Then FormMaker.SetReferences(DATASET)
  2569.  
  2570.     End With
  2571.   End Sub
  2572.  
  2573.   Sub StartStep_ValidateNext(ok As Boolean)
  2574.     With StartStep
  2575.       If .OBAscii.Value Then 
  2576.     ' Place info for Ascii NextStep
  2577.     .NextStep = SelectFile
  2578.       End If
  2579.  
  2580.       If .OBODBC.Value Then 
  2581.     ' Place info for ODBC NextStep
  2582.     .NextStep = SelectSource
  2583.       End If
  2584.  
  2585.       If (.OBODBC.Value || .OBAscii.Value) && .OBJump.Enabled then
  2586.         ' We're Editing, but the user DOESN'T want to modify existing layout
  2587.         Dim YNBX as New YesNoBox
  2588.         If YNBX.Message("Destroy old layout", "Envelop has already laid out a form based on this Recordset, the layout should be destroyed before altering the Recordset. Do you want to destroy the layout associated with the Recordset?") = IDYES then
  2589.           FormMaker.DestroyControls
  2590.         else
  2591.           ok = False
  2592.         End If
  2593.       End If
  2594.  
  2595.       If .OBJump.Value Then 
  2596.     .NextStep = ConfigureFields
  2597.       End If
  2598.     End With  
  2599.     ' Change database type if necessary
  2600.     With DATASET
  2601.       If StartStep.OBAscii.Value And (.DatabaseType = "ODBC" Or .DatabaseType = "None") Then 
  2602.         ' If changing to Ascii, presume delimited
  2603.         DATASET.DatabaseType = "DelimitedAscii"
  2604.       ElseIf StartStep.OBODBC.Value And .DatabaseType <> "ODBC" Then 
  2605.         DATASET.DatabaseType = "ODBC"
  2606.       End If
  2607.     End With
  2608.   End Sub
  2609.  
  2610.   Function TextUnload(ByVal indent As String, cmds As String) As Integer
  2611.     ' Write our parent's properties, but none of ours.
  2612.     TextUnload = False
  2613.   End Function
  2614.  
  2615. End Type
  2616.  
  2617. Begin Code
  2618. ' Reconstruction commands for object: DatabaseConstants
  2619. '
  2620.   With DatabaseConstants
  2621.     .DBC_READ_ONLY := 1
  2622.     .DBC_READ_WRITE := 2
  2623.     .DBC_LABEL := 3
  2624.     .DBC_NO_CHANGE := -2
  2625.     .DBC_ALL := 4
  2626.   End With  'DatabaseConstants
  2627.  
  2628. ' Reconstruction commands for object: DataBaseFormMaker
  2629. '
  2630.   With DataBaseFormMaker
  2631.     .CurrentY := 2175
  2632.     .Margin := 150
  2633.     .DBLblFont := Nothing
  2634.     .DBRWFont := Nothing
  2635.     .DBROFont := Nothing
  2636.     .LblBackColor := -1
  2637.     .LblForeColor := -1
  2638.     .DBROForeColor := -1
  2639.     .DBROBackColor := RGB(255, 255, 255)
  2640.     .DBRWBackColor := -1
  2641.     .DBRWForeColor := -1
  2642.     .LabelWidth := 1350
  2643.     .LabelHeight := 285
  2644.     .DBROMaxCharWidth := 195
  2645.     .DBRWMaxCharWidth := 195
  2646.     .HyperWidth := 8850
  2647.     With .FieldOptions
  2648.       .CanEdit := True
  2649.       .FieldName := ""
  2650.       .MaxLength := 0
  2651.       .Width := 0
  2652.       .Caption := ""
  2653.     End With  'DataBaseFormMaker.FieldOptions
  2654.     With .OptionGroup
  2655.     End With  'DataBaseFormMaker.OptionGroup
  2656.     With .DefaultFont
  2657.       .FaceName := "MS Sans Serif"
  2658.       .Size := 8.000000
  2659.       .Bold := False
  2660.       .Italic := False
  2661.       .Strikethru := False
  2662.     End With  'DataBaseFormMaker.DefaultFont
  2663.   End With  'DataBaseFormMaker
  2664.  
  2665. ' Reconstruction commands for object: QBEDataSourceName
  2666. '
  2667.   With QBEDataSourceName
  2668.     .Move(3720, 1815, 9075, 4305)
  2669.     .QueryObject := ODBC
  2670.     .Processing := 0
  2671.     .Canceled := 0
  2672.     With .DataSourceList
  2673.       .ZOrder := 1
  2674.       .Move(135, 585, 3480, 1950)
  2675.     End With  'QBEDataSourceName.DataSourceList
  2676.     With .CancelBttn
  2677.       .Caption := "Cancel"
  2678.       .ZOrder := 2
  2679.       .Move(6900, 1935, 1830, 600)
  2680.     End With  'QBEDataSourceName.CancelBttn
  2681.     With .ConnectButton
  2682.       .Caption := "Connect"
  2683.       .ZOrder := 3
  2684.       .Move(6900, 600, 1830, 600)
  2685.     End With  'QBEDataSourceName.ConnectButton
  2686.     With .TablesButton
  2687.       .Caption := "Browse Tables"
  2688.       .ZOrder := 4
  2689.       .Move(6900, 1260, 1830, 600)
  2690.     End With  'QBEDataSourceName.TablesButton
  2691.     With .TableList
  2692.       .ZOrder := 5
  2693.       .Move(3735, 585, 3150, 1950)
  2694.     End With  'QBEDataSourceName.TableList
  2695.     With .ConnectTextBox
  2696.       .ZOrder := 6
  2697.       .Move(2085, 3015, 5415, 420)
  2698.     End With  'QBEDataSourceName.ConnectTextBox
  2699.     With .ConnectLabel
  2700.       .Caption := "Connection String:"
  2701.       .ZOrder := 7
  2702.       .Move(105, 3075, 1830, 315)
  2703.     End With  'QBEDataSourceName.ConnectLabel
  2704.     With .DataSourceLabel
  2705.       .Caption := "Data Sources"
  2706.       .ZOrder := 8
  2707.       .Move(150, 150, 1500, 270)
  2708.     End With  'QBEDataSourceName.DataSourceLabel
  2709.     With .TableListLabel
  2710.       .Caption := "Available Tables"
  2711.       .ZOrder := 9
  2712.       .Move(3750, 150, 3000, 270)
  2713.     End With  'QBEDataSourceName.TableListLabel
  2714.   End With  'QBEDataSourceName
  2715. ' Reconstruction commands for object: QBETableData
  2716. '
  2717.   With QBETableData
  2718.     .Move(4095, 2535, 2040, 1755)
  2719.     .DB := Nothing
  2720.     With .FieldsList
  2721.       .Caption := "FieldsList"
  2722.       .BackColor := 12632256
  2723.       .ForeColor := 255
  2724.       .ZOrder := 2
  2725.       .Move(0, 360, 1920, 990)
  2726.     End With  'QBETableData.FieldsList
  2727.     With .TablesList
  2728.       .BackColor := 12632256
  2729.       .ForeColor := 16711808
  2730.       .ZOrder := 1
  2731.       .Move(0, 0, 1920, 360)
  2732.     End With  'QBETableData.TablesList
  2733.   End With  'QBETableData
  2734. ' Reconstruction commands for object: PickDatabaseDriver
  2735. '
  2736.   With PickDatabaseDriver
  2737.     .Caption := "Add Data Source"
  2738.     .Font := PickDatabaseDriver.EnvelopFont
  2739.     .Move(4305, 3780, 6030, 3300)
  2740.     .DefaultButton := PickDatabaseDriver.btnOK
  2741.     .CancelButton := PickDatabaseDriver.btnCancel
  2742.     With .btnOK
  2743.       .Caption := "OK"
  2744.       .ZOrder := 5
  2745.       .Move(4515, 150, 1275, 375)
  2746.     End With  'PickDatabaseDriver.btnOK
  2747.     With .btnCancel
  2748.       .Caption := "Cancel"
  2749.       .ZOrder := 4
  2750.       .Move(4515, 600, 1275, 375)
  2751.     End With  'PickDatabaseDriver.btnCancel
  2752.     With .lbDrivers
  2753.       .Caption := "lbDrivers"
  2754.       .ZOrder := 3
  2755.       .Move(225, 975, 4170, 1785)
  2756.     End With  'PickDatabaseDriver.lbDrivers
  2757.     With .Label1
  2758.       .Caption := "Select which ODBC driver you want to use from the list, then choose OK."
  2759.       .ZOrder := 2
  2760.       .Move(225, 75, 3525, 450)
  2761.     End With  'PickDatabaseDriver.Label1
  2762.     With .Label2
  2763.       .Caption := "Installed ODBC &Drivers:"
  2764.       .ZOrder := 1
  2765.       .Move(225, 675, 2400, 225)
  2766.     End With  'PickDatabaseDriver.Label2
  2767.     With .EnvelopFont
  2768.       .FaceName := "MS Sans Serif"
  2769.       .Size := 8.000000
  2770.       .Bold := True
  2771.       .Italic := False
  2772.       .Strikethru := False
  2773.     End With  'PickDatabaseDriver.EnvelopFont
  2774.   End With  'PickDatabaseDriver
  2775. ' Reconstruction commands for object: QBEFieldData
  2776. '
  2777.   With QBEFieldData
  2778.     .Move(6810, 3510, 2055, 2265)
  2779.     With .Table
  2780.       .BackColor := 12632256
  2781.       .ForeColor := 255
  2782.       .ZOrder := 5
  2783.       .Move(0, 0, 1935, 375)
  2784.       .BorderStyle := "Fixed Single"
  2785.       .Alignment := "Center"
  2786.     End With  'QBEFieldData.Table
  2787.     With .Field
  2788.       .BackColor := 12632256
  2789.       .ForeColor := 16711808
  2790.       .ZOrder := 4
  2791.       .Move(0, 375, 1935, 330)
  2792.       .BorderStyle := "Fixed Single"
  2793.       .Alignment := "Center"
  2794.     End With  'QBEFieldData.Field
  2795.     With .SortOrder
  2796.       .BackColor := 12632256
  2797.       .ZOrder := 3
  2798.       .Move(0, 705, 1935, 360)
  2799.     End With  'QBEFieldData.SortOrder
  2800.     With .CriteriaAnd
  2801.       .BackColor := 12632256
  2802.       .ZOrder := 2
  2803.       .Move(0, 1065, 1935, 390)
  2804.       .Alignment := "Center"
  2805.     End With  'QBEFieldData.CriteriaAnd
  2806.     With .CriteriaOr
  2807.       .BackColor := 12632256
  2808.       .ZOrder := 1
  2809.       .Move(0, 1455, 1935, 390)
  2810.       .Alignment := "Center"
  2811.     End With  'QBEFieldData.CriteriaOr
  2812.   End With  'QBEFieldData
  2813. ' Reconstruction commands for object: QBE
  2814. '
  2815.   With QBE
  2816.     .Move(2805, 4125, 11505, 6150)
  2817.     .Spacing := 100
  2818.     .DataConnection := Nothing
  2819.     .FieldsCount := 0
  2820.     .TablesCount := 0
  2821.     With .Execute
  2822.       .Caption := "Done"
  2823.       .ZOrder := 5
  2824.       .Move(10050, 5025, 1125, 345)
  2825.     End With  'QBE.Execute
  2826.     With .SQLText
  2827.       .ZOrder := 6
  2828.       .Move(735, 4530, 10440, 390)
  2829.       .WordWrap := True
  2830.       .MultiLine := True
  2831.       .ScrollBars := "Vertical"
  2832.     End With  'QBE.SQLText
  2833.     With .Dismiss
  2834.       .Caption := "Cancel"
  2835.       .ZOrder := 7
  2836.       .Move(135, 5010, 1110, 345)
  2837.     End With  'QBE.Dismiss
  2838.     With .LabelTable
  2839.       .Caption := "Table :"
  2840.       .ZOrder := 8
  2841.       .Move(60, 2265, 630, 210)
  2842.       .Alignment := "Right"
  2843.     End With  'QBE.LabelTable
  2844.     With .LabelField
  2845.       .Caption := "Field :"
  2846.       .ZOrder := 9
  2847.       .Move(60, 2580, 630, 285)
  2848.       .Alignment := "Right"
  2849.     End With  'QBE.LabelField
  2850.     With .LabelSort
  2851.       .Caption := "Sort :"
  2852.       .ZOrder := 10
  2853.       .Move(60, 2955, 630, 255)
  2854.       .Alignment := "Right"
  2855.     End With  'QBE.LabelSort
  2856.     With .LabelAnd
  2857.       .Caption := "And :"
  2858.       .ZOrder := 11
  2859.       .Move(60, 3330, 630, 270)
  2860.       .Alignment := "Right"
  2861.     End With  'QBE.LabelAnd
  2862.     With .LabelOr
  2863.       .Caption := "Or :"
  2864.       .ZOrder := 12
  2865.       .Move(60, 3735, 630, 285)
  2866.       .Alignment := "Right"
  2867.     End With  'QBE.LabelOr
  2868.     With .BuildSql
  2869.       .Caption := "SQL"
  2870.       .ZOrder := 13
  2871.       .Move(120, 4530, 615, 390)
  2872.     End With  'QBE.BuildSql
  2873.     With .DeleteTable
  2874.       .Caption := "Delete"
  2875.       .ZOrder := 14
  2876.       .Move(10335, 525, 855, 855)
  2877.       .BevelOuter := "Raised"
  2878.       .Picture := QBE.DeleteTable.pict
  2879.       With .pict
  2880.         .LoadType := "MemoryBased"
  2881.         .FileName := "dbtools.ero"
  2882.         .ResId := 0
  2883.       End With  'QBE.DeleteTable.pict
  2884.     End With  'QBE.DeleteTable
  2885.     With .TablesScroll
  2886.       .Caption := "TablesScroll"
  2887.       .ZOrder := 4
  2888.       .Move(75, 1740, 10230, 285)
  2889.       .Orientation := "Horizontal"
  2890.       .Move(75, 1740, 10230, 285)
  2891.       .OldValue := 0
  2892.     End With  'QBE.TablesScroll
  2893.     With .NewTable
  2894.       .Caption := "New"
  2895.       .ZOrder := 3
  2896.       .Move(10335, 105, 855, 345)
  2897.     End With  'QBE.NewTable
  2898.     With .TablesContainer
  2899.       .Caption := "TablesContainer"
  2900.       .ZOrder := 2
  2901.       .Move(60, 30, 9825, 1635)
  2902.       .BorderStyle := "None"
  2903.       .MaxButton := False
  2904.       .ControlBox := False
  2905.       .Parent := QBE
  2906.       .Visible := True
  2907.     End With  'QBE.TablesContainer
  2908.     With .FieldsContainer
  2909.       .Caption := "FieldsContainer"
  2910.       .ZOrder := 1
  2911.       .Move(855, 2160, 10215, 1920)
  2912.       .BorderStyle := "None"
  2913.       .MaxButton := False
  2914.       .ControlBox := False
  2915.       .Parent := QBE
  2916.       .Visible := True
  2917.     End With  'QBE.FieldsContainer
  2918.     With .FieldsScroll
  2919.       .Caption := "FieldsScroll"
  2920.       .ZOrder := 15
  2921.       .Move(735, 4140, 10440, 285)
  2922.       .Move(735, 4140, 10440, 285)
  2923.     End With  'QBE.FieldsScroll
  2924.   End With  'QBE
  2925. ' Reconstruction commands for object: DataConConfigureWizard
  2926. '
  2927.   With DataConConfigureWizard
  2928.     .GraphicFileName := "dbtools.ero"
  2929.     .FirstStep := DataConConfigureWizard.StartStep
  2930.     .LastStep := DataConConfigureWizard.ConfigCtrls
  2931.     With .Branch
  2932.       .Move(4290, 3300, 7155, 4815)
  2933.       .DefaultButton := DataConConfigureWizard.Branch.BtnNext
  2934.       .CancelButton := DataConConfigureWizard.Branch.BtnCancel
  2935.       .wizard := DataConConfigureWizard
  2936.       .NextStep := DataConConfigureWizard.ConfigCtrls
  2937.       .BackStep := DataConConfigureWizard.ConfigText
  2938.       .initialized := -1
  2939.       With .OBAuto
  2940.         .Caption := "Let Envelop do the layout"
  2941.         .ZOrder := 2
  2942.         .Move(2850, 1800, 3135, 300)
  2943.       End With  'DataConConfigureWizard.Branch.OBAuto
  2944.       With .OBManual
  2945.         .Caption := "Use existing controls"
  2946.         .ZOrder := 1
  2947.         .Move(2850, 1425, 3135, 300)
  2948.         .TabStop := True
  2949.         .Value := True
  2950.       End With  'DataConConfigureWizard.Branch.OBManual
  2951.       With .BtnFinish
  2952.         .ZOrder := 3
  2953.         .Enabled := False
  2954.         .Move(6165, 3990, 825, 300)
  2955.       End With  'DataConConfigureWizard.Branch.BtnFinish
  2956.       With .BtnNext
  2957.         .ZOrder := 4
  2958.         .Move(5265, 3990, 825, 300)
  2959.       End With  'DataConConfigureWizard.Branch.BtnNext
  2960.       With .BtnBack
  2961.         .ZOrder := 5
  2962.         .Move(4440, 3990, 825, 300)
  2963.       End With  'DataConConfigureWizard.Branch.BtnBack
  2964.       With .BtnCancel
  2965.         .ZOrder := 6
  2966.         .Enabled := False
  2967.         .Move(3540, 3990, 825, 300)
  2968.       End With  'DataConConfigureWizard.Branch.BtnCancel
  2969.       With .ImgGraphic
  2970.         .Move(225, 225, 2475, 3150)
  2971.         .Picture := DataConConfigureWizard.Bitmap
  2972.       End With  'DataConConfigureWizard.Branch.ImgGraphic
  2973.       With .LblInstruction
  2974.         .Caption := "Would you like to attach existing controls to the dataset, or let Envelop attempt to layout and configure controls. There will be a shortcut to this step from the first page of this wizard in the future."
  2975.         .ZOrder := 8
  2976.         .Move(2850, 225, 4065, 1050)
  2977.       End With  'DataConConfigureWizard.Branch.LblInstruction
  2978.       With .Frame1
  2979.         .ZOrder := 9
  2980.         .Move(75, 3765, 6915, 75)
  2981.       End With  'DataConConfigureWizard.Branch.Frame1
  2982.     End With  'DataConConfigureWizard.Branch
  2983.     With .ConfigureFields
  2984.       .Caption := "Configure Database for layout"
  2985.       .Move(3690, 4230, 7155, 4815)
  2986.       .DefaultButton := DataConConfigureWizard.ConfigureFields.BtnNext
  2987.       .CancelButton := DataConConfigureWizard.ConfigureFields.BtnCancel
  2988.       .wizard := DataConConfigureWizard
  2989.       .NextStep := DataConConfigureWizard.SetColors
  2990.       .BackStep := DataConConfigureWizard.SelectFields
  2991.       With .LBLFieldName7
  2992.         .ZOrder := 41
  2993.         .Move(3150, 3300, 1170, 300)
  2994.         .Visible := False
  2995.       End With  'DataConConfigureWizard.ConfigureFields.LBLFieldName7
  2996.       With .TBFieldLabel7
  2997.         .ZOrder := 25
  2998.         .Move(4320, 3300, 975, 300)
  2999.         .Visible := False
  3000.       End With  'DataConConfigureWizard.ConfigureFields.TBFieldLabel7
  3001.       With .CHKField7
  3002.         .ZOrder := 26
  3003.         .Move(5400, 3300, 225, 300)
  3004.         .Visible := False
  3005.         .SuppressClicks = 0
  3006.       End With  'DataConConfigureWizard.ConfigureFields.CHKField7
  3007.       With .TBMaxChar7
  3008.         .ZOrder := 27
  3009.         .Move(5625, 3300, 630, 300)
  3010.         .Visible := False
  3011.       End With  'DataConConfigureWizard.ConfigureFields.TBMaxChar7
  3012.       With .TBWidth7
  3013.         .ZOrder := 28
  3014.         .Move(6255, 3300, 630, 300)
  3015.         .Visible := False
  3016.       End With  'DataConConfigureWizard.ConfigureFields.TBWidth7
  3017.       With .TBWidth1
  3018.         .Caption := "0"
  3019.         .ZOrder := 4
  3020.         .Move(6255, 1050, 630, 300)
  3021.         .Visible := True
  3022.       End With  'DataConConfigureWizard.ConfigureFields.TBWidth1
  3023.       With .TBMaxChar1
  3024.         .Caption := "0"
  3025.         .ZOrder := 3
  3026.         .Move(5625, 1050, 630, 300)
  3027.         .Visible := True
  3028.       End With  'DataConConfigureWizard.ConfigureFields.TBMaxChar1
  3029.       With .CHKField1
  3030.         .ZOrder := 2
  3031.         .Move(5400, 1050, 225, 300)
  3032.         .Visible := True
  3033.         .Value := "Checked"
  3034.       End With  'DataConConfigureWizard.ConfigureFields.CHKField1
  3035.       With .TBFieldLabel1
  3036.         .Caption := "First Name"
  3037.         .ZOrder := 1
  3038.         .Move(4320, 1050, 975, 300)
  3039.         .Visible := True
  3040.       End With  'DataConConfigureWizard.ConfigureFields.TBFieldLabel1
  3041.       With .LBLFieldName1
  3042.         .Caption := "First Name"
  3043.         .ZOrder := 40
  3044.         .Move(3150, 1050, 1170, 300)
  3045.         .Visible := True
  3046.       End With  'DataConConfigureWizard.ConfigureFields.LBLFieldName1
  3047.       With .TBWidth2
  3048.         .Caption := "0"
  3049.         .ZOrder := 8
  3050.         .Move(6255, 1425, 630, 300)
  3051.         .Visible := True
  3052.       End With  'DataConConfigureWizard.ConfigureFields.TBWidth2
  3053.       With .TBMaxChar2
  3054.         .Caption := "0"
  3055.         .ZOrder := 7
  3056.         .Move(5625, 1425, 630, 300)
  3057.         .Visible := True
  3058.       End With  'DataConConfigureWizard.ConfigureFields.TBMaxChar2
  3059.       With .CHKField2
  3060.         .ZOrder := 6
  3061.         .Move(5400, 1425, 225, 300)
  3062.         .Visible := True
  3063.         .Value := "Checked"
  3064.       End With  'DataConConfigureWizard.ConfigureFields.CHKField2
  3065.       With .TBFieldLabel2
  3066.         .Caption := "Last Name"
  3067.         .ZOrder := 5
  3068.         .Move(4320, 1425, 975, 300)
  3069.         .Visible := True
  3070.       End With  'DataConConfigureWizard.ConfigureFields.TBFieldLabel2
  3071.       With .LBLFieldName2
  3072.         .Caption := "Last Name"
  3073.         .ZOrder := 39
  3074.         .Move(3150, 1425, 1170, 300)
  3075.         .Visible := True
  3076.       End With  'DataConConfigureWizard.ConfigureFields.LBLFieldName2
  3077.       With .TBWidth3
  3078.         .Caption := "0"
  3079.         .ZOrder := 12
  3080.         .Move(6255, 1800, 630, 300)
  3081.         .Visible := True
  3082.       End With  'DataConConfigureWizard.ConfigureFields.TBWidth3
  3083.       With .TBMaxChar3
  3084.         .Caption := "0"
  3085.         .ZOrder := 11
  3086.         .Move(5625, 1800, 630, 300)
  3087.         .Visible := True
  3088.       End With  'DataConConfigureWizard.ConfigureFields.TBMaxChar3
  3089.       With .CHKField3
  3090.         .ZOrder := 10
  3091.         .Move(5400, 1800, 225, 300)
  3092.         .Visible := True
  3093.         .Value := "Checked"
  3094.       End With  'DataConConfigureWizard.ConfigureFields.CHKField3
  3095.       With .TBFieldLabel3
  3096.         .Caption := "Style"
  3097.         .ZOrder := 9
  3098.         .Move(4320, 1800, 975, 300)
  3099.         .Visible := True
  3100.       End With  'DataConConfigureWizard.ConfigureFields.TBFieldLabel3
  3101.       With .LBLFieldName3
  3102.         .Caption := "Style"
  3103.         .ZOrder := 38
  3104.         .Move(3150, 1800, 1170, 300)
  3105.         .Visible := True
  3106.       End With  'DataConConfigureWizard.ConfigureFields.LBLFieldName3
  3107.       With .TBWidth4
  3108.         .Caption := "0"
  3109.         .ZOrder := 16
  3110.         .Move(6255, 2175, 630, 300)
  3111.         .Visible := True
  3112.       End With  'DataConConfigureWizard.ConfigureFields.TBWidth4
  3113.       With .TBMaxChar4
  3114.         .Caption := "0"
  3115.         .ZOrder := 15
  3116.         .Move(5625, 2175, 630, 300)
  3117.         .Visible := True
  3118.       End With  'DataConConfigureWizard.ConfigureFields.TBMaxChar4
  3119.       With .CHKField4
  3120.         .ZOrder := 14
  3121.         .Move(5400, 2175, 225, 300)
  3122.         .Visible := True
  3123.         .Value := "Checked"
  3124.       End With  'DataConConfigureWizard.ConfigureFields.CHKField4
  3125.       With .TBFieldLabel4
  3126.         .Caption := "Age"
  3127.         .ZOrder := 13
  3128.         .Move(4320, 2175, 975, 300)
  3129.         .Visible := True
  3130.       End With  'DataConConfigureWizard.ConfigureFields.TBFieldLabel4
  3131.       With .LBLFieldName4
  3132.         .Caption := "Age"
  3133.         .ZOrder := 37
  3134.         .Move(3150, 2175, 1170, 300)
  3135.         .Visible := True
  3136.       End With  'DataConConfigureWizard.ConfigureFields.LBLFieldName4
  3137.       With .TBWidth5
  3138.         .Caption := "0"
  3139.         .ZOrder := 20
  3140.         .Move(6255, 2550, 630, 300)
  3141.         .Visible := True
  3142.       End With  'DataConConfigureWizard.ConfigureFields.TBWidth5
  3143.       With .TBMaxChar5
  3144.         .Caption := "0"
  3145.         .ZOrder := 19
  3146.         .Move(5625, 2550, 630, 300)
  3147.         .Visible := True
  3148.       End With  'DataConConfigureWizard.ConfigureFields.TBMaxChar5
  3149.       With .CHKField5
  3150.         .ZOrder := 18
  3151.         .Move(5400, 2550, 225, 300)
  3152.         .Visible := True
  3153.         .Value := "Checked"
  3154.       End With  'DataConConfigureWizard.ConfigureFields.CHKField5
  3155.       With .TBFieldLabel5
  3156.         .Caption := "Sex"
  3157.         .ZOrder := 17
  3158.         .Move(4320, 2550, 975, 300)
  3159.         .Visible := True
  3160.       End With  'DataConConfigureWizard.ConfigureFields.TBFieldLabel5
  3161.       With .LBLFieldName5
  3162.         .Caption := "Sex"
  3163.         .ZOrder := 36
  3164.         .Move(3150, 2550, 1170, 300)
  3165.         .Visible := True
  3166.       End With  'DataConConfigureWizard.ConfigureFields.LBLFieldName5
  3167.       With .TBWidth6
  3168.         .Caption := "0"
  3169.         .ZOrder := 24
  3170.         .Move(6255, 2925, 630, 300)
  3171.         .Visible := True
  3172.       End With  'DataConConfigureWizard.ConfigureFields.TBWidth6
  3173.       With .TBMaxChar6
  3174.         .Caption := "0"
  3175.         .ZOrder := 23
  3176.         .Move(5625, 2925, 630, 300)
  3177.         .Visible := True
  3178.       End With  'DataConConfigureWizard.ConfigureFields.TBMaxChar6
  3179.       With .CHKField6
  3180.         .ZOrder := 22
  3181.         .Move(5400, 2925, 225, 300)
  3182.         .Visible := True
  3183.         .Value := "Checked"
  3184.       End With  'DataConConfigureWizard.ConfigureFields.CHKField6
  3185.       With .TBFieldLabel6
  3186.         .Caption := "Status"
  3187.         .ZOrder := 21
  3188.         .Move(4320, 2925, 975, 300)
  3189.         .Visible := True
  3190.       End With  'DataConConfigureWizard.ConfigureFields.TBFieldLabel6
  3191.       With .LBLFieldName6
  3192.         .Caption := "Status"
  3193.         .ZOrder := 35
  3194.         .Move(3150, 2925, 1170, 300)
  3195.         .Visible := True
  3196.       End With  'DataConConfigureWizard.ConfigureFields.LBLFieldName6
  3197.       With .ScrollBar1
  3198.         .Caption := "ScrollBar1"
  3199.         .ZOrder := 34
  3200.         .Move(2850, 990, 225, 2670)
  3201.         .SmallChange := 1
  3202.         .LargeChange := 6
  3203.         .Max := 0
  3204.       End With  'DataConConfigureWizard.ConfigureFields.ScrollBar1
  3205.       With .LBLCanEditHeading
  3206.         .Caption := "Can Edit"
  3207.         .ZOrder := 33
  3208.         .Move(5250, 525, 375, 450)
  3209.       End With  'DataConConfigureWizard.ConfigureFields.LBLCanEditHeading
  3210.       With .LBLCaptionHeading
  3211.         .Caption := "Caption"
  3212.         .ZOrder := 32
  3213.         .Move(4350, 750, 900, 225)
  3214.         .Alignment := "Center"
  3215.       End With  'DataConConfigureWizard.ConfigureFields.LBLCaptionHeading
  3216.       With .LBLFieldHeading
  3217.         .Caption := "Field"
  3218.         .ZOrder := 31
  3219.         .Move(3150, 750, 1200, 225)
  3220.         .Alignment := "Center"
  3221.       End With  'DataConConfigureWizard.ConfigureFields.LBLFieldHeading
  3222.       With .LBLWidthHeading
  3223.         .Caption := "Width"
  3224.         .ZOrder := 30
  3225.         .Move(6225, 750, 675, 225)
  3226.         .Alignment := "Center"
  3227.       End With  'DataConConfigureWizard.ConfigureFields.LBLWidthHeading
  3228.       With .LBLMaxCharHeading
  3229.         .Caption := "Max Char"
  3230.         .ZOrder := 29
  3231.         .Move(5625, 525, 600, 450)
  3232.         .Alignment := "Center"
  3233.       End With  'DataConConfigureWizard.ConfigureFields.LBLMaxCharHeading
  3234.       With .ColumnGroup
  3235.         .Append(DataConConfigureWizard.ConfigureFields.LBLFieldName1)
  3236.         .Append(DataConConfigureWizard.ConfigureFields.LBLFieldName2)
  3237.         .Append(DataConConfigureWizard.ConfigureFields.LBLFieldName3)
  3238.         .Append(DataConConfigureWizard.ConfigureFields.LBLFieldName4)
  3239.         .Append(DataConConfigureWizard.ConfigureFields.LBLFieldName5)
  3240.         .Append(DataConConfigureWizard.ConfigureFields.LBLFieldName6)
  3241.         .Append(DataConConfigureWizard.ConfigureFields.LBLFieldName7)
  3242.       End With  'DataConConfigureWizard.ConfigureFields.ColumnGroup
  3243.       With .Frame2
  3244.         .ZOrder := 49
  3245.         .Move(3075, 900, 3885, 2775)
  3246.       End With  'DataConConfigureWizard.ConfigureFields.Frame2
  3247.       With .BtnFinish
  3248.         .ZOrder := 42
  3249.         .Move(6165, 3990, 825, 300)
  3250.       End With  'DataConConfigureWizard.ConfigureFields.BtnFinish
  3251.       With .BtnNext
  3252.         .ZOrder := 43
  3253.         .Move(5265, 3990, 825, 300)
  3254.       End With  'DataConConfigureWizard.ConfigureFields.BtnNext
  3255.       With .BtnBack
  3256.         .ZOrder := 44
  3257.         .Move(4440, 3990, 825, 300)
  3258.       End With  'DataConConfigureWizard.ConfigureFields.BtnBack
  3259.       With .BtnCancel
  3260.         .ZOrder := 45
  3261.         .Move(3540, 3990, 825, 300)
  3262.       End With  'DataConConfigureWizard.ConfigureFields.BtnCancel
  3263.       With .ImgGraphic
  3264.         .ZOrder := 46
  3265.         .Move(225, 225, 2475, 3150)
  3266.         .Picture := DataConConfigureWizard.Bitmap
  3267.       End With  'DataConConfigureWizard.ConfigureFields.ImgGraphic
  3268.       With .LblInstruction
  3269.         .Caption := "Configure the selected fields here."
  3270.         .ZOrder := 47
  3271.         .Move(2850, 225, 4065, 225)
  3272.       End With  'DataConConfigureWizard.ConfigureFields.LblInstruction
  3273.       With .Frame1
  3274.         .ZOrder := 48
  3275.         .Move(75, 3765, 6915, 75)
  3276.       End With  'DataConConfigureWizard.ConfigureFields.Frame1
  3277.     End With  'DataConConfigureWizard.ConfigureFields
  3278.     With .SelectFields
  3279.       .Caption := "Configure Database for layout"
  3280.       .Move(5610, 2115, 7230, 4785)
  3281.       .DefaultButton := DataConConfigureWizard.SelectFields.BtnNext
  3282.       .CancelButton := DataConConfigureWizard.SelectFields.BtnCancel
  3283.       .wizard := DataConConfigureWizard
  3284.       .NextStep := DataConConfigureWizard.ConfigureFields
  3285.       .BackStep := DataConConfigureWizard.Branch
  3286.       With .LBFieldList
  3287.         .Caption := "LBFieldList"
  3288.         .ZOrder := 8
  3289.         .Move(2850, 1200, 1350, 2370)
  3290.         .Sorted := False
  3291.         .IntegralHeight := False
  3292.       End With  'DataConConfigureWizard.SelectFields.LBFieldList
  3293.       With .LBSelFields
  3294.         .Caption := "LBSelFields"
  3295.         .ZOrder := 7
  3296.         .Move(5550, 1200, 1350, 2370)
  3297.         .Sorted := False
  3298.         .IntegralHeight := False
  3299.       End With  'DataConConfigureWizard.SelectFields.LBSelFields
  3300.       With .BTNAddAll
  3301.         .Caption := "Add All ->"
  3302.         .ZOrder := 6
  3303.         .Move(4350, 1275, 1050, 450)
  3304.       End With  'DataConConfigureWizard.SelectFields.BTNAddAll
  3305.       With .BTNAdd
  3306.         .Caption := "Add ->"
  3307.         .ZOrder := 5
  3308.         .Move(4350, 1875, 1050, 450)
  3309.       End With  'DataConConfigureWizard.SelectFields.BTNAdd
  3310.       With .BTNRemove
  3311.         .Caption := "<- Remove"
  3312.         .ZOrder := 4
  3313.         .Move(4350, 2475, 1050, 450)
  3314.       End With  'DataConConfigureWizard.SelectFields.BTNRemove
  3315.       With .BTNRemoveAll
  3316.         .Caption := "<- Clear All"
  3317.         .ZOrder := 3
  3318.         .Move(4350, 3075, 1050, 450)
  3319.       End With  'DataConConfigureWizard.SelectFields.BTNRemoveAll
  3320.       With .LBLInclude
  3321.         .Caption := "Selected Fields"
  3322.         .ZOrder := 2
  3323.         .Move(5550, 900, 1350, 225)
  3324.         .Alignment := "Center"
  3325.       End With  'DataConConfigureWizard.SelectFields.LBLInclude
  3326.       With .LBLAllFields
  3327.         .Caption := "Field List"
  3328.         .ZOrder := 1
  3329.         .Move(2850, 900, 1350, 225)
  3330.         .Alignment := "Center"
  3331.       End With  'DataConConfigureWizard.SelectFields.LBLAllFields
  3332.       With .BtnFinish
  3333.         .ZOrder := 9
  3334.         .Move(6165, 3990, 825, 300)
  3335.       End With  'DataConConfigureWizard.SelectFields.BtnFinish
  3336.       With .BtnNext
  3337.         .ZOrder := 10
  3338.         .Move(5265, 3990, 825, 300)
  3339.       End With  'DataConConfigureWizard.SelectFields.BtnNext
  3340.       With .BtnBack
  3341.         .Enabled := False
  3342.         .ZOrder := 11
  3343.         .Move(4440, 3990, 825, 300)
  3344.       End With  'DataConConfigureWizard.SelectFields.BtnBack
  3345.       With .BtnCancel
  3346.         .ZOrder := 12
  3347.         .Move(3540, 3990, 825, 300)
  3348.       End With  'DataConConfigureWizard.SelectFields.BtnCancel
  3349.       With .ImgGraphic
  3350.         .ZOrder := 13
  3351.         .Move(225, 225, 2475, 3150)
  3352.         .Picture := DataConConfigureWizard.Bitmap
  3353.       End With  'DataConConfigureWizard.SelectFields.ImgGraphic
  3354.       With .LblInstruction
  3355.         .Caption := "Select the fields to include in the layout. The order of the fields in the selected list box will be the order in which the fields will be laid out."
  3356.         .ZOrder := 14
  3357.         .Move(2850, 225, 4065, 600)
  3358.       End With  'DataConConfigureWizard.SelectFields.LblInstruction
  3359.       With .Frame1
  3360.         .ZOrder := 15
  3361.         .Move(75, 3765, 6915, 75)
  3362.       End With  'DataConConfigureWizard.SelectFields.Frame1
  3363.     End With  'DataConConfigureWizard.SelectFields
  3364.     With .SetColors
  3365.       .Caption := "Configure Database for layout"
  3366.       .Move(3690, 4230, 7155, 4815)
  3367.       .DefaultButton := DataConConfigureWizard.SetColors.BtnFinish
  3368.       .CancelButton := DataConConfigureWizard.SetColors.BtnCancel
  3369.       .wizard := DataConConfigureWizard
  3370.       .BackStep := DataConConfigureWizard.ConfigureFields
  3371.       .initialized := -1
  3372.       With .FieldReadOnly
  3373.         .Caption := "Read Only:"
  3374.         .ForeColor := 16711680
  3375.         .ZOrder := 18
  3376.         .Move(2850, 975, 1200, 300)
  3377.         .Alignment := "Right"
  3378.       End With  'DataConConfigureWizard.SetColors.FieldReadOnly
  3379.       With .TBReadOnly
  3380.         .Caption := "D. Gagne"
  3381.         .BackColor := 12632256
  3382.         .ZOrder := 17
  3383.         .Move(4125, 975, 2700, 300)
  3384.       End With  'DataConConfigureWizard.SetColors.TBReadOnly
  3385.       With .TBReadWrite
  3386.         .Caption := "Active"
  3387.         .BackColor := 12615808
  3388.         .ZOrder := 14
  3389.         .Move(4125, 1725, 2700, 300)
  3390.       End With  'DataConConfigureWizard.SetColors.TBReadWrite
  3391.       With .FieldReadWrite
  3392.         .Caption := "Editable:"
  3393.         .ForeColor := 16711680
  3394.         .ZOrder := 15
  3395.         .Move(2850, 1725, 1200, 300)
  3396.         .Alignment := "Right"
  3397.       End With  'DataConConfigureWizard.SetColors.FieldReadWrite
  3398.       With .LBLNotice
  3399.         .Caption := "All controls will be sized to fit requested font"
  3400.         .ZOrder := 13
  3401.         .Move(2775, 2100, 4050, 225)
  3402.       End With  'DataConConfigureWizard.SetColors.LBLNotice
  3403.       With .BTNSetROBack
  3404.         .Caption := "BackColor"
  3405.         .ZOrder := 12
  3406.         .Move(3750, 2475, 1020, 300)
  3407.       End With  'DataConConfigureWizard.SetColors.BTNSetROBack
  3408.       With .BTNSetROFore
  3409.         .Caption := "ForeColor"
  3410.         .ZOrder := 11
  3411.         .Move(4770, 2475, 1020, 300)
  3412.       End With  'DataConConfigureWizard.SetColors.BTNSetROFore
  3413.       With .BTNSetROFont
  3414.         .Caption := "Font"
  3415.         .ZOrder := 10
  3416.         .Move(5790, 2475, 1020, 300)
  3417.       End With  'DataConConfigureWizard.SetColors.BTNSetROFont
  3418.       With .BTNSetRWFont
  3419.         .Caption := "Font"
  3420.         .ZOrder := 7
  3421.         .Move(5790, 2850, 1020, 300)
  3422.       End With  'DataConConfigureWizard.SetColors.BTNSetRWFont
  3423.       With .BTNSetRWFore
  3424.         .Caption := "ForeColor"
  3425.         .ZOrder := 8
  3426.         .Move(4770, 2850, 1020, 300)
  3427.       End With  'DataConConfigureWizard.SetColors.BTNSetRWFore
  3428.       With .BTNSetRWBack
  3429.         .Caption := "BackColor"
  3430.         .ZOrder := 9
  3431.         .Move(3750, 2850, 1020, 300)
  3432.       End With  'DataConConfigureWizard.SetColors.BTNSetRWBack
  3433.       With .BTNSetLBLFont
  3434.         .Caption := "Font"
  3435.         .ZOrder := 4
  3436.         .Move(5790, 3225, 1020, 300)
  3437.       End With  'DataConConfigureWizard.SetColors.BTNSetLBLFont
  3438.       With .BTNSetLBLFore
  3439.         .Caption := "ForeColor"
  3440.         .ZOrder := 5
  3441.         .Move(4770, 3225, 1020, 300)
  3442.       End With  'DataConConfigureWizard.SetColors.BTNSetLBLFore
  3443.       With .BTNSetLBLBack
  3444.         .Caption := "BackColor"
  3445.         .ZOrder := 6
  3446.         .Move(3750, 3225, 1020, 300)
  3447.       End With  'DataConConfigureWizard.SetColors.BTNSetLBLBack
  3448.       With .LBLSetRO
  3449.         .Caption := "Read Only"
  3450.         .ZOrder := 3
  3451.         .Move(2775, 2475, 975, 300)
  3452.       End With  'DataConConfigureWizard.SetColors.LBLSetRO
  3453.       With .LBLSetRW
  3454.         .Caption := "Editable"
  3455.         .ZOrder := 2
  3456.         .Move(2775, 2850, 975, 300)
  3457.       End With  'DataConConfigureWizard.SetColors.LBLSetRW
  3458.       With .LBLSetLabel
  3459.         .Caption := "Labels"
  3460.         .ZOrder := 1
  3461.         .Move(2775, 3225, 975, 300)
  3462.       End With  'DataConConfigureWizard.SetColors.LBLSetLabel
  3463.       With .ColorDlg
  3464.         .Color := 12615808
  3465.       End With  'DataConConfigureWizard.SetColors.ColorDlg
  3466.       With .BtnFinish
  3467.         .ZOrder := 20
  3468.         .Move(6165, 3990, 825, 300)
  3469.       End With  'DataConConfigureWizard.SetColors.BtnFinish
  3470.       With .BtnNext
  3471.         .Enabled := False
  3472.         .ZOrder := 21
  3473.         .Move(5265, 3990, 825, 300)
  3474.       End With  'DataConConfigureWizard.SetColors.BtnNext
  3475.       With .BtnBack
  3476.         .ZOrder := 22
  3477.         .Move(4440, 3990, 825, 300)
  3478.       End With  'DataConConfigureWizard.SetColors.BtnBack
  3479.       With .BtnCancel
  3480.         .ZOrder := 23
  3481.         .Move(3540, 3990, 825, 300)
  3482.       End With  'DataConConfigureWizard.SetColors.BtnCancel
  3483.       With .ImgGraphic
  3484.         .ZOrder := 24
  3485.         .Move(225, 225, 2475, 3150)
  3486.         .Picture := DataConConfigureWizard.Bitmap
  3487.       End With  'DataConConfigureWizard.SetColors.ImgGraphic
  3488.       With .LblInstruction
  3489.         .Caption := "Choose the colors and fonts for the layout."
  3490.         .ZOrder := 25
  3491.         .Move(2850, 225, 4065, 225)
  3492.       End With  'DataConConfigureWizard.SetColors.LblInstruction
  3493.       With .Frame1
  3494.         .ZOrder := 26
  3495.         .Move(75, 3765, 6915, 75)
  3496.       End With  'DataConConfigureWizard.SetColors.Frame1
  3497.     End With  'DataConConfigureWizard.SetColors
  3498.     With .SelectSource
  3499.       .Caption := "Configure DataControl"
  3500.       .Move(4080, 2280, 7230, 4785)
  3501.       .DefaultButton := DataConConfigureWizard.SelectSource.BtnNext
  3502.       .CancelButton := DataConConfigureWizard.SelectSource.BtnCancel
  3503.       .wizard := DataConConfigureWizard
  3504.       .NextStep := DataConConfigureWizard.FillSource
  3505.       .BackStep := DataConConfigureWizard.StartStep
  3506.       With .CBSource
  3507.         .ZOrder := 1
  3508.         .Move(2850, 1200, 4050, 300)
  3509.       End With  'DataConConfigureWizard.SelectSource.CBSource
  3510.       With .BTNModify
  3511.         .Caption := "Modify..."
  3512.         .ZOrder := 2
  3513.         .Move(5550, 1650, 1350, 300)
  3514.       End With  'DataConConfigureWizard.SelectSource.BTNModify
  3515.       With .BTNNew
  3516.         .Caption := "New..."
  3517.         .ZOrder := 3
  3518.         .Move(2850, 1650, 1350, 300)
  3519.       End With  'DataConConfigureWizard.SelectSource.BTNNew
  3520.       With .BtnFinish
  3521.         .Enabled := False
  3522.         .ZOrder := 9
  3523.         .Move(6300, 4020, 825, 300)
  3524.       End With  'DataConConfigureWizard.SelectSource.BtnFinish
  3525.       With .BtnNext
  3526.         .ZOrder := 4
  3527.         .Move(5400, 4020, 825, 300)
  3528.       End With  'DataConConfigureWizard.SelectSource.BtnNext
  3529.       With .BtnBack
  3530.         .ZOrder := 5
  3531.         .Move(4575, 4020, 825, 300)
  3532.       End With  'DataConConfigureWizard.SelectSource.BtnBack
  3533.       With .BtnCancel
  3534.         .ZOrder := 6
  3535.         .Move(3675, 4020, 825, 300)
  3536.       End With  'DataConConfigureWizard.SelectSource.BtnCancel
  3537.       With .ImgGraphic
  3538.         .ZOrder := 10
  3539.         .Move(225, 225, 2475, 3150)
  3540.         .Picture := DataConConfigureWizard.Bitmap
  3541.       End With  'DataConConfigureWizard.SelectSource.ImgGraphic
  3542.       With .LblInstruction
  3543.         .Caption := "Which Data Source would you like to use? Include any special parameters or Connect string arguments."
  3544.         .ZOrder := 7
  3545.         .Move(2850, 300, 4200, 750)
  3546.       End With  'DataConConfigureWizard.SelectSource.LblInstruction
  3547.       With .Frame1
  3548.         .ZOrder := 8
  3549.         .Move(75, 3795, 7050, 75)
  3550.       End With  'DataConConfigureWizard.SelectSource.Frame1
  3551.     End With  'DataConConfigureWizard.SelectSource
  3552.     With .FillSource
  3553.       .Caption := "Configure DataControl"
  3554.       .Move(5610, 2115, 7230, 4785)
  3555.       .DefaultButton := DataConConfigureWizard.FillSource.BtnNext
  3556.       .CancelButton := Nothing
  3557.       .wizard := DataConConfigureWizard
  3558.       .NextStep := DataConConfigureWizard.Branch
  3559.       .BackStep := DataConConfigureWizard.SelectSource
  3560.       With .LBTable
  3561.         .Caption := "LBTable"
  3562.         .ZOrder := 4
  3563.         .Move(2850, 1050, 4050, 1005)
  3564.       End With  'DataConConfigureWizard.FillSource.LBTable
  3565.       With .OBTable
  3566.         .Caption := "Use Table"
  3567.         .ZOrder := 3
  3568.         .Move(2850, 750, 2145, 225)
  3569.         .TabStop := True
  3570.       End With  'DataConConfigureWizard.FillSource.OBTable
  3571.       With .OBSQL
  3572.         .Caption := "Use SQL"
  3573.         .ZOrder := 2
  3574.         .Move(2850, 2250, 2145, 225)
  3575.       End With  'DataConConfigureWizard.FillSource.OBSQL
  3576.       With .TBSQL
  3577.         .ZOrder := 1
  3578.         .Move(2850, 2550, 4050, 1050)
  3579.         .WordWrap := True
  3580.         .MultiLine := True
  3581.         .ScrollBars := "Vertical"
  3582.       End With  'DataConConfigureWizard.FillSource.TBSQL
  3583.       With .BtnFinish
  3584.         .Enabled := False
  3585.         .ZOrder := 5
  3586.         .Move(6300, 4020, 825, 300)
  3587.       End With  'DataConConfigureWizard.FillSource.BtnFinish
  3588.       With .BtnNext
  3589.         .ZOrder := 6
  3590.         .Move(5400, 4020, 825, 300)
  3591.       End With  'DataConConfigureWizard.FillSource.BtnNext
  3592.       With .BtnBack
  3593.         .ZOrder := 7
  3594.         .Move(4575, 4020, 825, 300)
  3595.       End With  'DataConConfigureWizard.FillSource.BtnBack
  3596.       With .BtnCancel
  3597.         .ZOrder := 8
  3598.         .Move(3675, 4020, 825, 300)
  3599.       End With  'DataConConfigureWizard.FillSource.BtnCancel
  3600.       With .ImgGraphic
  3601.         .ZOrder := 9
  3602.         .Move(225, 225, 2475, 3150)
  3603.         .Picture := DataConConfigureWizard.Bitmap
  3604.       End With  'DataConConfigureWizard.FillSource.ImgGraphic
  3605.       With .LblInstruction
  3606.         .Caption := "How would you like to fill in the Source?"
  3607.         .ZOrder := 10
  3608.         .Move(2850, 300, 4200, 300)
  3609.       End With  'DataConConfigureWizard.FillSource.LblInstruction
  3610.       With .Frame1
  3611.         .ZOrder := 11
  3612.         .Move(75, 3795, 7050, 75)
  3613.       End With  'DataConConfigureWizard.FillSource.Frame1
  3614.     End With  'DataConConfigureWizard.FillSource
  3615.     With .StartStep
  3616.       .Caption := "Configure DataControl"
  3617.       .Move(5610, 2115, 7230, 4785)
  3618.       .DefaultButton := DataConConfigureWizard.StartStep.BtnNext
  3619.       .CancelButton := Nothing
  3620.       .wizard := DataConConfigureWizard
  3621.       .NextStep := DataConConfigureWizard.SelectSource
  3622.       .initialized := -1
  3623.       .ObjRef := Nothing
  3624.       With .OBAscii
  3625.         .Caption := "Ascii text file"
  3626.         .ZOrder := 4
  3627.         .Move(3240, 1725, 3525, 630)
  3628.       End With  'DataConConfigureWizard.StartStep.OBAscii
  3629.       With .OBODBC
  3630.         .Caption := "ODBC database"
  3631.         .ZOrder := 3
  3632.         .Move(3240, 1020, 3525, 630)
  3633.         .TabStop := True
  3634.         .Value := True
  3635.       End With  'DataConConfigureWizard.StartStep.OBODBC
  3636.       With .OBJump
  3637.         .Caption := "Modify existing layout properties"
  3638.         .ZOrder := 2
  3639.         .Move(3225, 2505, 3525, 630)
  3640.         .TabStop := True
  3641.         .Value := True
  3642.       End With  'DataConConfigureWizard.StartStep.OBJump
  3643.       With .BtnWhackLayout
  3644.         .Caption := "Destroy Existing Layout"
  3645.         .ZOrder := 1
  3646.         .Move(3525, 3000, 2700, 300)
  3647.       End With
  3648.       With .BtnFinish
  3649.         .Enabled := False
  3650.         .ZOrder := 5
  3651.         .Move(6300, 4020, 825, 300)
  3652.       End With  'DataConConfigureWizard.StartStep.BtnFinish
  3653.       With .BtnNext
  3654.         .ZOrder := 6
  3655.         .Move(5400, 4020, 825, 300)
  3656.       End With  'DataConConfigureWizard.StartStep.BtnNext
  3657.       With .BtnBack
  3658.         .Enabled := False
  3659.         .ZOrder := 7
  3660.         .Move(4575, 4020, 825, 300)
  3661.       End With  'DataConConfigureWizard.StartStep.BtnBack
  3662.       With .BtnCancel
  3663.         .ZOrder := 8
  3664.         .Move(3675, 4020, 825, 300)
  3665.       End With  'DataConConfigureWizard.StartStep.BtnCancel
  3666.       With .ImgGraphic
  3667.         .ZOrder := 9
  3668.         .Move(225, 225, 2475, 3150)
  3669.         .Picture := DataConConfigureWizard.Bitmap
  3670.       End With  'DataConConfigureWizard.StartStep.ImgGraphic
  3671.       With .LblInstruction
  3672.         .Caption := "Select which type of data to use."
  3673.         .ZOrder := 10
  3674.         .Move(2805, 225, 4245, 300)
  3675.       End With  'DataConConfigureWizard.StartStep.LblInstruction
  3676.       With .Frame1
  3677.         .ZOrder := 11
  3678.         .Move(75, 3795, 7050, 75)
  3679.       End With  'DataConConfigureWizard.StartStep.Frame1
  3680.     End With  'DataConConfigureWizard.StartStep
  3681.     With .ConfigText
  3682.       .Caption := "Configure DataControl"
  3683.       .Move(5610, 2115, 7230, 4785)
  3684.       .DefaultButton := DataConConfigureWizard.ConfigText.BtnNext
  3685.       .CancelButton := Nothing
  3686.       .wizard := DataConConfigureWizard
  3687.       .NextStep := DataConConfigureWizard.Branch
  3688.       .BackStep := DataConConfigureWizard.SelectFile
  3689.       With .CHKFirstLine
  3690.         .Caption := "First line as Field names"
  3691.         .Move(2925, 900, 3165, 300)
  3692.         .TabStop := False
  3693.       End With  'DataConConfigureWizard.ConfigText.CHKFirstLine
  3694.       With .OBDelim
  3695.         .Caption := "DelimitedAscii File"
  3696.         .Move(2925, 1500, 1905, 300)
  3697.       End With  'DataConConfigureWizard.ConfigText.OBDelim
  3698.       With .OBFixed
  3699.         .Caption := "FixedAscii File"
  3700.         .Move(2925, 1800, 3450, 300)
  3701.         .TabStop := True
  3702.       End With  'DataConConfigureWizard.ConfigText.OBFixed
  3703.       With .TBRowDelim
  3704.         .Caption := "RowDelimiter"
  3705.         .Move(5175, 2175, 1725, 300)
  3706.         .Visible := False
  3707.       End With  'DataConConfigureWizard.ConfigText.TBRowDelim
  3708.       With .TBRowDelimXpr
  3709.         .Caption := "RowDelimiter Expression"
  3710.         .Move(5175, 2550, 1725, 300)
  3711.         .Visible := False
  3712.       End With  'DataConConfigureWizard.ConfigText.TBRowDelimXpr
  3713.       With .TBFieldDelim
  3714.         .Caption := "Field Delimiter"
  3715.         .Move(5175, 2925, 1725, 300)
  3716.         .Visible := False
  3717.       End With  'DataConConfigureWizard.ConfigText.TBFieldDelim
  3718.       With .TBFieldDelimXpr
  3719.         .Caption := "FieldDelimiter Expression"
  3720.         .Move(5175, 3300, 1725, 300)
  3721.         .Visible := False
  3722.       End With  'DataConConfigureWizard.ConfigText.TBFieldDelimXpr
  3723.       With .TBNumFields
  3724.         .Caption := "Number Of Fields"
  3725.         .Move(4575, 2175, 2325, 375)
  3726.       End With  'DataConConfigureWizard.ConfigText.TBNumFields
  3727.       With .TBFieldWidth
  3728.         .Caption := "FieldWidth"
  3729.         .Move(4575, 2775, 2325, 450)
  3730.       End With  'DataConConfigureWizard.ConfigText.TBFieldWidth
  3731.       With .LBLRowDelim
  3732.         .Caption := "Row Delimiter"
  3733.         .Move(2775, 2175, 2235, 225)
  3734.         .Visible := False
  3735.         .WordWrap := False
  3736.         .TabStop := False
  3737.       End With  'DataConConfigureWizard.ConfigText.LBLRowDelim
  3738.       With .LBLFieldWidth
  3739.         .Caption := "Field widths"
  3740.         .Move(2775, 2775, 1635, 165)
  3741.         .TabStop := False
  3742.       End With  'DataConConfigureWizard.ConfigText.LBLFieldWidth
  3743.       With .LBLNumFields
  3744.         .Caption := "Number of fields"
  3745.         .Move(2775, 2250, 1635, 165)
  3746.         .TabStop := False
  3747.       End With  'DataConConfigureWizard.ConfigText.LBLNumFields
  3748.       With .LBLFieldDelim
  3749.         .Caption := "Field Delimiter"
  3750.         .Move(2775, 2925, 2235, 225)
  3751.         .Visible := False
  3752.         .TabStop := False
  3753.       End With  'DataConConfigureWizard.ConfigText.LBLFieldDelim
  3754.       With .LBLRowDelimXpr
  3755.         .Caption := "Row Delimiter Expression"
  3756.         .Move(2775, 2550, 2235, 225)
  3757.         .Visible := False
  3758.         .WordWrap := False
  3759.         .TabStop := False
  3760.       End With  'DataConConfigureWizard.ConfigText.LBLRowDelimXpr
  3761.       With .LBLFieldDelimXpr
  3762.         .Caption := "Field Delimiter Expression"
  3763.         .Move(2775, 3300, 2235, 225)
  3764.         .Visible := False
  3765.         .WordWrap := False
  3766.         .TabStop := False
  3767.       End With  'DataConConfigureWizard.ConfigText.LBLFieldDelimXpr
  3768.       With .BtnFinish
  3769.         .Enabled := False
  3770.         .Move(6300, 4020, 825, 300)
  3771.         .TabStop := False
  3772.       End With  'DataConConfigureWizard.ConfigText.BtnFinish
  3773.       With .BtnNext
  3774.         .ZOrder := 17
  3775.         .Move(5400, 4020, 825, 300)
  3776.       End With  'DataConConfigureWizard.ConfigText.BtnNext
  3777.       With .BtnBack
  3778.         .ZOrder := 18
  3779.         .Move(4575, 4020, 825, 300)
  3780.       End With  'DataConConfigureWizard.ConfigText.BtnBack
  3781.       With .BtnCancel
  3782.         .ZOrder := 19
  3783.         .Move(3675, 4020, 825, 300)
  3784.         .TabStop := False
  3785.       End With  'DataConConfigureWizard.ConfigText.BtnCancel
  3786.       With .ImgGraphic
  3787.         .ZOrder := 20
  3788.         .Move(225, 225, 2475, 3150)
  3789.         .Picture := DataConConfigureWizard.Bitmap
  3790.         .TabStop := False
  3791.       End With  'DataConConfigureWizard.ConfigText.ImgGraphic
  3792.       With .LblInstruction
  3793.         .Caption := "Select text file type and configuration options."
  3794.         .ZOrder := 21
  3795.         .Move(2925, 300, 4125, 450)
  3796.         .TabStop := False
  3797.       End With  'DataConConfigureWizard.ConfigText.LblInstruction
  3798.       With .Frame1
  3799.         .ZOrder := 22
  3800.         .Move(75, 3795, 7050, 75)
  3801.         .TabStop := False
  3802.       End With  'DataConConfigureWizard.ConfigText.Frame1
  3803.     End With  'DataConConfigureWizard.ConfigText
  3804.     With .SelectFile
  3805.       .Caption := "Configure DataControl"
  3806.       .Move(5610, 2115, 7230, 4785)
  3807.       .DefaultButton := DataConConfigureWizard.SelectFile.BtnNext
  3808.       .CancelButton := Nothing
  3809.       .wizard := DataConConfigureWizard
  3810.       .NextStep := DataConConfigureWizard.ConfigText
  3811.       .BackStep := DataConConfigureWizard.StartStep
  3812.       .DATABASE := Nothing
  3813.       With .TBFileName
  3814.         .Caption := "TBFileName"
  3815.         .ZOrder := 4
  3816.         .Move(2850, 750, 4050, 450)
  3817.       End With  'DataConConfigureWizard.SelectFile.TBFileName
  3818.       With .BTNBrowse
  3819.         .Caption := "Browse..."
  3820.         .ZOrder := 3
  3821.         .Move(5700, 1275, 1200, 300)
  3822.       End With  'DataConConfigureWizard.SelectFile.BTNBrowse
  3823.       With .TBFileView
  3824.         .Caption := "TBFileView"
  3825.         .ForeColor := 0
  3826.         .Font := DataConConfigureWizard.SelectFile.TBFileView.font
  3827.         .ZOrder := 2
  3828.         .Move(2850, 1950, 4050, 1650)
  3829.         .WordWrap := True
  3830.         .MultiLine := True
  3831.         .ScrollBars := "Both"
  3832.         With .font
  3833.           .FaceName := "Lucida Console"
  3834.           .Size := 8.000000
  3835.           .Bold := True
  3836.           .Italic := False
  3837.           .Strikethru := False
  3838.         End With  'DataConConfigureWizard.SelectFile.TBFileView.font
  3839.       End With  'DataConConfigureWizard.SelectFile.TBFileView
  3840.       With .BTNViewFile
  3841.         .Caption := "View File"
  3842.         .ZOrder := 1
  3843.         .Move(2850, 1575, 1500, 300)
  3844.       End With  'DataConConfigureWizard.SelectFile.BTNViewFile
  3845.       With .BtnFinish
  3846.         .Enabled := False
  3847.         .ZOrder := 5
  3848.         .Move(6300, 4020, 825, 300)
  3849.       End With  'DataConConfigureWizard.SelectFile.BtnFinish
  3850.       With .BtnNext
  3851.         .ZOrder := 6
  3852.         .Move(5400, 4020, 825, 300)
  3853.       End With  'DataConConfigureWizard.SelectFile.BtnNext
  3854.       With .BtnBack
  3855.         .ZOrder := 7
  3856.         .Move(4575, 4020, 825, 300)
  3857.       End With  'DataConConfigureWizard.SelectFile.BtnBack
  3858.       With .BtnCancel
  3859.         .ZOrder := 8
  3860.         .Move(3675, 4020, 825, 300)
  3861.       End With  'DataConConfigureWizard.SelectFile.BtnCancel
  3862.       With .ImgGraphic
  3863.         .ZOrder := 9
  3864.         .Move(225, 225, 2475, 3150)
  3865.         .Picture := DataConConfigureWizard.Bitmap
  3866.       End With  'DataConConfigureWizard.SelectFile.ImgGraphic
  3867.       With .LblInstruction
  3868.         .Caption := "Type the filename of the file to use or press Browse."
  3869.         .ZOrder := 10
  3870.         .Move(2850, 150, 4200, 450)
  3871.       End With  'DataConConfigureWizard.SelectFile.LblInstruction
  3872.       With .Frame1
  3873.         .ZOrder := 11
  3874.         .Move(75, 3795, 7050, 75)
  3875.       End With  'DataConConfigureWizard.SelectFile.Frame1
  3876.     End With  'DataConConfigureWizard.SelectFile
  3877.     With .ConfigCtrls
  3878.       .Caption := "Configure DataControl"
  3879.       .Move(5610, 2115, 7230, 4785)
  3880.       .DefaultButton := DataConConfigureWizard.ConfigCtrls.BtnFinish
  3881.       .CancelButton := Nothing
  3882.       .wizard := DataConConfigureWizard
  3883.       .BackStep := DataConConfigureWizard.Branch
  3884.       .DATABASE := Nothing
  3885.       With .LBControls
  3886.         .Caption := "LBControls"
  3887.         .ZOrder := 6
  3888.         .Move(2700, 825, 4350, 810)
  3889.         .IntegralHeight := False
  3890.       End With  'DataConConfigureWizard.ConfigCtrls.LBControls
  3891.       With .BTNClearLB
  3892.         .Caption := "Clear List"
  3893.         .Move(5550, 1650, 1500, 225)
  3894.       End With  'DataConConfigureWizard.ConfigCtrls.BTNClearLB
  3895.       With .LBFields
  3896.         .Caption := "LBFields"
  3897.         .ZOrder := 5
  3898.         .Move(3450, 2475, 3600, 1200)
  3899.         .Sorted := False
  3900.         .IntegralHeight := False
  3901.       End With  'DataConConfigureWizard.ConfigCtrls.LBFields
  3902.       With .BTNAdd
  3903.         .Caption := "Add"
  3904.         .ZOrder := 4
  3905.         .Move(3975, 2100, 900, 300)
  3906.       End With  'DataConConfigureWizard.ConfigCtrls.BTNAdd
  3907.       With .BTNRemove
  3908.         .Caption := "Remove"
  3909.         .ZOrder := 3
  3910.         .Move(4950, 2100, 900, 300)
  3911.       End With  'DataConConfigureWizard.ConfigCtrls.BTNRemove
  3912.       With .LBLControls
  3913.         .Caption := "Controls"
  3914.         .ZOrder := 14
  3915.         .Move(2775, 900, 900, 210)
  3916.         .Alignment := "Center"
  3917.       End With  'DataConConfigureWizard.ConfigCtrls.LBLControls
  3918.       With .LBLFields
  3919.         .Caption := "Fields"
  3920.         .ZOrder := 2
  3921.         .Move(2775, 2475, 600, 210)
  3922.         .Alignment := "Center"
  3923.       End With  'DataConConfigureWizard.ConfigCtrls.LBLFields
  3924.       With .DragFeedback
  3925.         .ZOrder := 1
  3926.         .Move(2700, 1875, 4350, 225)
  3927.       End With  'DataConConfigureWizard.ConfigCtrls.DragFeedback
  3928.       With .BtnFinish
  3929.         .ZOrder := 7
  3930.         .Move(6300, 4020, 825, 300)
  3931.       End With  'DataConConfigureWizard.ConfigCtrls.BtnFinish
  3932.       With .BtnNext
  3933.         .Enabled := False
  3934.         .ZOrder := 8
  3935.         .Move(5400, 4020, 825, 300)
  3936.       End With  'DataConConfigureWizard.ConfigCtrls.BtnNext
  3937.       With .BtnBack
  3938.         .ZOrder := 9
  3939.         .Move(4575, 4020, 825, 300)
  3940.       End With  'DataConConfigureWizard.ConfigCtrls.BtnBack
  3941.       With .BtnCancel
  3942.         .Enabled := False
  3943.         .ZOrder := 10
  3944.         .Move(3675, 4020, 825, 300)
  3945.       End With  'DataConConfigureWizard.ConfigCtrls.BtnCancel
  3946.       With .ImgGraphic
  3947.         .ZOrder := 11
  3948.         .Move(225, 225, 2475, 3150)
  3949.         .Picture := DataConConfigureWizard.Bitmap
  3950.       End With  'DataConConfigureWizard.ConfigCtrls.ImgGraphic
  3951.       With .LblInstruction
  3952.         .Caption := "Select controls and assign fields to them. ^M^J(Add Controls by dragging them with right mouse button onto box below.Be sure form edit is off.)"
  3953.         .ZOrder := 12
  3954.         .Move(2850, 150, 4200, 600)
  3955.       End With  'DataConConfigureWizard.ConfigCtrls.LblInstruction
  3956.       With .Frame1
  3957.         .ZOrder := 13
  3958.         .Move(75, 3795, 7050, 75)
  3959.       End With  'DataConConfigureWizard.ConfigCtrls.Frame1
  3960.     End With  'DataConConfigureWizard.ConfigCtrls
  3961.     With .Bitmap
  3962.       .LoadType := "MemoryBased"
  3963.       .FileName := "dbtools.ero"
  3964.       .ResId := 3884
  3965.     End With  'DataConConfigureWizard.Bitmap
  3966.   End With  'DataConConfigureWizard
  3967. End Code
  3968.