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

  1. Begin Code
  2.   ModuleManager.PublishObjectDLL("evcdlg.dll")
  3. End Code
  4.  
  5. Type DefaultDialogFont From Font
  6. End Type
  7.  
  8. Type CommonDialog From CommonDialog
  9. End Type
  10.  
  11. Type ColorDialog From ColorDialog
  12. End Type
  13.  
  14. Type WizardMaster
  15.   Const WM_BACK& = 3
  16.   Const WM_NEXT& = 4
  17.   Type StepTraverser
  18.     Dim theStep As WizardMaster.FrmStep
  19.  
  20.     ' METHODS for object: WizardMaster.StepTraverser
  21.     Sub FindFirstStep(o As Object)
  22.       If TypeOf o Is WizardMaster.FrmStep Then 
  23.         If Not o.BackStep Then 
  24.           theStep = o
  25.         End If
  26.       End If
  27.     End Sub
  28.  
  29.     Sub FindLastStep(o As Object)
  30.       If TypeOf o Is WizardMaster.FrmStep Then 
  31.         If Not o.NextStep Then 
  32.           theStep = o
  33.         End If
  34.       End If
  35.     End Sub
  36.  
  37.     Sub Init(o As Object)
  38.       If TypeOf o Is WizardMaster.FrmStep Then 
  39.         o.initialized = False
  40.       End If
  41.     End Sub
  42.  
  43.     Sub SetCaption(o As Object)
  44.       If TypeOf o Is WizardMaster.FrmStep Then 
  45.         o.Caption = o.wizard.Title
  46.       End If
  47.     End Sub
  48.  
  49.   End Type
  50.   Type Wizard
  51.     Dim Bitmap As New Bitmap
  52.     Dim title_ As String
  53.     Property Title Get getTitle Set setTitle As String
  54.     Property GraphicFileName Get getGraphicFileName Set setGraphicFileName As String
  55.     Property FirstStep Get getFirstStep Set setFirstStep As WizardMaster.FrmStep
  56.     Property LastStep Get getLastStep Set setLastStep As WizardMaster.FrmStep
  57.     Event Finish(ok As Boolean)
  58.     Event Cancel()
  59.  
  60.     ' METHODS for object: WizardMaster.Wizard
  61.     Function getFirstStep() As WizardMaster.FrmStep
  62.       Dim t As New WizardMaster.StepTraverser
  63.       EnumObjectEmbeds(Me, t, "FindFirstStep")
  64.       getFirstStep = t.theStep
  65.     End Function
  66.  
  67.     Function getGraphicFileName() As String
  68.       getGraphicFileName = Bitmap.FileName
  69.     End Function
  70.  
  71.     Function getLastStep() As WizardMaster.FrmStep
  72.       Dim t As New WizardMaster.StepTraverser
  73.       EnumObjectEmbeds(Me, t, "FindLastStep")
  74.       getLastStep = t.theStep
  75.     End Function
  76.  
  77.     Function getTitle() as String
  78.       getTitle = title_
  79.     End Function
  80.  
  81.     Function NewStep(name as String) As WizardMaster.FrmStep
  82.       Dim s as WizardMaster.FrmStep
  83.       Dim prevStep as WizardMaster.FrmStep
  84.     
  85.       ' Verify that we don't already have step with this name
  86.       If FindEmbed(Me, name) Then Throw DuplicateStep(name)
  87.     
  88.       ' Cache LastStep prior to embedding new step
  89.       ' (prior to hooking up new step, LastStep is unreliable)
  90.       prevStep = LastStep
  91.     
  92.       ' Embed a step in the form
  93.       s = EmbedObject(Me, WizardMaster.FrmStep, name)
  94.     
  95.       ' Let the step connect to us as its containing wizard
  96.       s.ConnectToWizard(Me, prevStep, Nothing)
  97.     
  98.       ' Return the new step
  99.       NewStep = s
  100.     End Function
  101.  
  102.     Sub RemoveStep(s as WizardMaster.FrmStep)
  103.       ' Remove this step from the group
  104.       s.DisconnectFromWizard
  105.     
  106.       ' Destroy the step
  107.       DestroyObject(s)
  108.     
  109.     End Sub
  110.  
  111.     Sub RemoveStepByName(name as String)
  112.       Dim s as WizardMaster.FrmStep
  113.     
  114.       ' Find the step we want to remove, or throw
  115.       s = FindObject(name)
  116.       If Not s Then Throw StepNotFound(name)
  117.     
  118.       ' Remove this step
  119.       RemoveStep(s)
  120.     End Sub
  121.  
  122.     Sub setFirstStep(s As WizardMaster.FrmStep)
  123.       Dim currentFirst As WizardMaster.FrmStep
  124.     
  125.       If Not s || HostObject(s) <> Me Then Exit Sub
  126.     
  127.       ' Find the current first step
  128.       currentFirst = FirstStep
  129.       If currentFirst = s Then Exit Sub
  130.     
  131.       ' Disconnect the incoming step from us (the wizard)
  132.       s.DisconnectFromWizard
  133.     
  134.       ' Hook up the Back & Next steps accordingly
  135.       s.BackStep = Nothing
  136.       s.NextStep = currentFirst
  137.     
  138.       If currentFirst Then currentFirst.BackStep = s
  139.     
  140.     End Sub
  141.  
  142.     Sub setGraphicFileName(n as String)
  143.       Bitmap.FileName = n
  144.     End Sub
  145.  
  146.     Sub setLastStep(s As WizardMaster.FrmStep)
  147.       Dim currentLast As WizardMaster.FrmStep
  148.     
  149.       If Not s || HostObject(s) <> Me Then Exit Sub
  150.     
  151.     
  152.       ' Find the current last step
  153.       currentLast = LastStep
  154.       If currentLast = s Then Exit Sub
  155.     
  156.       ' Disconnect the incoming step from us (the wizard)
  157.       s.DisconnectFromWizard
  158.     
  159.       ' Hook up the Back & Next steps accordingly
  160.       s.BackStep = currentLast
  161.       s.NextStep = Nothing
  162.     
  163.       If currentLast Then currentLast.NextStep = s
  164.     End Sub
  165.  
  166.     Sub setTitle(newTitle as String)
  167.       Dim t as WizardMaster.StepTraverser
  168.       title_ = newTitle
  169.       EnumObjectEmbeds(Me, t, "SetCaption")
  170.     End Sub
  171.  
  172.     Sub Show
  173.       Dim t As New WizardMaster.StepTraverser
  174.     
  175.       ' If we have no first step, inform user of an empty wizard
  176.       If Not FirstStep Then 
  177.         InfoBox.Message("Incomplete Wizard", "Wizard " & Me & " has no steps.")
  178.         Exit Sub
  179.       End If
  180.     
  181.       ' Set the initialize property of each step to False
  182.       EnumObjectEmbeds(Me, t, "Init")
  183.     
  184.       ' Display the first step
  185.       FirstStep.Center
  186.       FirstStep.Display(Nothing, "Next", False)
  187.     End Sub
  188.  
  189.     Function ShowModal As Long
  190.       Dim r as Long
  191.       Dim nextStep, currStep as WizardMaster.FrmStep
  192.       Dim defaultDirection as String
  193.       Dim t As New WizardMaster.StepTraverser
  194.     
  195.       ' If we have no first step, inform user of an empty wizard
  196.       If Not FirstStep Then 
  197.         InfoBox.Message("Incomplete Wizard", "Wizard " & Me & " has no steps.")
  198.         Exit Function
  199.       End If
  200.     
  201.       ' Set the initialize property of each step to False
  202.       EnumObjectEmbeds(Me, t, "Init")
  203.     
  204.       ' Until we get a cancel or finish, display steps.
  205.       currStep = Nothing
  206.       nextStep = FirstStep
  207.       defaultDirection = "Next"
  208.       Do
  209.         r = nextStep.Display(currStep, defaultDirection, True)
  210.         currStep = nextStep
  211.         If (r = WizardMaster.WM_BACK) Then 
  212.           nextStep = currStep.BackStep
  213.           defaultDirection = "Back"
  214.         ElseIf (r = WizardMaster.WM_NEXT) Then 
  215.           nextStep = currStep.NextStep
  216.           defaultDirection = "Next"
  217.         Else 
  218.           ShowModal = r
  219.           Exit Function
  220.         End If
  221.       Loop While True
  222.     
  223.     End Function
  224.  
  225.   End Type
  226.   Type FrmStep From Form
  227.     Dim wizard As Object
  228.     Dim BtnFinish As New Button
  229.     Dim BtnNext As New Button
  230.     Dim BtnBack As New Button
  231.     Dim BtnCancel As New Button
  232.     Dim ImgGraphic As New Image
  233.     Dim LblInstruction As New Label
  234.     Dim Frame1 As New Frame
  235.     Dim NextStep As Form
  236.     Dim BackStep As Form
  237.     Dim initialized As Long
  238.     Dim inheritImageSize As Long
  239.     Event Cancel()
  240.     Event ValidateBack(ok As Boolean)
  241.     Event ValidateDisplay(ok As Boolean)
  242.     Event ValidateNext(ok As Boolean)
  243.     Event ValidateFinish(ok As Boolean)
  244.  
  245.     ' METHODS for object: WizardMaster.FrmStep
  246.     Sub BtnBack_Click()
  247.       Dim ok As Boolean
  248.     
  249.       ' If we have no previous step, throw
  250.       If Not BackStep Then Throw NoBackStep
  251.     
  252.       ' Raise the back event on the step and its containing wizard
  253.       ok = True
  254.       SendEvent ValidateBack(ok)
  255.     
  256.       ' Return a WM_BACK result or display prev step if ok
  257.       If ok Then 
  258.         If ShownModal Then 
  259.           ModalResult WizardMaster.WM_BACK
  260.         Else 
  261.           BackStep.Display(Me, "Back", False)
  262.         End If
  263.       End If
  264.     End Sub
  265.  
  266.     Sub BtnCancel_Click()
  267.     
  268.       ' Raise the Cancel event on the step and containing wizard
  269.       ' This invokes Me.Cancel or wizard.StepName_Cancel if
  270.       ' either exists
  271.       SendEvent Cancel()
  272.     
  273.       ' Raise the Cancel event on the wizard alone.
  274.       ' This invokes wizard.Cancel if it exists
  275.       SendEvent wizard.Cancel()
  276.     
  277.       ' Hide and return a CANCEL result if ok
  278.       Hide
  279.       ModalResult IDCANCEL
  280.     End Sub
  281.  
  282.     Sub BtnFinish_Click()
  283.       Dim ok As Boolean
  284.     
  285.       ' Raise the validatefinish event on the step and its containing
  286.       ' wizard
  287.       ' This invokes: Me.ValidateFinish(ok) and
  288.       ' wizard.StepName_ValidateFinish(ok)
  289.       ' if either exists
  290.       ok = True
  291.       SendEvent ValidateFinish(ok)
  292.     
  293.       ' Also raise finish event on the wizard alone.
  294.       ' This invokes wizard.Finish(ok) if it exists.
  295.       SendEvent wizard.Finish(ok)
  296.     
  297.       ' Hide and return an OK result if ok
  298.       If ok Then 
  299.         Hide
  300.         ModalResult IDOK
  301.       End If
  302.     End Sub
  303.  
  304.     Sub BtnNext_Click()
  305.       Dim ok As Boolean
  306.     
  307.       ' If we have no next step, throw
  308.       If Not NextStep Then Throw NoNextStep
  309.     
  310.       ' Raise the next event on the step and its containing wizard
  311.       ok = True
  312.       SendEvent ValidateNext(ok)
  313.     
  314.       ' Return a WM_NEXT result or display next step if ok
  315.       If ok Then 
  316.         If ShownModal Then 
  317.           ModalResult WizardMaster.WM_NEXT
  318.         Else 
  319.           NextStep.Display(Me, "Next", False)
  320.         End If
  321.       End If
  322.     End Sub
  323.  
  324.     Sub ConnectToWizard(w as WizardMaster.Wizard, prevStep as WizardMaster.FrmStep, nextStep as WizardMaster.FrmStep)
  325.     
  326.       ' Cache away the wizard parent pointer
  327.       wizard = w
  328.     
  329.       ' Insert us between the steps
  330.       BackStep = prevStep
  331.       NextStep = nextStep
  332.     
  333.       ' Fix up preceding and next steps if there
  334.       If nextStep Then nextStep.BackStep = Me
  335.       If prevStep Then prevStep.NextStep = Me
  336.     
  337.       ' Set step's caption to the name of the wizard
  338.       Caption = wizard.Title
  339.     
  340.       ' Connect the step's graphic to our default bitmap
  341.       ImgGraphic.Picture = wizard.Bitmap
  342.     
  343.       ' Initialize the instruction field
  344.       LblInstruction.Caption = "Write instructions for step " & Me & " here..."
  345.     End Sub
  346.  
  347.     Sub DisconnectFromWizard()
  348.     
  349.       ' If we don't have a wizard, we are disconnected
  350.       If Not wizard Then Exit Sub
  351.     
  352.       ' If we had a previous step, fix up his next reference
  353.       If BackStep Then BackStep.NextStep = NextStep
  354.     
  355.       ' If we have a next step, fix up his previous reference
  356.       If NextStep Then NextStep.BackStep = BackStep
  357.     
  358.     End Sub
  359.  
  360.     Function Display (curStep As WizardMaster.FrmStep, direction As String, modal As Boolean) As Long
  361.       Dim ok as Boolean
  362.     
  363.       ' Enable Next and Back buttons if they lead somewhere
  364.       BtnBack.Enabled = BackStep
  365.       BtnNext.Enabled = NextStep
  366.     
  367.       ' Set default button based on direction and position
  368.       If direction = "Next" Then 
  369.         DefaultButton = IIf(NextStep, BtnNext, BtnFinish)
  370.       Else 
  371.         DefaultButton = IIf(BackStep, BtnBack, IIf(NextStep, BtnNext, BtnFinish))
  372.       End If
  373.       DefaultButton.SetFocus
  374.     
  375.       ' Move me to the same position as curStep form
  376.       If curStep Then Move(curStep.Left, curStep.Top, curStep.Width, curStep.Height)
  377.     
  378.       ' Validate the show by rasing the ValidateDisplay Event
  379.       ' ok is passed by reference, so we will see any changes
  380.       ' handlers make to it. Load the form prior to validate to
  381.       ' ensure creation of windows for controls we may be initing
  382.       ok = True
  383.       LoadForm
  384.       SendEvent ValidateDisplay(ok)
  385.     
  386.       ' If Display is not valid, throw
  387.       If Not ok Then Throw InvalidStep
  388.     
  389.       ' Show me
  390.       Show
  391.     
  392.     
  393.       ' If we are coming from somewhare...
  394.       If curStep Then 
  395.         ' Hide the curStep form
  396.         curStep.Hide
  397.     
  398.         ' If we moved forward from this place,
  399.         ' make sure we can get back
  400.         If direction = "Next" Then BackStep = curStep
  401.     
  402.       End If
  403.     
  404.       Display = IIf(modal, ShowModal, -1)
  405.     End Function
  406.  
  407.     Sub Resize()
  408.       Dim hMargin, vMargin As Integer
  409.       Dim btnTop as Integer
  410.     
  411.       ' Initialize margins
  412.       hMargin = 75 : vMargin = 150
  413.     
  414.       ' Position Buttons. Use finish size to enforce uniformity
  415.       btnTop = ScaleHeight - vMargin - BtnFinish.Height
  416.       BtnFinish.Move(ScaleWidth - hMargin - BtnFinish.Width, btnTop, BtnFinish.Width, BtnFinish.Height)
  417.       BtnNext.Move(BtnFinish.Left - hMargin - BtnFinish.Width, btnTop, BtnFinish.Width, BtnFinish.Height)
  418.       BtnBack.Move(BtnNext.Left - BtnFinish.Width, btnTop, BtnFinish.Width, BtnFinish.Height)
  419.       BtnCancel.Move(BtnBack.Left - hMargin - BtnFinish.Width, btnTop, BtnFinish.Width, BtnFinish.Height)
  420.     
  421.       ' Position the Button separator
  422.       Frame1.Move(hMargin, btnTop - (vMargin + hMargin), ScaleWidth - (2 * hMargin), Frame1.Height)
  423.     
  424.       ' Position the image if we have a wizard and we aren't
  425.       ' the first step
  426.       If wizard && inheritImageSize && wizard.FirstStep Then 
  427.         If wizard.FirstStep <> Me Then 
  428.           Dim pi As Image
  429.           pi = wizard.FirstStep.ImgGraphic
  430.           ImgGraphic.Move(pi.Left, pi.Top, pi.Width, pi.Height)
  431.         End If
  432.       End If
  433.     
  434.       ' Position the Instruction label
  435.       LblInstruction.Width = ScaleWidth - LblInstruction.Left - 2 * hMargin
  436.     End Sub
  437.  
  438.   End Type
  439.   Dim Font As New Font
  440.  
  441.   ' METHODS for object: WizardMaster
  442.   Function NewWizard(name as String, title as String) As WizardMaster.Wizard
  443.     Dim w as WizardMaster.Wizard
  444.   
  445.     ' Verify that the name is open
  446.     If (FindObject(name)) Then Throw DuplicateWizard(name)
  447.   
  448.     ' Create a top level object with the given name as a kind
  449.     ' of wizard
  450.     w = CopyObject(Wizard, name)
  451.   
  452.     ' Set wizard's title
  453.     w.Title = title
  454.   
  455.     ' Return the new wizard
  456.     NewWizard = w
  457.   End Function
  458.  
  459. End Type
  460.  
  461. Type SelectDirectoryDialog From Form
  462.   Type BtnOk From Button
  463.  
  464.     ' METHODS for object: SelectDirectoryDialog.BtnOk
  465.     Sub Click()
  466.       If Parent Then 
  467.         Parent.ModalResult IDOK
  468.         Parent.Hide
  469.       End If
  470.     End Sub
  471.  
  472.   End Type
  473.   Type BtnCancel From Button
  474.  
  475.     ' METHODS for object: SelectDirectoryDialog.BtnCancel
  476.     Sub Click()
  477.       If Parent Then 
  478.         Parent.ModalResult IDCANCEL
  479.         Parent.Hide
  480.       End If
  481.     End Sub
  482.  
  483.   End Type
  484.   Dim TbDir As New TextBox
  485.   Dim LblDir As New Label
  486.   Dim CbDrives As New FileComboBox
  487.   Dim LblDrive As New Label
  488.   Type LstDirs From IndentedList
  489.     Dim bitmap As New Bitmap
  490.     Dim scratchLevel As Integer
  491.     Dim scratchPos As Integer
  492.     Dim scratchIndex As Integer
  493.     Dim CurrDrive As String
  494.     Dim scratchParent As Integer
  495.     Property SelPath Get GetSelPath Set SetSelPath As String
  496.  
  497.     ' METHODS for object: SelectDirectoryDialog.LstDirs
  498.     Sub AddExpansionItem(filename As String, attr As Long)
  499.       If attr And &H10 Then  ' It's a directory
  500.         Dim i As Integer
  501.         i = InsertItem(Mid(filename, scratchPos), 0, scratchLevel, scratchIndex)
  502.         SetItemCanExpand(i, True)
  503.         SetItemData(i, scratchParent)
  504.       End If
  505.     End Sub
  506.  
  507.     Sub Collapsed(ByVal itemIndex as Integer, ByVal itemData as Long, itemObj as Object)
  508.       SetItemIcon(itemIndex, 0)
  509.     End Sub
  510.  
  511.     Sub Expand(ByVal itemIndex as Integer, ByVal itemData as Long, itemObj as Object)
  512.       Dim path As String
  513.       Dim dir As New Directory
  514.       Dim count As Long
  515.       count = ListCount
  516.       path = GetItemPath(itemIndex, itemData)
  517.       dir.Path = path
  518.       scratchLevel = ItemLevel(itemIndex) + 1
  519.       scratchIndex = itemIndex + 1
  520.       scratchPos = Len(path) + 2
  521.       scratchParent = itemIndex
  522.       dir.EnumContents(Me, "AddExpansionItem", "", False)
  523.       If ListCount > count Then SetItemIcon(itemIndex, 1)
  524.     End Sub
  525.  
  526.     Function FindDir(path As String) As Integer
  527.       Dim i, l As Integer
  528.       Dim p, r As String
  529.       Dim pos As Integer
  530.     
  531.       ' Make sure the drive part of path is the same as CurrDrive
  532.       If StrComp(CurrDrive, Left(path, 3), 1) Then 
  533.         FindDir = -1
  534.         Exit Function
  535.       End If
  536.     
  537.       ' For each component of path, find item at successive levels or bail.
  538.       r = Mid(path, 4)
  539.       l = 0 : i = -1
  540.       While r <> ""
  541.         pos = Instr(r, "\")
  542.         If pos Then 
  543.           p = Left(r, pos - 1)
  544.           r = Mid(r, pos + 1)
  545.         Else 
  546.           p = r
  547.           r = ""
  548.         End If
  549.         ExpandItem(i)
  550.         i = FindItem(p, i + 1, l, False)
  551.         If i < 0 Then 
  552.           FindDir = -1
  553.           Exit Function
  554.         Else 
  555.           l = l + 1
  556.         End If
  557.       Wend
  558.     
  559.       ' If we get here, the i'th item matched given path
  560.       FindDir = i
  561.     End Function
  562.  
  563.     Function FindItem(itemString As String, ByVal startIndex As Integer, ByVal restrictLevel As Integer, ByVal caseSensitive As Boolean) As Integer
  564.       Dim i, l, n As Integer
  565.       i = startIndex
  566.       n = ListCount
  567.       While i < n
  568.         l = ItemLevel(i)
  569.         If l < restrictLevel Then 
  570.           i = n ' Exit loop and fail
  571.         ElseIf restrictLevel = -1 || l = restrictLevel Then 
  572.           If StrComp(itemString, ItemString(i), Not caseSensitive) = 0 Then 
  573.             FindItem = i
  574.             Exit Function
  575.           End If
  576.         End If
  577.         i = i + 1
  578.       Wend
  579.       FindItem = -1
  580.     End Function
  581.  
  582.     Function GetItemPath(ByVal itemIndex As Integer, ByVal itemData As Long) As String
  583.       Dim path As String
  584.       path = ItemString(itemIndex)
  585.       While itemData >= 0
  586.         path = ItemString(itemData) & "\" & path
  587.         itemData = ItemData(itemData)
  588.       Wend
  589.       GetItemPath = CurrDrive & path
  590.     End Function
  591.  
  592.     Function GetSelPath() As String
  593.       Dim i As Integer
  594.       i = ListIndex
  595.       GetSelPath = IIf(i >= 0, GetItemPath(i, ItemData(i)), "")
  596.     End Function
  597.  
  598.     Sub ResetDrive(newDrv As String)
  599.       Dim dir As New Directory
  600.       Clear
  601.       scratchPos = 4
  602.       scratchIndex = 0
  603.       scratchLevel = 0
  604.       scratchParent = -1
  605.       CurrDrive = newDrv & "\"
  606.       dir.Path = CurrDrive
  607.       dir.EnumContents(Me, "AddExpansionItem", "", False)
  608.     End Sub
  609.  
  610.     Sub SetSelPath(path As String)
  611.       ListIndex = FindDir(path)
  612.     End Sub
  613.  
  614.   End Type
  615.   Dim dir As New Directory
  616.   Dim ignoreClick As Boolean
  617.   Dim dirMustExist As Boolean
  618.  
  619.   ' METHODS for object: SelectDirectoryDialog
  620.   Sub AddRootDirItem(filename As String, attr As Long)
  621.     If attr And &H10 Then  ' It's a directory
  622.       LstDirs.AddItem(Mid(filename, 4), 0)
  623.     End If
  624.   End Sub
  625.  
  626.   Sub CbDrives_Click()
  627.     Dim drvCurrDir, saveCurrDir, newDrv As String
  628.   
  629.     ' Find current dir for the new drive, reset to show that dir.
  630.     newDrv = CbDrives.SelPath
  631.     saveCurrDir = dir.CurrentDir
  632.     dir.CurrentDir = newDrv
  633.     drvCurrDir = dir.CurrentDir
  634.     dir.CurrentDir = saveCurrDir
  635.     TbDir.Text = drvCurrDir
  636.   
  637.     ' Init dirs list with top-level directories on new drive.
  638.     LstDirs.ResetDrive(newDrv)
  639.     LstDirs.SelPath = drvCurrDir
  640.   End Sub
  641.  
  642.   Sub CreateDirectory(path As String)
  643.     ' For each element of path, ensure dir exists or make it.
  644.     ' If can't ensure/make any element, bail with a message box.
  645.     Dim s, p, r As String
  646.     Dim pos As Integer
  647.   
  648.     ' For each component of path, find item at successive levels or bail.
  649.     p = Left(path, 3)
  650.     r = Mid(path, 4)
  651.     While r <> ""
  652.       pos = Instr(r, "\")
  653.       If pos Then 
  654.         s = Left(r, pos)
  655.         r = Mid(r, pos + 1)
  656.       Else 
  657.         s = r
  658.         r = ""
  659.       End If
  660.       p = p & s
  661.       dir.Path = p
  662.       If Not dir.Exists Then dir.Create
  663.       If Not dir.Exists Then 
  664.         Dim errBox As New MessageBox
  665.         errBox.SetIconExclamation
  666.         errBox.Message("Error", "Unable to create directory:^M" & path)
  667.         Exit Sub
  668.       End If
  669.     Wend
  670.   
  671.   End Sub
  672.  
  673.   Function Execute(initialPath As String, mustExist As Boolean, promptToCreate As Boolean) As String
  674.     ' 
  675.     ' Returns empty string on ANY cancel, dir path on OK.
  676.     ' 
  677.     ' If 'mustExist', then user can only select existing dirs, and 'promptToCreate' is ignored.
  678.     ' If not 'mustExist', then:
  679.     ' - If 'promptToCreate' and selected dir doesn't exist, user is asked whether to create it.
  680.     ' 
  681.     Dim r As Long
  682.     LoadForm
  683.     dir.Path = initialPath
  684.     dirMustExist = mustExist
  685.     BtnOk.Enabled = True
  686.     ReconfigLists
  687.     r = ShowModal
  688.     If r = IDOK Then 
  689.       Dim text As String
  690.       text = TbDir.Text
  691.       If Not mustExist && promptToCreate Then 
  692.         dir.Path = text
  693.         If Not dir.Exists Then 
  694.           Dim ync As New YesNoCancelBox
  695.           ync.title = "Create directory"
  696.           ync.message = "Directory:^M" & text & "^Mdoes not exist.^M^MCreate directory?"
  697.           Select Case ync.Execute
  698.             Case IDYES
  699.               CreateDirectory(text)
  700.             Case IDNO
  701.             ' Do nothing, Execute will still return selected directory.
  702.             Case Else ' IDCANCEL or error
  703.               ' Cancel entire directory select.
  704.               Execute = ""
  705.               Exit Function
  706.           End Select
  707.         End If
  708.       End If
  709.       Execute = text
  710.     Else 
  711.       Execute = ""
  712.     End If
  713.   End Function
  714.  
  715.   Sub LstDirs_Click()
  716.     If Not ignoreClick Then TbDir.Text = LstDirs.SelPath
  717.   End Sub
  718.  
  719.   Sub ReconfigLists
  720.     Dim path As String
  721.     path = dir.FullPathName
  722.     If path = "" Then path = dir.CurrentDir
  723.     CbDrives.SelectDrive(Left(path, 2))
  724.     CbDrives_Click
  725.     TbDir.Text = path
  726.   End Sub
  727.  
  728.   Sub Resize()
  729.     Dim m, mm, l, t, w, h, effWidth As Single
  730.     m = 75 : mm = 150
  731.     effWidth = IIf(ScaleWidth < 3000, 3000, ScaleWidth)
  732.     w = BtnOk.Width
  733.     l = effWidth - m - w
  734.     t = BtnOk.Top
  735.     h = BtnOk.Height
  736.     BtnOk.Move(l, t, w, h)
  737.     t = t + h + m
  738.     BtnCancel.Move(l, t, w, h)
  739.     t = t + h + mm
  740.     LblDrive.Move(l, t, w, h - m)
  741.     t = t + h
  742.     CbDrives.Move(l, t, w, h)
  743.   
  744.     TbDir.Width = l - mm - TbDir.Left
  745.     LstDirs.Width = l - mm - LstDirs.Left
  746.     LstDirs.Height = ScaleHeight - m - LstDirs.Top
  747.     Refresh
  748.   End Sub
  749.  
  750.   Sub TbDir_Change()
  751.     Dim text As String
  752.     text = TbDir.Text
  753.     ignoreClick = True : LstDirs.SelPath = text : ignoreClick = False
  754.     If dirMustExist Then 
  755.       dir.Path = text
  756.       BtnOk.Enabled = dir.Exists
  757.     End If
  758.   End Sub
  759.  
  760. End Type
  761.  
  762. Type MessageBox
  763.   Dim result As Long
  764.   Dim hWndOwner As Long
  765.   Dim style As Long
  766.   Dim title As String
  767.   Dim message As String
  768.  
  769.   ' METHODS for object: MessageBox
  770.   Function Execute() as long
  771.     dim m, t as string
  772.     dim s, autobusy as long
  773.     If Len(message) > 0 Then m = message Else m = "Never mind"
  774.     If Len(title) > 0 Then t = title Else t = Me
  775.     App.EnableDialog3dEffects(True)
  776.     autobusy = App.AutoBusySignal
  777.     App.AutoBusySignal = False
  778.   
  779.     ' If there's no owner, then ensure MB_TASKMODAL style (exclusive).
  780.     s = style
  781.     If hWndOwner = 0 Then 
  782.       s = (s And (Not User32.MB_SYSTEMMODAL)) Or User32.MB_TASKMODAL
  783.     End If
  784.   
  785.     ' Assure that any capture is released
  786.     If User32.GetCapture() Then User32.ReleaseCapture()
  787.   
  788.     result = User32.MessageBox(hWndOwner, m, t, s)
  789.   
  790.     App.AutoBusySignal = autobusy
  791.     App.EnableDialog3dEffects(False)
  792.     Execute = result
  793.   End Function
  794.  
  795.   Function Message(titleStr as string, msg as string) as long
  796.     title = titleStr
  797.     message = msg
  798.     Message = Execute
  799.   End Function
  800.  
  801.   Function Msg(msg as string) as long
  802.     message = msg
  803.     Msg = Execute
  804.   End Function
  805.  
  806.   Sub ResetStyle()
  807.     style = User32.MB_OK
  808.   End Sub
  809.  
  810.   Sub SetIconExclamation()
  811.     SetIconNone
  812.     style = style Or User32.MB_ICONEXCLAMATION
  813.   End Sub
  814.  
  815.   Sub SetIconInfo()
  816.     SetIconNone
  817.     style = style Or User32.MB_ICONINFORMATION
  818.   End Sub
  819.  
  820.   Sub SetIconNone()
  821.     style = style And (Not User32.MB_ICONMASK)
  822.   End Sub
  823.  
  824.   Sub SetIconQuestion()
  825.     SetIconNone
  826.     style = style Or User32.MB_ICONQUESTION
  827.   End Sub
  828.  
  829.   Sub SetIconStop()
  830.     SetIconNone
  831.     style = style Or User32.MB_ICONSTOP
  832.   End Sub
  833.  
  834. End Type
  835.  
  836. Type AbortRetryIgnoreBox From MessageBox
  837.  
  838.   ' METHODS for object: AbortRetryIgnoreBox
  839.   Sub ResetStyle()
  840.     style = User32.MB_ABORTRETRYIGNORE
  841.     SetIconStop()
  842.   End Sub
  843.  
  844. End Type
  845.  
  846. Type InputDialog From Form
  847.   Dim TEResponse As New TextBox
  848.   Dim BtnOK As New Button
  849.   Dim BtnCancel As New Button
  850.   Dim LblPrompt As New Label
  851.   Dim ControlMargin As Single
  852.   Dim Response As Long
  853.   Property Text Get getText Set setText As String
  854.  
  855.   ' METHODS for object: InputDialog
  856.   Sub BtnCancel_Click()
  857.     Hide
  858.     ModalResult IDCANCEL
  859.   End Sub
  860.  
  861.   Sub BtnOK_Click()
  862.     Hide
  863.     ModalResult IDOK
  864.   End Sub
  865.  
  866.   Function Execute(title, prompt, defaultResponse As String) As Long
  867.     If hWnd = 0 Then LoadForm
  868.     Response = IDCANCEL
  869.     Caption = title
  870.     LblPrompt.Text = prompt
  871.     TEResponse.Text = defaultResponse
  872.     TEResponse.SelStart = 0
  873.     TEResponse.SelLength = -1
  874.     ' Must be visible for any SetFocus to work.
  875.     Show()
  876.     TEResponse.SetFocus
  877.     Response = ShowModal()
  878.     Execute = Response
  879.   End Function
  880.  
  881.   Function getText As String
  882.     getText = IIf(Response = IDOK, TEResponse.Text, "")
  883.   End Function
  884.  
  885.   Sub Load
  886.     Caption = ""
  887.     Response = IDCANCEL
  888.   End Sub
  889.  
  890.   Sub MoveMinimumSize(ByVal newLeft as Single, ByVal newTop as Single)
  891.     Dim minWidth, minHeight As Single
  892.     Dim fudgeWidth, fudgeHeight As Single
  893.     If hWnd = 0 Then 
  894.       LoadForm
  895.       Resize
  896.     End If
  897.     fudgeWidth = Width - ScaleWidth
  898.     fudgeHeight = Height - ScaleHeight
  899.     minWidth = (BtnOK.Width * 3) + (ControlMargin * 3) + fudgeWidth
  900.     minHeight = (BtnOK.Height * 2) + TEResponse.Height + (ControlMargin * 4) + fudgeHeight
  901.     Move(newLeft, newTop, minWidth, minHeight)
  902.   End Sub
  903.  
  904.   Sub Resize()
  905.     Dim m, mm, mmm, bx, lw, lh, ty, th as single
  906.     Dim useWidth, useHeight as single
  907.   
  908.     ' Set up local margin variables for convenience
  909.     m = ControlMargin : mm = m + m : mmm = mm + m
  910.   
  911.     ' Calculate effective form width (min. is double button width plus margin)
  912.     useWidth = BtnOK.Width * 3 + mmm
  913.     If useWidth < ScaleWidth Then useWidth = ScaleWidth
  914.   
  915.     ' Calculate effective form height (min 2 btn ht. + text ht. + margin)
  916.     useHeight = BtnOK.Height * 2 + TEResponse.Height + mmm + m
  917.     If useHeight < ScaleHeight Then useHeight = ScaleHeight
  918.   
  919.     ' bx is the left edge of the two buttons, lw is label width.
  920.     bx = useWidth - BtnOK.Width - m
  921.     lw = bx - mm
  922.     th = TEResponse.Height
  923.     ty = useHeight - th - m
  924.     lh = ty - mm
  925.     LblPrompt.Move(m, m, lw, lh)
  926.     BtnOK.Left = bx
  927.     BtnCancel.Left = bx
  928.     TEResponse.Move(m, ty, useWidth - mm, th)
  929.     Refresh
  930.   End Sub
  931.  
  932.   Sub setText(t as String)
  933.     TEResponse.Text = t
  934.   End Sub
  935.  
  936. End Type
  937.  
  938. Type MultiLineInputDialog From InputDialog
  939.  
  940.   ' METHODS for object: MultiLineInputDialog
  941.   Sub Resize()
  942.     Dim m, mm, mmm, bx, lw, lh, ty, th as single
  943.     Dim useWidth, useHeight as single
  944.   
  945.     ' Set up local margin variables for convenience
  946.     m = ControlMargin : mm = m + m : mmm = mm + m
  947.   
  948.     ' Calculate effective form width (min. is triple button width plus margin)
  949.     useWidth = BtnOK.Width * 3 + mmm
  950.     If useWidth < ScaleWidth Then useWidth = ScaleWidth
  951.   
  952.     ' Calculate effective form height (min 4 btn ht. + margins)
  953.     useHeight = BtnOK.Height * 4 + mmm + mm
  954.     If useHeight < ScaleHeight Then useHeight = ScaleHeight
  955.   
  956.     ' bx is the left edge of the two buttons, lw is label width, etc.
  957.     bx = useWidth - BtnOK.Width - m
  958.     lw = bx - mm
  959.     BtnOK.Left = bx
  960.     BtnCancel.Left = bx
  961.     lh = BtnCancel.Top + BtnCancel.Height - m
  962.     LblPrompt.Move(m, m, lw, lh)
  963.     th = useHeight - mmm - lh
  964.     ty = lh + mm
  965.     TEResponse.Move(m, ty, useWidth - mm, th)
  966.     Refresh
  967.   End Sub
  968.  
  969. End Type
  970.  
  971. Type OKCancelBox From MessageBox
  972.  
  973.   ' METHODS for object: OKCancelBox
  974.   Sub ResetStyle()
  975.     style = User32.MB_OKCANCEL
  976.     SetIconQuestion()
  977.   End Sub
  978.  
  979. End Type
  980.  
  981. Type OpenDialog From OpenDialog
  982. End Type
  983.  
  984. Type InfoBox From MessageBox
  985.  
  986.   ' METHODS for object: InfoBox
  987.   Sub ResetStyle()
  988.     style = User32.MB_OK
  989.     SetIconInfo()
  990.   End Sub
  991.  
  992. End Type
  993.  
  994. Type RetryCancelBox From MessageBox
  995.  
  996.   ' METHODS for object: RetryCancelBox
  997.   Sub ResetStyle()
  998.     style = User32.MB_RETRYCANCEL
  999.     SetIconQuestion()
  1000.   End Sub
  1001.  
  1002. End Type
  1003.  
  1004. Type YesNoCancelBox From MessageBox
  1005.  
  1006.   ' METHODS for object: YesNoCancelBox
  1007.   Sub ResetStyle()
  1008.     style = User32.MB_YESNOCANCEL
  1009.     SetIconQuestion()
  1010.   End Sub
  1011.  
  1012. End Type
  1013.  
  1014. Type FindDialog From FindDialog
  1015. End Type
  1016.  
  1017. Type SaveAsDialog From SaveAsDialog
  1018. End Type
  1019.  
  1020. Type YesNoBox From MessageBox
  1021.  
  1022.   ' METHODS for object: YesNoBox
  1023.   Sub ResetStyle()
  1024.     style = User32.MB_YESNO
  1025.     SetIconQuestion()
  1026.   End Sub
  1027.  
  1028. End Type
  1029.  
  1030. Type SimpleMultiLineDialog From Form
  1031.   Dim TbText As New TextBox
  1032.   Property Text Get GetText Set SetText As String
  1033.  
  1034.   ' METHODS for object: SimpleMultiLineDialog
  1035.   Sub Execute(ByVal title As String, ByVal readOnly As Boolean, ByVal wordWrap As Boolean)
  1036.     LoadForm
  1037.     Caption = title
  1038.     TbText.ReadOnly = readOnly
  1039.     TbText.WordWrap = wordWrap
  1040.     ShowModal
  1041.   End Sub
  1042.  
  1043.   Sub ExecuteFile(fileName As String, ByVal readOnly As Boolean, ByVal wordWrap As Boolean)
  1044.     Dim f As New TextFile
  1045.     f.FileName = fileName
  1046.     If f.Exists Then 
  1047.       Text = f.ContentsAsString
  1048.     Else 
  1049.       Text = "File: " & f.FullPathName & " not found."
  1050.     End If
  1051.     Execute(fileName, readOnly, wordWrap)
  1052.   End Sub
  1053.  
  1054.   Function GetText() As String
  1055.     GetText = TbText.Text
  1056.   End Function
  1057.  
  1058.   Sub KeyDown(keyCode As Integer, ByVal shift As Integer)
  1059.     ' Take us down on ESC or (<Enter> && ReadOnly)
  1060.     If keyCode = 27 || (TbText.ReadOnly && keyCode = 13) Then Hide
  1061.   End Sub
  1062.  
  1063.   Sub Resize()
  1064.     TbText.Move(-2, -2, ScaleWidth + 2, ScaleHeight + 2)
  1065.   End Sub
  1066.  
  1067.   Sub SetText(text As String)
  1068.     LoadForm
  1069.     TbText.Text = text
  1070.   End Sub
  1071.  
  1072. End Type
  1073.  
  1074. Type FontDialog From FontDialog
  1075. End Type
  1076.  
  1077. Begin Code
  1078. ' Reconstruction commands for object: DefaultDialogFont
  1079. '
  1080.   With DefaultDialogFont
  1081.     .FaceName := "MS Sans Serif"
  1082.     .Size := 8.000000
  1083.     .Bold := True
  1084.     .Italic := False
  1085.     .Strikethru := False
  1086.   End With  'DefaultDialogFont
  1087. ' Reconstruction commands for object: CommonDialog
  1088. '
  1089.   With CommonDialog
  1090.     .Title := ""
  1091.   End With  'CommonDialog
  1092. ' Reconstruction commands for object: ColorDialog
  1093. '
  1094.   With ColorDialog
  1095.     .Color := 16777216
  1096.   End With  'ColorDialog
  1097. ' Reconstruction commands for object: WizardMaster
  1098. '
  1099.   With WizardMaster
  1100.     With .StepTraverser
  1101.       .theStep := Nothing
  1102.     End With  'WizardMaster.StepTraverser
  1103.     With .Wizard
  1104.       .title_ := ""
  1105.       .Title := ""
  1106.       .GraphicFileName := ""
  1107.       .FirstStep := Nothing
  1108.       .LastStep := Nothing
  1109.       With .Bitmap
  1110.       End With  'WizardMaster.Wizard.Bitmap
  1111.     End With  'WizardMaster.Wizard
  1112.     With .FrmStep
  1113.       .ForeColor := 0
  1114.       .Font := WizardMaster.Font
  1115.       .Move(4290, 3300, 7155, 4815)
  1116.       .BevelInner := "Raised"
  1117.       .DefaultButton := WizardMaster.FrmStep.BtnNext
  1118.       .CancelButton := WizardMaster.FrmStep.BtnCancel
  1119.       .BorderStyle := "Fixed Single"
  1120.       .MaxButton := False
  1121.       .MinButton := False
  1122.       .ControlBox := False
  1123.       .wizard := Nothing
  1124.       .NextStep := Nothing
  1125.       .BackStep := Nothing
  1126.       .initialized := 0
  1127.       .inheritImageSize := -1
  1128.       With .BtnFinish
  1129.         .Caption := " &Finish"
  1130.         .ZOrder := 4
  1131.         .Move(6225, 4050, 825, 300)
  1132.       End With  'WizardMaster.FrmStep.BtnFinish
  1133.       With .BtnNext
  1134.         .Caption := " &Next>"
  1135.         .ZOrder := 3
  1136.         .Move(5325, 4050, 825, 300)
  1137.       End With  'WizardMaster.FrmStep.BtnNext
  1138.       With .BtnBack
  1139.         .Caption := " <&Back"
  1140.         .ZOrder := 2
  1141.         .Move(4500, 4050, 825, 300)
  1142.       End With  'WizardMaster.FrmStep.BtnBack
  1143.       With .BtnCancel
  1144.         .Caption := " Cancel"
  1145.         .ZOrder := 1
  1146.         .Move(3600, 4050, 825, 300)
  1147.       End With  'WizardMaster.FrmStep.BtnCancel
  1148.       With .ImgGraphic
  1149.         .Caption := "ImgGraphic"
  1150.         .ZOrder := 7
  1151.         .Move(225, 225, 2475, 3150)
  1152.       End With  'WizardMaster.FrmStep.ImgGraphic
  1153.       With .LblInstruction
  1154.         .ZOrder := 6
  1155.         .Move(2850, 225, 4125, 1500)
  1156.       End With  'WizardMaster.FrmStep.LblInstruction
  1157.       With .Frame1
  1158.         .ZOrder := 5
  1159.         .Move(75, 3825, 6975, 75)
  1160.       End With  'WizardMaster.FrmStep.Frame1
  1161.     End With  'WizardMaster.FrmStep
  1162.     With .Font
  1163.       .FaceName := "MS Sans Serif"
  1164.       .Size := 8.000000
  1165.       .Bold := True
  1166.       .Italic := False
  1167.       .Strikethru := False
  1168.     End With  'WizardMaster.Font
  1169.   End With  'WizardMaster
  1170. ' Reconstruction commands for object: SelectDirectoryDialog
  1171. '
  1172.   With SelectDirectoryDialog
  1173.     .Caption := "Select Directory"
  1174.     .Font := DefaultDialogFont
  1175.     .Move(5700, 2412, 4656, 3144)
  1176.     .DefaultButton := SelectDirectoryDialog.BtnOk
  1177.     .CancelButton := SelectDirectoryDialog.BtnCancel
  1178.     .MaxButton := False
  1179.     .MinButton := False
  1180.     .ignoreClick := False
  1181.     .dirMustExist := False
  1182.     With .BtnOk
  1183.       .Caption := "OK"
  1184.       .ZOrder := 6
  1185.       .Move(3585, 84, 900, 300)
  1186.     End With  'SelectDirectoryDialog.BtnOk
  1187.     With .BtnCancel
  1188.       .Caption := "Cancel"
  1189.       .ZOrder := 5
  1190.       .Move(3585, 459, 900, 300)
  1191.     End With  'SelectDirectoryDialog.BtnCancel
  1192.     With .TbDir
  1193.       .ZOrder := 4
  1194.       .Move(516, 96, 2919, 276)
  1195.     End With  'SelectDirectoryDialog.TbDir
  1196.     With .LblDir
  1197.       .Caption := "Dir:"
  1198.       .ZOrder := 5
  1199.       .Move(120, 150, 330, 225)
  1200.     End With  'SelectDirectoryDialog.LblDir
  1201.     With .CbDrives
  1202.       .ZOrder := 3
  1203.       .ShowFiles := False
  1204.       .ShowDrives := True
  1205.       .Move(3585, 1209, 900, 288)
  1206.     End With  'SelectDirectoryDialog.CbDrives
  1207.     With .LblDrive
  1208.       .Caption := "Drive:"
  1209.       .ZOrder := 2
  1210.       .Move(3585, 909, 900, 225)
  1211.     End With  'SelectDirectoryDialog.LblDrive
  1212.     With .LstDirs
  1213.       .ZOrder := 1
  1214.       .Move(96, 516, 3336, 2184)
  1215.       .ExpandOnDblClick := True
  1216.       .IconBitmap := SelectDirectoryDialog.LstDirs.bitmap
  1217.       .IconHeight := 16
  1218.       .IconWidth := 20
  1219.       .Sorted := True
  1220.       .HighlightStyle := "FullLine"
  1221.       .scratchLevel := 1
  1222.       .scratchPos := 8
  1223.       .scratchIndex := 14
  1224.       .CurrDrive := "w:\"
  1225.       .scratchParent := 13
  1226.       .SelPath := ""
  1227.       With .bitmap
  1228.         .LoadType := "MemoryBased"
  1229.         .FileName := "Dialogs.ero"
  1230.         .ResId := 0
  1231.       End With  'SelectDirectoryDialog.LstDirs.bitmap
  1232.     End With  'SelectDirectoryDialog.LstDirs
  1233.     With .dir
  1234.     End With  'SelectDirectoryDialog.dir
  1235.   End With  'SelectDirectoryDialog
  1236. ' Reconstruction commands for object: MessageBox
  1237. '
  1238.   With MessageBox
  1239.     .result := 0
  1240.     .hWndOwner := 0
  1241.     .style := 0
  1242.     .title := ""
  1243.     .message := ""
  1244.   End With  'MessageBox
  1245. ' Reconstruction commands for object: AbortRetryIgnoreBox
  1246. '
  1247.   With AbortRetryIgnoreBox
  1248.     .style := 18
  1249.   End With  'AbortRetryIgnoreBox
  1250. ' Reconstruction commands for object: InputDialog
  1251. '
  1252.   With InputDialog
  1253.     .Caption := "Rename Object"
  1254.     .Font := DefaultDialogFont
  1255.     .Move(3720, 1800, 4116, 1656)
  1256.     .DefaultButton := InputDialog.BtnOK
  1257.     .CancelButton := InputDialog.BtnCancel
  1258.     .ControlMargin := 60
  1259.     .Response := 1
  1260.     .Text := "AboutEnvelopForm"
  1261.     With .TEResponse
  1262.       .ZOrder := 1
  1263.       .Move(60, 912, 3900, 312)
  1264.     End With  'InputDialog.TEResponse
  1265.     With .BtnOK
  1266.       .Caption := "&OK"
  1267.       .ZOrder := 2
  1268.       .Move(3096, 60, 864, 324)
  1269.     End With  'InputDialog.BtnOK
  1270.     With .BtnCancel
  1271.       .Caption := "&Cancel"
  1272.       .ZOrder := 3
  1273.       .Move(3096, 444, 864, 324)
  1274.     End With  'InputDialog.BtnCancel
  1275.     With .LblPrompt
  1276.       .ZOrder := 4
  1277.       .Move(60, 60, 2976, 792)
  1278.     End With  'InputDialog.LblPrompt
  1279.   End With  'InputDialog
  1280. ' Reconstruction commands for object: MultiLineInputDialog
  1281. '
  1282.   With MultiLineInputDialog
  1283.     .Caption := "Enter comment"
  1284.     .Move(3636, 1824, 4980, 3432)
  1285.     .DefaultButton := MultiLineInputDialog.BtnOK
  1286.     .CancelButton := MultiLineInputDialog.BtnCancel
  1287.     .Text := ""
  1288.     With .TEResponse
  1289.       .Move(60, 828, 4764, 2172)
  1290.       .WordWrap := True
  1291.       .MultiLine := True
  1292.       .ScrollBars := "Vertical"
  1293.     End With  'MultiLineInputDialog.TEResponse
  1294.     With .BtnOK
  1295.       .Move(3960, 60, 864, 324)
  1296.     End With  'MultiLineInputDialog.BtnOK
  1297.     With .BtnCancel
  1298.       .Move(3960, 444, 864, 324)
  1299.     End With  'MultiLineInputDialog.BtnCancel
  1300.     With .LblPrompt
  1301.       .Move(60, 60, 3840, 708)
  1302.     End With  'MultiLineInputDialog.LblPrompt
  1303.   End With  'MultiLineInputDialog
  1304. ' Reconstruction commands for object: OKCancelBox
  1305. '
  1306.   With OKCancelBox
  1307.     .style := 33
  1308.   End With  'OKCancelBox
  1309. ' Reconstruction commands for object: OpenDialog
  1310. '
  1311.   With OpenDialog
  1312.     .DefaultExtension := ""
  1313.     .FileMustExist := True
  1314.     .FileName := ""
  1315.     .Filter := "|"
  1316.     .FilterIndex := 0
  1317.     .InitialDir := ""
  1318.     .NoNetworkButton := False
  1319.     .NoChangeDir := True
  1320.     .PathMustExist := True
  1321.   End With  'OpenDialog
  1322. ' Reconstruction commands for object: InfoBox
  1323. '
  1324.   With InfoBox
  1325.     .style := 64
  1326.   End With  'InfoBox
  1327. ' Reconstruction commands for object: RetryCancelBox
  1328. '
  1329.   With RetryCancelBox
  1330.     .style := 53
  1331.   End With  'RetryCancelBox
  1332. ' Reconstruction commands for object: YesNoCancelBox
  1333. '
  1334.   With YesNoCancelBox
  1335.     .style := 35
  1336.   End With  'YesNoCancelBox
  1337. ' Reconstruction commands for object: FindDialog
  1338. '
  1339.   With FindDialog
  1340.     .FindString := ""
  1341.     .DisableUpDown := False
  1342.     .DisableMatchCase := False
  1343.     .DisableWholeWord := False
  1344.     .HideUpDown := False
  1345.     .HideMatchCase := False
  1346.     .HideWholeWord := False
  1347.     .MatchCase := False
  1348.     .MatchWholeWord := False
  1349.     .SearchDown := True
  1350.   End With  'FindDialog
  1351. ' Reconstruction commands for object: SaveAsDialog
  1352. '
  1353.   With SaveAsDialog
  1354.     .DefaultExtension := ""
  1355.     .FileName := ""
  1356.     .Filter := "|"
  1357.     .FilterIndex := 0
  1358.     .InitialDir := ""
  1359.     .NoNetworkButton := False
  1360.     .NoChangeDir := False
  1361.     .PathMustExist := True
  1362.   End With  'SaveAsDialog
  1363. ' Reconstruction commands for object: YesNoBox
  1364. '
  1365.   With YesNoBox
  1366.     .style := 36
  1367.   End With  'YesNoBox
  1368. ' Reconstruction commands for object: SimpleMultiLineDialog
  1369. '
  1370.   With SimpleMultiLineDialog
  1371.     .Move(1068, 324, 6756, 6552)
  1372.     .KeyPreview := True
  1373.     .ScaleMode := "Pixel"
  1374.     .Text := ""
  1375.     With .TbText
  1376.       .ZOrder := 1
  1377.       .Move(-2, -2, 557, 517)
  1378.       .Ctrl3d := False
  1379.       .MultiLine := True
  1380.       .ReadOnly := True
  1381.       .ScrollBars := "Vertical"
  1382.     End With  'SimpleMultiLineDialog.TbText
  1383.   End With  'SimpleMultiLineDialog
  1384. ' Reconstruction commands for object: FontDialog
  1385. '
  1386.   With FontDialog
  1387.     .Title := "AboutEnvelopForm.btnStory.Font"
  1388.     .FaceName := "System"
  1389.     .Size := 12
  1390.     .Bold := True
  1391.     .Italic := False
  1392.     .Strikethru := False
  1393.     .Underline := False
  1394.     .Color := -1
  1395.     .OnlyAnsi := False
  1396.     .OnlyFixedPitch := False
  1397.     .OnlyTrueType := False
  1398.     .AllowEffects := True
  1399.     .AllowFaceSelect := True
  1400.     .AllowStyleSelect := True
  1401.     .AllowSizeSelect := True
  1402.     .LimitSize := False
  1403.     .SizeMin := 0
  1404.     .SizeMax := 0
  1405.     .Font := Nothing
  1406.   End With  'FontDialog
  1407. End Code
  1408.