home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / Extended_R208147912007.psc / spellChecker.ctl < prev    next >
Text File  |  2007-08-24  |  40KB  |  1,367 lines

  1. VERSION 5.00
  2. Begin VB.UserControl spellChecker 
  3.    Appearance      =   0  'Flat
  4.    BorderStyle     =   1  'Fixed Single
  5.    ClientHeight    =   5385
  6.    ClientLeft      =   0
  7.    ClientTop       =   0
  8.    ClientWidth     =   5760
  9.    ClipControls    =   0   'False
  10.    ScaleHeight     =   5385
  11.    ScaleWidth      =   5760
  12.    Begin VB.Frame Frame4 
  13.       Height          =   4095
  14.       Left            =   1200
  15.       TabIndex        =   14
  16.       Top             =   360
  17.       Visible         =   0   'False
  18.       Width           =   4215
  19.       Begin VB.Label Label4 
  20.          Alignment       =   2  'Center
  21.          BeginProperty Font 
  22.             Name            =   "MS Sans Serif"
  23.             Size            =   13.5
  24.             Charset         =   0
  25.             Weight          =   700
  26.             Underline       =   0   'False
  27.             Italic          =   0   'False
  28.             Strikethrough   =   0   'False
  29.          EndProperty
  30.          Height          =   495
  31.          Left            =   120
  32.          TabIndex        =   17
  33.          Top             =   3120
  34.          Width           =   3975
  35.       End
  36.       Begin VB.Shape Shape3 
  37.          BorderColor     =   &H000000FF&
  38.          FillColor       =   &H000000FF&
  39.          FillStyle       =   0  'Solid
  40.          Height          =   180
  41.          Left            =   240
  42.          Top             =   2880
  43.          Width           =   3735
  44.       End
  45.       Begin VB.Shape Shape4 
  46.          FillStyle       =   0  'Solid
  47.          Height          =   180
  48.          Left            =   240
  49.          Top             =   2880
  50.          Width           =   3735
  51.       End
  52.       Begin VB.Label Label3 
  53.          Alignment       =   2  'Center
  54.          Caption         =   "Please Wait"
  55.          BeginProperty Font 
  56.             Name            =   "MS Sans Serif"
  57.             Size            =   13.5
  58.             Charset         =   0
  59.             Weight          =   700
  60.             Underline       =   0   'False
  61.             Italic          =   0   'False
  62.             Strikethrough   =   0   'False
  63.          EndProperty
  64.          Height          =   495
  65.          Left            =   120
  66.          TabIndex        =   16
  67.          Top             =   1320
  68.          Width           =   3975
  69.       End
  70.       Begin VB.Label Label2 
  71.          Alignment       =   2  'Center
  72.          Caption         =   "Initialising Word Database"
  73.          BeginProperty Font 
  74.             Name            =   "MS Sans Serif"
  75.             Size            =   13.5
  76.             Charset         =   0
  77.             Weight          =   700
  78.             Underline       =   0   'False
  79.             Italic          =   0   'False
  80.             Strikethrough   =   0   'False
  81.          EndProperty
  82.          Height          =   495
  83.          Left            =   120
  84.          TabIndex        =   15
  85.          Top             =   480
  86.          Width           =   3975
  87.       End
  88.    End
  89.    Begin VB.Frame Frame3 
  90.       Caption         =   "Change To"
  91.       BeginProperty Font 
  92.          Name            =   "MS Sans Serif"
  93.          Size            =   8.25
  94.          Charset         =   0
  95.          Weight          =   700
  96.          Underline       =   0   'False
  97.          Italic          =   0   'False
  98.          Strikethrough   =   0   'False
  99.       EndProperty
  100.       Height          =   735
  101.       Left            =   120
  102.       TabIndex        =   7
  103.       Top             =   960
  104.       Width           =   4215
  105.       Begin VB.TextBox txtCHANGETO 
  106.          Height          =   285
  107.          Left            =   120
  108.          TabIndex        =   9
  109.          Top             =   240
  110.          Width           =   2775
  111.       End
  112.       Begin VB.CommandButton cmdCHANGETO 
  113.          Caption         =   "Change To"
  114.          Enabled         =   0   'False
  115.          Height          =   375
  116.          Left            =   3120
  117.          Style           =   1  'Graphical
  118.          TabIndex        =   8
  119.          Top             =   200
  120.          Width           =   975
  121.       End
  122.    End
  123.    Begin VB.ListBox soundExWords 
  124.       Height          =   1815
  125.       Left            =   6600
  126.       TabIndex        =   5
  127.       Top             =   600
  128.       Width           =   2055
  129.    End
  130.    Begin VB.Frame Frame1 
  131.       Caption         =   "Words Found"
  132.       BeginProperty Font 
  133.          Name            =   "MS Sans Serif"
  134.          Size            =   8.25
  135.          Charset         =   0
  136.          Weight          =   700
  137.          Underline       =   0   'False
  138.          Italic          =   0   'False
  139.          Strikethrough   =   0   'False
  140.       EndProperty
  141.       Height          =   2415
  142.       Left            =   120
  143.       TabIndex        =   3
  144.       Top             =   1680
  145.       Width           =   4215
  146.       Begin VB.CommandButton cmdIGNORE 
  147.          Caption         =   "Ignore"
  148.          Enabled         =   0   'False
  149.          Height          =   375
  150.          Left            =   3120
  151.          TabIndex        =   13
  152.          ToolTipText     =   "Ignore Word"
  153.          Top             =   1440
  154.          Width           =   975
  155.       End
  156.       Begin VB.CommandButton cmdCHANGE 
  157.          Caption         =   "Change"
  158.          Enabled         =   0   'False
  159.          Height          =   375
  160.          Left            =   3120
  161.          TabIndex        =   12
  162.          Top             =   240
  163.          Width           =   975
  164.       End
  165.       Begin VB.CommandButton cmdCHANGEALL 
  166.          Caption         =   "Change All"
  167.          Enabled         =   0   'False
  168.          Height          =   375
  169.          Left            =   3120
  170.          TabIndex        =   11
  171.          Top             =   720
  172.          Width           =   975
  173.       End
  174.       Begin VB.CommandButton cmdIGNOREALL 
  175.          Caption         =   "Ignore All"
  176.          Enabled         =   0   'False
  177.          Height          =   375
  178.          Left            =   3120
  179.          TabIndex        =   10
  180.          ToolTipText     =   "Ignore ALL Words"
  181.          Top             =   1920
  182.          Width           =   975
  183.       End
  184.       Begin VB.ListBox levenWords 
  185.          Height          =   2010
  186.          Left            =   120
  187.          TabIndex        =   4
  188.          Top             =   240
  189.          Width           =   2775
  190.       End
  191.    End
  192.    Begin VB.Frame Frame2 
  193.       Caption         =   "Checking Word"
  194.       BeginProperty Font 
  195.          Name            =   "MS Sans Serif"
  196.          Size            =   8.25
  197.          Charset         =   0
  198.          Weight          =   700
  199.          Underline       =   0   'False
  200.          Italic          =   0   'False
  201.          Strikethrough   =   0   'False
  202.       EndProperty
  203.       Height          =   735
  204.       Left            =   120
  205.       TabIndex        =   0
  206.       Top             =   240
  207.       Width           =   4215
  208.       Begin VB.CommandButton cmdADD 
  209.          Caption         =   "Add"
  210.          Enabled         =   0   'False
  211.          Height          =   375
  212.          Left            =   3120
  213.          Style           =   1  'Graphical
  214.          TabIndex        =   1
  215.          ToolTipText     =   "Add Word To Dictionary"
  216.          Top             =   200
  217.          Width           =   975
  218.       End
  219.       Begin VB.Image imgALT 
  220.          Height          =   600
  221.          Left            =   3960
  222.          Picture         =   "spellChecker.ctx":0000
  223.          Stretch         =   -1  'True
  224.          Top             =   120
  225.          Visible         =   0   'False
  226.          Width           =   240
  227.       End
  228.       Begin VB.Shape Shape2 
  229.          BorderColor     =   &H000000FF&
  230.          FillColor       =   &H000000FF&
  231.          FillStyle       =   0  'Solid
  232.          Height          =   60
  233.          Left            =   120
  234.          Top             =   555
  235.          Width           =   2775
  236.       End
  237.       Begin VB.Shape Shape1 
  238.          FillStyle       =   0  'Solid
  239.          Height          =   60
  240.          Left            =   120
  241.          Top             =   550
  242.          Width           =   2775
  243.       End
  244.       Begin VB.Label lblWORD 
  245.          Appearance      =   0  'Flat
  246.          BackColor       =   &H80000005&
  247.          BorderStyle     =   1  'Fixed Single
  248.          ForeColor       =   &H80000008&
  249.          Height          =   255
  250.          Left            =   120
  251.          TabIndex        =   2
  252.          Top             =   240
  253.          Width           =   2775
  254.       End
  255.    End
  256.    Begin VB.Image Image1 
  257.       Height          =   210
  258.       Left            =   4080
  259.       Picture         =   "spellChecker.ctx":0442
  260.       ToolTipText     =   "Close Spell Checker"
  261.       Top             =   40
  262.       Width           =   240
  263.    End
  264.    Begin VB.Label Label1 
  265.       Caption         =   "All Matches:"
  266.       BeginProperty Font 
  267.          Name            =   "MS Sans Serif"
  268.          Size            =   8.25
  269.          Charset         =   0
  270.          Weight          =   700
  271.          Underline       =   0   'False
  272.          Italic          =   0   'False
  273.          Strikethrough   =   0   'False
  274.       EndProperty
  275.       Height          =   255
  276.       Index           =   0
  277.       Left            =   6600
  278.       TabIndex        =   6
  279.       Top             =   360
  280.       Width           =   1335
  281.    End
  282. End
  283. Attribute VB_Name = "spellChecker"
  284. Attribute VB_GlobalNameSpace = False
  285. Attribute VB_Creatable = True
  286. Attribute VB_PredeclaredId = False
  287. Attribute VB_Exposed = False
  288. Option Explicit
  289. Option Compare Text
  290.  
  291. Private Declare Function GetInputState Lib "user32.dll" () As Long
  292.  
  293. Private Type ChangeALLType
  294.     OriginalWord As String
  295.     ReplaceWord As String
  296. End Type
  297.  
  298. Dim ChangeAllWords() As ChangeALLType
  299. Dim IgnoreAllWords() As String
  300.  
  301. Public Event Error()
  302. Public Event StatusChange()
  303. Public Event CurrentWord()
  304. Public Event ChangeWord()
  305. Public Event Finished()
  306. Public Event Alternate()
  307.  
  308. Dim WSP As Workspace
  309. Dim wordDBS As Database
  310. Dim wRST As Recordset
  311.  
  312. Dim uShowEachWord As Boolean
  313. Dim wordCHANGED As Boolean
  314. Dim uShowAlternate As Boolean
  315. Dim uError As String
  316. Dim uStatus As String
  317. Dim uText As String
  318. Dim uTextOriginal As String
  319. Dim uWord As String
  320. Dim nWORD As String
  321. Dim nPOS As Long
  322. Dim uWordPos As Long
  323. Dim CloseClicked As Boolean
  324.  
  325. Private Sub RefreshAlternate()
  326.     If uShowAlternate Then
  327.         cmdADD.Left = 3000
  328.         cmdADD.Width = 855
  329.         'imgALT.Left = 3960
  330.         imgALT.Visible = True
  331.     Else
  332.         cmdADD.Left = 3120
  333.         cmdADD.Width = 975
  334.         imgALT.Visible = False
  335.         'imgALT.Left = -300
  336.     End If
  337. End Sub
  338.  
  339. Property Let ShowEachWord(nShow As Boolean)
  340.     uShowEachWord = nShow
  341. End Property
  342.  
  343. Property Get ShowEachWord() As Boolean
  344.     ShowEachWord = uShowEachWord
  345. End Property
  346. Property Let ShowAlternate(nAlt As Boolean)
  347.     uShowAlternate = nAlt
  348.     Call RefreshAlternate
  349. End Property
  350.  
  351. Property Get ShowAlternate() As Boolean
  352.     ShowAlternate = uShowAlternate
  353. End Property
  354.  
  355. Property Get WordPos() As Long
  356.     WordPos = uWordPos
  357. End Property
  358.  
  359. Public Sub SpellCheck()
  360.     Dim odStatus As String
  361.     
  362.     uText = Trim$(uText)
  363.     If Len(uText) = 0 Then
  364.         uError = "Nothing To Check"
  365.         RaiseEvent Error
  366.         RaiseEvent Finished
  367.         Exit Sub
  368.     End If
  369.     
  370.     If Len(Dir$(App.Path & "\words.mdb")) = 0 Then
  371.         If Len(Dir$(App.Path & "\words.txt")) = 0 Then
  372.             uError = "Dictionary Cannot Be Created"
  373.             RaiseEvent Error
  374.             RaiseEvent Finished
  375.         End If
  376.     End If
  377.     
  378.     nPOS = 1
  379.     uWordPos = 0
  380.     uWord = ""
  381.     nWORD = ""
  382.     wordCHANGED = False
  383.     CloseClicked = False
  384.     ReDim ChangeAllWords(0 To 0)
  385.     ReDim IgnoreAllWords(0 To 0)
  386.     
  387.     odStatus = Open_WordDB
  388.     If odStatus <> "Ok" Then
  389.         uError = odStatus
  390.         RaiseEvent Error
  391.         RaiseEvent Finished
  392.     End If
  393.     
  394.     Call Get_Next_Word
  395. End Sub
  396.  
  397. Public Sub Get_Next_Word()
  398.     Dim i As Long
  399.     Dim ii As Long
  400.     Dim a As Integer
  401.     Dim pPERC As Integer
  402.     Dim pWIDTH As Long
  403.     
  404.     On Local Error Resume Next
  405.     
  406.     cmdADD.Enabled = False
  407.     cmdCHANGE.Enabled = False
  408.     cmdIGNORE.Enabled = False
  409.     cmdIGNOREALL.Enabled = False
  410.     cmdCHANGEALL.Enabled = False
  411.     cmdCHANGETO.Enabled = False
  412.     
  413. nextWord:
  414.     DoEvents
  415.     
  416.     pPERC = (nPOS / Len(uText)) * 100
  417.     If pPERC > 100 Then pPERC = 100
  418.     pWIDTH = (pPERC / 100) * Shape1.Width
  419.     If pWIDTH > Shape1.Width Then pWIDTH = Shape1.Width
  420.     Shape2.Width = pWIDTH
  421.     Shape2.Refresh
  422.     
  423.     If CloseClicked Then
  424.         wordDBS.Close
  425.         Set wordDBS = Nothing
  426.         WSP.Close
  427.         Set WSP = Nothing
  428.         
  429.         RaiseEvent Finished
  430.         Exit Sub
  431.     End If
  432.     
  433.     If wordCHANGED Then
  434.         ' if a word has changed, then the text will
  435.         ' have been updated. The current nPOS may be in the
  436.         ' middle of the text now.
  437.         ' so move nPOS back to a space then add to
  438. moveBACK:
  439.         If nPOS = 0 Then GoTo moveEND
  440.         If Mid$(uText, nPOS, 1) = "¼" Then GoTo moveEND
  441.         nPOS = nPOS - 1
  442.         GoTo moveBACK
  443. '        While nPOS > 0 And Mid$(uText, nPOS, 1) <> " "
  444. '            nPOS = nPOS - 1
  445. '        Wend
  446. moveEND:
  447.         nPOS = nPOS + 1
  448.     End If
  449.     
  450.     wordCHANGED = False
  451.     i = InStr(nPOS, uText & " ", " ", vbTextCompare)
  452.     ii = InStr(nPOS, uText, "¼", vbTextCompare)
  453.     If i = 0 And ii = 0 Then
  454.         wRST.Close
  455.         Set wRST = Nothing
  456.         wordDBS.Close
  457.         Set wordDBS = Nothing
  458.         WSP.Close
  459.         Set WSP = Nothing
  460.     
  461.         RaiseEvent Finished
  462.         Exit Sub
  463.     End If
  464.     
  465.     If ii < i And ii <> 0 Then i = ii
  466.     If i = 0 Then
  467.         wRST.Close
  468.         Set wRST = Nothing
  469.         wordDBS.Close
  470.         Set wordDBS = Nothing
  471.         WSP.Close
  472.         Set WSP = Nothing
  473.         
  474.         RaiseEvent Finished
  475.         Exit Sub
  476.     End If
  477.     
  478.     uWord = Mid$(uText, nPOS, i - nPOS)
  479.     
  480.     uWord = Replace_Text(uWord, "¼", "")
  481.     If Len(uWord) = 0 Then
  482.         nPOS = i + 1
  483.         GoTo nextWord
  484.     End If
  485.     
  486. RemoveQuotesETC:
  487.     If Left$(uWord, 1) = "'" Or Left$(uWord, 1) = Chr$(34) Then
  488.         uWord = Right$(uWord, Len(uWord) - 1)
  489.         GoTo RemoveQuotesETC
  490.     End If
  491.     If Right$(uWord, 1) = "'" Or Right$(uWord, 1) = Chr$(34) Then
  492.         uWord = Left$(uWord, Len(uWord) - 1)
  493.         GoTo RemoveQuotesETC
  494.     End If
  495.     If Right$(uWord, 1) = "?" Or Right$(uWord, 1) = "!" Or Right$(uWord, 1) = "," Or Right$(uWord, 1) = "." Or Right$(uWord, 1) = ";" Or Right$(uWord, 1) = ":" Then
  496.         uWord = Left$(uWord, Len(uWord) - 1)
  497.         GoTo RemoveQuotesETC
  498.     End If
  499.     
  500.     If Len(uWord) = 0 Then
  501.         nPOS = i + 1
  502.         GoTo nextWord
  503.     End If
  504.     
  505.     lblWORD = uWord
  506.     lblWORD.Refresh
  507.     txtCHANGETO.Text = uWord
  508.     txtCHANGETO.Refresh
  509.     cmdCHANGETO.ToolTipText = "Change Word To " & txtCHANGETO.Text
  510.     
  511.     uWordPos = nPOS
  512.     If uShowEachWord Then RaiseEvent CurrentWord
  513.     
  514.     If Word_Exists(uWord) Then
  515.         ' word exists by unique index
  516.         nPOS = i + 1
  517.         GoTo nextWord
  518.     End If
  519.     
  520.     
  521.     ' word not found
  522.     ' maybe in ignore list
  523.     If UBound(IgnoreAllWords) > 0 Then
  524.         For a = 1 To UBound(IgnoreAllWords)
  525.             If LCase$(IgnoreAllWords(a)) = LCase$(uWord) Then
  526.                 ' in ignore list
  527.                 nPOS = i + 1
  528.                 GoTo nextWord
  529.             End If
  530.         Next a
  531.     End If
  532.     
  533.  
  534.     
  535.     Call Check_Word(uWord)
  536.     DoEvents
  537.     If CloseClicked Then
  538.         wRST.Close
  539.         Set wRST = Nothing
  540.         wordDBS.Close
  541.         Set wordDBS = Nothing
  542.         WSP.Close
  543.         Set WSP = Nothing
  544.         
  545.         RaiseEvent Finished
  546.         Exit Sub
  547.     End If
  548.     
  549.     nPOS = i + 1
  550.     
  551.     If levenWords.ListCount = 1 Then
  552.         If LCase$(levenWords.List(0)) = LCase$(uWord) Then GoTo nextWord
  553.     End If
  554.     
  555.     ' word not found
  556.     ' maybe in change all list
  557.     If UBound(ChangeAllWords) > 0 Then
  558.         For a = 1 To UBound(ChangeAllWords)
  559.             If LCase$(ChangeAllWords(a).OriginalWord) = LCase$(uWord) Then
  560.                 RaiseEvent CurrentWord
  561.                 DoEvents
  562.                 
  563.                 For ii = 0 To levenWords.ListCount - 1
  564.                     If LCase$(levenWords.List(ii)) = LCase$(ChangeAllWords(a).ReplaceWord) Then
  565.                         levenWords.ListIndex = ii
  566.                         Exit For
  567.                     End If
  568.                 Next ii
  569.             
  570.                 If ii > (levenWords.ListCount - 1) Then
  571.                     ' hmm not in list so add to it
  572.                     levenWords.AddItem ChangeAllWords(i).ReplaceWord
  573.                     levenWords.ListIndex = levenWords.ListCount - 1
  574.                 End If
  575.                 
  576.                 nWORD = levenWords.List(levenWords.ListIndex)
  577.                 wordCHANGED = True
  578.                 RaiseEvent ChangeWord
  579.            
  580.                 Exit Sub
  581.             End If
  582.         Next a
  583.     End If
  584.     
  585.     levenWords.ListIndex = 0
  586.     Call levenWords_Click
  587.  
  588.     RaiseEvent CurrentWord
  589.     cmdADD.Enabled = True
  590.     cmdCHANGE.Enabled = True
  591.     cmdIGNORE.Enabled = True
  592.     cmdIGNOREALL.Enabled = True
  593.     cmdCHANGEALL.Enabled = True
  594.     cmdCHANGETO.Enabled = True
  595. End Sub
  596.  
  597. Property Let Text(nText As String)
  598.     uText = nText
  599.     uTextOriginal = uText
  600.     uText = Replace_Text(uText, vbCrLf, "¼¼")
  601.     uText = Replace_Text(uText, Chr$(9), "¼")
  602.     
  603. End Property
  604.  
  605. Property Get Word() As String
  606.     Word = uWord
  607. End Property
  608.  
  609. Property Get NewWord() As String
  610.     NewWord = nWORD
  611. End Property
  612.  
  613. Property Get Status() As String
  614.     Status = uStatus
  615. End Property
  616.  
  617. Property Get ErrorMessage() As String
  618.     ErrorMessage = uError
  619. End Property
  620.  
  621. Public Sub InitialiseWORDS()
  622.     Dim r As String
  623.     
  624.     uStatus = "Initialising Words"
  625.     RaiseEvent StatusChange
  626.     
  627.     r = Create_Word_Database
  628.     
  629.     If r <> "OK" Then
  630.         uError = r
  631.         uStatus = "Failed To Initialise Words"
  632.         RaiseEvent Error
  633.         RaiseEvent StatusChange
  634.     Else
  635.         uError = ""
  636.         RaiseEvent StatusChange
  637.     End If
  638.     
  639. End Sub
  640.  
  641. Private Function Open_WordDB() As String
  642.     Dim wDB As String
  643.     
  644.     On Local Error Resume Next
  645.     
  646.     If Right$(App.Path, 1) = "\" Then
  647.         wDB = App.Path & "Words.mdb"
  648.     Else
  649.         wDB = App.Path & "\Words.mdb"
  650.     End If
  651.     
  652.     If Len(Dir$(wDB)) = 0 Then
  653.         If Len(Dir$(App.Path & "\words.txt")) = 0 Then
  654.             Open_WordDB = "Cannot Find Words Database"
  655.             Exit Function
  656.         Else
  657.             Call InitialiseWORDS
  658.         End If
  659.     End If
  660.     
  661.     Set WSP = DBEngine.Workspaces(0)
  662.     
  663.     ' database created with not errors
  664.     ' open database and record set
  665.     Set wordDBS = WSP.OpenDatabase(wDB, False)
  666.  
  667.     Set wRST = wordDBS.OpenRecordset("Words", dbOpenTable)
  668.     wRST.Index = "Word"
  669.  
  670.     Open_WordDB = "Ok"
  671.  
  672. End Function
  673.  
  674. Private Function Word_Exists(iWord As String) As Boolean
  675.     On Local Error Resume Next
  676.     
  677.     wRST.Seek "=", iWord
  678.     If wRST.NoMatch = False Then Word_Exists = True
  679. End Function
  680.  
  681. Private Sub Check_Word(ByVal strWord As String)
  682.     On Local Error GoTo subFAIL
  683.     
  684.     Dim SndxMatchRS As Recordset
  685.     Dim LdMax As Long
  686.     Dim lenTmp As Long
  687.     Dim cPhoneme As New clsPhoneme
  688.     Dim Soundex As String
  689.     Dim LD As Long
  690.     Dim i As Long
  691.     Dim threshold As Long
  692.     Dim strMATCH As String
  693.     
  694.     
  695.     ' ensure word to search on
  696.     strWord = Trim$(strWord)
  697.     If strWord = vbNullString Then
  698.         uError = "No Word To Search On"
  699.         RaiseEvent Error
  700.         Set cPhoneme = Nothing
  701.         Exit Sub
  702.     End If
  703.     
  704.     
  705.     uStatus = "Searching..."
  706.     RaiseEvent StatusChange
  707.     
  708.     
  709.     '// Get the soundex of the input word
  710.     Soundex = cPhoneme.GetSoundexWord(strWord)
  711.         
  712.         
  713.     '// Now find all entries in the database which match the soundex of the input word
  714.     Set SndxMatchRS = wordDBS.OpenRecordset("SELECT [word] from Words WHERE " & _
  715.                                                "Soundex = " & _
  716.                                                Chr$(34) & Soundex & Chr$(34), _
  717.                                                dbOpenSnapshot)
  718.                                 
  719.     '// Populate the Listbox (soundEXWords)
  720.     soundExWords.Clear
  721.     levenWords.Clear
  722.     
  723.     With SndxMatchRS
  724.         While .EOF = False
  725.             If GetInputState <> 0 Then DoEvents
  726.             soundExWords.AddItem !Word
  727.             lenTmp = Len(!Word)
  728.             If lenTmp > LdMax Then LdMax = lenTmp
  729.             .MoveNext
  730.         Wend
  731.     End With
  732.     
  733.     ' if no words in soundex list then will not find any words in leven list
  734.     If soundExWords.ListCount = 0 Then
  735.         ' no word matches
  736.         uStatus = "No Words Match"
  737.         GoTo subEXIT
  738.     End If
  739.     
  740.     
  741.     ' have filled main soundex list
  742.     ' fill leven list
  743.     threshold = 0
  744.     strWord = UCase$(strWord)
  745.     
  746. ReDO:
  747.     '// walk through all soundex matches
  748.     For i = 0 To soundExWords.ListCount
  749.         strMATCH = Trim$(soundExWords.List(i))
  750.         If strMATCH <> vbNullString Then
  751.             If GetInputState <> 0 Then DoEvents
  752.             LD = cPhoneme.GetLevenshteinDistance(strWord, UCase$(strMATCH))
  753.             
  754.             '// Get all Levenshtein distances less than the scroll(threshold) value
  755.             If LD <= threshold Then
  756.                 If LD < levenWords.ListCount Then
  757.                     '// Add better matches up
  758.                     levenWords.AddItem strMATCH, LD
  759.                 Else
  760.                     levenWords.AddItem strMATCH
  761.                 End If
  762.             End If
  763.         End If
  764.     Next i
  765.     
  766.     If levenWords.ListCount = 0 Then
  767.         If threshold < LdMax Then
  768.             threshold = threshold + 1
  769.             GoTo ReDO
  770.         End If
  771.     End If
  772.     
  773.    
  774.     uStatus = "Search Complete"
  775.     GoTo subEXIT
  776.     
  777. subFAIL:
  778.     uError = Err.Description & " (" & Err.Number & ")"
  779.     uStatus = "Search FAILED"
  780.     RaiseEvent Error
  781.     
  782. subEXIT:
  783.     On Local Error Resume Next
  784.     Set cPhoneme = Nothing
  785.     
  786.     SndxMatchRS.Close
  787.     Set SndxMatchRS = Nothing
  788.         
  789.     RaiseEvent StatusChange
  790. End Sub
  791.  
  792. Private Function Create_Word_Database() As String
  793.     On Local Error GoTo funcFAIL
  794.     
  795.     Dim frf As Integer
  796.     Dim tmpStr As String
  797.     Dim i As Long
  798.     Dim wordlistDB As Database
  799.     Dim wordRS As Recordset
  800.     Dim wDB As String
  801.     Dim wWL As String
  802.     Dim wlSIZE As Long
  803.     Dim wlPOS As Long
  804.     Dim wlPERC As Integer
  805.     Dim cPhoneme As New clsPhoneme
  806.     Dim RetDB As Boolean
  807.     Dim sW As Long
  808.     
  809.     If Right$(App.Path, 1) = "\" Then
  810.         wDB = App.Path & "Words.mdb"
  811.         wWL = App.Path & "words.txt"
  812.     Else
  813.         wDB = App.Path & "\Words.mdb"
  814.         wWL = App.Path & "\words.txt"
  815.     End If
  816.         
  817.     ' if word database exits then just exit
  818.     If Len(Dir$(wDB)) <> 0 Then
  819.         ' word list already created
  820.         Create_Word_Database = "OK"
  821.         uStatus = "Already Initialised"
  822.         Set cPhoneme = Nothing
  823.         Frame4.Visible = False
  824.         Exit Function
  825.     End If
  826.  
  827.     Shape3.Width = 0
  828.     Frame4.Move 120, 0
  829.     Frame4.Visible = True
  830.     Frame4.Refresh
  831.     
  832.     ' ensure the text file which is use to create database exists
  833.     If Len(Dir$(wWL)) = 0 Then
  834.         Create_Word_Database = "Cannot Find Word List To Import"
  835.         Set cPhoneme = Nothing
  836.         Frame4.Visible = False
  837.         Exit Function
  838.     End If
  839.     
  840.  
  841.     ' create the database
  842.     uStatus = "Creating Word Database"
  843.     RaiseEvent StatusChange
  844.     If GetInputState <> 0 Then DoEvents
  845.     
  846.     Set WSP = DBEngine.Workspaces(0)
  847.     
  848.     ' create a blank database
  849.     RetDB = Create_New_Database(wDB, "", True)
  850.     If RetDB = False Then
  851.         Create_Word_Database = "Failed To Create Word Database"
  852.         WSP.Close
  853.         Set WSP = Nothing
  854.         Set cPhoneme = Nothing
  855.         Frame4.Visible = False
  856.         Exit Function
  857.     End If
  858.     If GetInputState <> 0 Then DoEvents
  859.     
  860.     ' ceate blank table
  861.     RetDB = Create_New_Table(wDB, "", "Words", True)
  862.     If RetDB = False Then
  863.         Create_Word_Database = "Failed To Create Words Table In Word Database"
  864.         WSP.Close
  865.         Set WSP = Nothing
  866.         Set cPhoneme = Nothing
  867.         Frame4.Visible = False
  868.         Exit Function
  869.     End If
  870.     If GetInputState <> 0 Then DoEvents
  871.     
  872.     ' creat word field
  873.     RetDB = Create_New_Field(wDB, "", "Words", "Word", dbText, True, True, False, True, Null, Null, Null, 50, True)
  874.     If RetDB = False Then
  875.         Create_Word_Database = "Failed To Create Word Field In Words Table"
  876.         WSP.Close
  877.         Set WSP = Nothing
  878.         Set cPhoneme = Nothing
  879.         Frame4.Visible = False
  880.         Exit Function
  881.     End If
  882.     If GetInputState <> 0 Then DoEvents
  883.     
  884.     ' create soundex field
  885.     RetDB = Create_New_Field(wDB, "", "Words", "Soundex", dbText, True, False, False, True, Null, Null, Null, 8, True)
  886.     If RetDB = False Then
  887.         Create_Word_Database = "Failed To Create Soundex Field In Words Table"
  888.         WSP.Close
  889.         Set WSP = Nothing
  890.         Set cPhoneme = Nothing
  891.         Frame4.Visible = False
  892.         Exit Function
  893.     End If
  894.     If GetInputState <> 0 Then DoEvents
  895.     
  896.     ' create soundex field
  897.     RetDB = Create_New_Field(wDB, "", "Words", "UserAdded", dbBoolean, False, False, False, True, Null, Null, Null, Null, True)
  898.     If RetDB = False Then
  899.         Create_Word_Database = "Failed To Create UserAdded Field In Words Table"
  900.         WSP.Close
  901.         Set WSP = Nothing
  902.         Set cPhoneme = Nothing
  903.         Frame4.Visible = False
  904.         Exit Function
  905.     End If
  906.     If GetInputState <> 0 Then DoEvents
  907.     
  908.     ' database created with not errors
  909.     ' open database and record set
  910.     Set wordlistDB = WSP.OpenDatabase(wDB, False)
  911.     
  912.     ' open record set for word to be imported into
  913.     Set wordRS = wordlistDB.OpenRecordset("Words", dbOpenTable)
  914.  
  915.     ' get file size so progress can be calculated
  916.     wlSIZE = FileLen(wWL)
  917.  
  918.     ' get file handle for import
  919.     frf = FreeFile()
  920.     
  921.     Open App.Path & "\words.txt" For Input As #frf
  922.     
  923.     
  924.     With wordRS
  925.         '// Read words from the file and add to the database
  926.         Do While Not EOF(frf)
  927.             If GetInputState <> 0 Then DoEvents
  928.             Line Input #frf, tmpStr
  929.             wlPOS = wlPOS + Len(tmpStr) + 2
  930.             
  931.             tmpStr = Trim$(tmpStr)
  932.             .AddNew
  933.             !Word = tmpStr
  934.             !Soundex = cPhoneme.GetSoundexWord(tmpStr)
  935.             .Update
  936.             
  937.             
  938.             '// Prevent the UI from freezing up
  939.             i = i + 1
  940.             If i Mod 1000 = 0 Then
  941.                 wlPERC = Format$((wlPOS / wlSIZE) * 100, "0")
  942.                 If wlPERC > 100 Then wlPERC = 100
  943.                 uStatus = wlPERC & "% Imported"
  944.                 Label4 = uStatus
  945.                 Label4.Refresh
  946.                 RaiseEvent StatusChange
  947.                 
  948.                 ' do shape3 progress
  949.                 sW = (wlPERC / 100) * Shape4.Width
  950.                 If sW > Shape4.Width Then sW = Shape4.Width
  951.                 Shape3.Width = sW
  952.                 Shape3.Refresh
  953.                 
  954.                 DoEvents
  955.             End If
  956.         Loop
  957.         .Close
  958.     End With
  959.     Close #frf
  960.  
  961.     uStatus = i & " Words Imported"
  962.     
  963.     Create_Word_Database = "OK"
  964.     GoTo funcEXIT
  965.  
  966. funcFAIL:
  967.     If Err.Number = 3022 Then
  968.         wordRS.CancelUpdate
  969.         Resume Next
  970.     End If
  971.     Create_Word_Database = Err.Description & " (" & Err.Number & ")"
  972.     
  973. funcEXIT:
  974.     On Local Error Resume Next
  975.     Set cPhoneme = Nothing
  976.     
  977.     wordRS.Close
  978.     Set wordRS = Nothing
  979.     
  980.     wordlistDB.Close
  981.     Set wordlistDB = Nothing
  982.     
  983.     WSP.Close
  984.     Set WSP = Nothing
  985.     
  986.     Close #frf
  987.     
  988.     Frame4.Visible = False
  989. End Function
  990.  
  991. Private Sub Add_Word(ByVal nWORD As String)
  992.     On Local Error Resume Next
  993.     
  994.     Dim cPhoneme As New clsPhoneme
  995.         
  996.     With wRST
  997.         .AddNew
  998.         !Word = nWORD
  999.         !Soundex = cPhoneme.GetSoundexWord(nWORD)
  1000.         !UserAdded = True
  1001.         .Update
  1002.     End With
  1003.     
  1004.     Set cPhoneme = Nothing
  1005. End Sub
  1006.  
  1007.  
  1008. Private Function Delete_Table(dBasePath As String, dBaseName As String, tblToDelete As String) As Boolean
  1009.     On Local Error GoTo fcnFailed
  1010.               
  1011.     Dim DBToAppend As Database
  1012.     Dim a As Integer
  1013.     
  1014.     Set DBToAppend = WSP.OpenDatabase(dBasePath & dBaseName, False)
  1015.     DBToAppend.TableDefs.Refresh
  1016.     For a = 0 To DBToAppend.TableDefs.Count - 1
  1017.         If LCase$(DBToAppend.TableDefs(a).Name) = LCase$(tblToDelete) Then
  1018.             DBToAppend.TableDefs.Delete (tblToDelete)
  1019.             DBToAppend.TableDefs.Refresh
  1020.             Delete_Table = True
  1021.             DBToAppend.Close
  1022.             Set DBToAppend = Nothing
  1023.             Exit Function
  1024.         End If
  1025.     Next a
  1026.     
  1027. fcnFailed:
  1028.     Delete_Table = False
  1029.     DBToAppend.Close
  1030.     Set DBToAppend = Nothing
  1031.     Exit Function
  1032. End Function
  1033.  
  1034. Private Function Create_New_Table(dBasePath As String, dBaseName As String, tblName As String, ReCreateOnColl As Boolean) As Boolean
  1035.     On Local Error GoTo fcnFailed
  1036.               
  1037.     Dim DBToAppend As Database
  1038.     Dim NewTable As TableDef
  1039.     Dim NewField As Field
  1040.     Dim Ret1 As Boolean
  1041.     Dim a As Integer
  1042.     
  1043.     Set DBToAppend = WSP.OpenDatabase(dBasePath & dBaseName, False)
  1044.               
  1045.     For a = 0 To DBToAppend.TableDefs.Count - 1
  1046.         If LCase$(DBToAppend.TableDefs(a).Name) = LCase$(tblName) Then
  1047.             If ReCreateOnColl = True Then
  1048.                 Ret1 = Delete_Table(dBasePath, dBaseName, tblName)
  1049.                 If Ret1 = True Then
  1050.                     Exit For
  1051.                 Else
  1052.                     Create_New_Table = False
  1053.                     DBToAppend.Close
  1054.                     Set DBToAppend = Nothing
  1055.                     Exit Function
  1056.                 End If
  1057.             Else
  1058.                 Create_New_Table = True
  1059.                 DBToAppend.Close
  1060.                 Set DBToAppend = Nothing
  1061.                 Exit Function
  1062.             End If
  1063.         End If
  1064.     Next a
  1065.     
  1066.     Set NewTable = DBToAppend.CreateTableDef(tblName)
  1067.     Set NewField = NewTable.CreateField("StartField", dbText)
  1068.     NewTable.Fields.Append NewField
  1069.     DBToAppend.TableDefs.Append NewTable
  1070.     Create_New_Table = True
  1071.     Set NewTable = Nothing
  1072.     DBToAppend.Close
  1073.     Set DBToAppend = Nothing
  1074.     Ret1 = Delete_Field(dBasePath, dBaseName, tblName, "Startfield")
  1075.     Exit Function
  1076.     
  1077. fcnFailed:
  1078.     On Local Error Resume Next
  1079.     Create_New_Table = False
  1080.     Set NewTable = Nothing
  1081.     DBToAppend.Close
  1082.     Set DBToAppend = Nothing
  1083.     Exit Function
  1084. End Function
  1085.  
  1086. Private Function Delete_Field(dBasePath As String, dBase As String, tblName As String, fldName As String) As Boolean
  1087.     On Local Error GoTo fcnFailed
  1088.               
  1089.     Dim DBToAppend As Database
  1090.     Dim TblToAppend As Recordset
  1091.     Dim CheckIndex As Index
  1092.     Dim a As Integer
  1093.     
  1094.     Set DBToAppend = WSP.OpenDatabase(dBasePath & dBase, False)
  1095.     ' test for indexed
  1096.     DBToAppend.TableDefs.Refresh
  1097.     For a = 0 To DBToAppend.TableDefs(tblName).Indexes.Count - 1
  1098.         If DBToAppend.TableDefs(tblName).Indexes(a).Fields = "+" & fldName Then
  1099.             DBToAppend.TableDefs(tblName).Indexes.Delete (fldName)
  1100.             Exit For
  1101.         End If
  1102.     Next a
  1103.     DBToAppend.TableDefs.Refresh
  1104.     For a = 0 To DBToAppend.TableDefs(tblName).Fields.Count - 1
  1105.         If LCase$(DBToAppend.TableDefs(tblName).Fields(a).Name) = LCase$(fldName) Then
  1106.             DBToAppend.TableDefs(tblName).Fields.Delete (fldName)
  1107.             Delete_Field = True
  1108.             Set TblToAppend = Nothing
  1109.             Set DBToAppend = Nothing
  1110.             Exit Function
  1111.         End If
  1112.     Next a
  1113.     
  1114. fcnFailed:
  1115.     Set TblToAppend = Nothing
  1116.     DBToAppend.Close
  1117.     Set DBToAppend = Nothing
  1118.     Delete_Field = False
  1119.     Exit Function
  1120. End Function
  1121.  
  1122. Private Function Create_New_Database(dBasePath As String, dBaseName As String, ReCreateOnColl As Boolean) As Boolean
  1123.     On Local Error GoTo fcnFailed
  1124.     Dim NewDatabase As Database
  1125.     Dim l As String
  1126.     
  1127.     l = Dir$(dBasePath & dBaseName)
  1128.     If Len(l) <> 0 Then
  1129.         If ReCreateOnColl = True Then
  1130.             If Len(Dir$(dBasePath & dBaseName & "Bak")) > 0 Then
  1131.                 Kill dBasePath & dBaseName & "Bak"
  1132.             End If
  1133.             Name dBasePath & dBaseName As dBasePath & dBaseName & "Bak"
  1134.         Else
  1135.             Create_New_Database = True
  1136.             Exit Function
  1137.         End If
  1138.     End If
  1139.     Set NewDatabase = WSP.CreateDatabase(dBasePath & dBaseName, dbLangGeneral)
  1140.     NewDatabase.Close
  1141.     Set NewDatabase = Nothing
  1142.     Create_New_Database = True
  1143.     Exit Function
  1144.     
  1145. fcnFailed:
  1146.     Set NewDatabase = Nothing
  1147.     Create_New_Database = False
  1148.     Exit Function
  1149. End Function
  1150.  
  1151. Private Function Create_New_Field(dBasePath As String, dBaseName As String, tblName As String, nFieldName As String, nFieldType As Long, nFieldIndexed As Boolean, nFieldUnique As Boolean, nFieldPrimary As Boolean, AlZLength As Boolean, nFieldPosition As Variant, nFieldAbutes As Variant, nFieldDefaultValue As Variant, nFieldSize As Variant, ReCreateOnColl As Boolean) As Boolean
  1152.     On Local Error GoTo fcnFailed
  1153.     
  1154.     Dim DBToAppend As Database
  1155.     Dim TblToAppend As TableDef
  1156.     Dim NewField As Field
  1157.     Dim Ret1 As Boolean
  1158.     Dim a As Integer
  1159.     Dim SqlQ1 As String
  1160.     
  1161.     Set DBToAppend = WSP.OpenDatabase(dBasePath & dBaseName, False)
  1162.     Set TblToAppend = DBToAppend.TableDefs(tblName)
  1163.     For a = 0 To DBToAppend.TableDefs(tblName).Fields.Count - 1
  1164.         If LCase$(DBToAppend.TableDefs(tblName).Fields(a).Name) = LCase$(nFieldName) Then
  1165.             If ReCreateOnColl = True Then
  1166.                 Ret1 = Delete_Field(dBasePath, dBaseName, tblName, nFieldName)
  1167.                 If Ret1 = False Then
  1168.                     Create_New_Field = False
  1169.                     Set NewField = Nothing
  1170.                     DBToAppend.Close
  1171.                     Set DBToAppend = Nothing
  1172.                     Exit Function
  1173.                 End If
  1174.                 Exit For
  1175.             Else
  1176.                 Create_New_Field = True
  1177.                 Set NewField = Nothing
  1178.                 DBToAppend.Close
  1179.                 Set DBToAppend = Nothing
  1180.                 Exit Function
  1181.             End If
  1182.         End If
  1183.     Next a
  1184.     
  1185.     Set NewField = TblToAppend.CreateField(nFieldName, nFieldType)
  1186.     If Not IsNull(nFieldAbutes) Then
  1187.         NewField.Attributes = nFieldAbutes
  1188.     End If
  1189.     If Not IsNull(nFieldSize) Then
  1190.         NewField.Size = nFieldSize
  1191.     End If
  1192.     If Not IsNull(nFieldDefaultValue) Then
  1193.         NewField.DefaultValue = nFieldDefaultValue
  1194.     End If
  1195.     If Not IsNull(nFieldPosition) Then
  1196.         NewField.OrdinalPosition = nFieldPosition
  1197.     End If
  1198.     If AlZLength = True Then
  1199.         If nFieldType = dbText Or nFieldType = dbMemo Then
  1200.             NewField.AllowZeroLength = AlZLength
  1201.         End If
  1202.     End If
  1203.     TblToAppend.Fields.Append NewField
  1204.     SqlQ1 = ""
  1205.     If nFieldIndexed = True Then
  1206.         If nFieldUnique = True Then
  1207.             SqlQ1 = "CREATE UNIQUE INDEX [" & nFieldName
  1208.             SqlQ1 = SqlQ1 & "] ON " & tblName & "([" & nFieldName & "]);"
  1209.         Else
  1210.             SqlQ1 = "CREATE INDEX [" & nFieldName
  1211.             SqlQ1 = SqlQ1 & "] ON " & tblName & "([" & nFieldName & "]);"
  1212.         End If
  1213.     End If
  1214.     If nFieldPrimary = True Then
  1215.         SqlQ1 = "CREATE UNIQUE INDEX [" & nFieldName
  1216.         SqlQ1 = SqlQ1 & "] ON " & tblName & "([" & nFieldName & "]) WITH PRIMARY;"
  1217.     End If
  1218.     If Len(SqlQ1) <> 0 Then DBToAppend.Execute SqlQ1
  1219.  
  1220.     Create_New_Field = True
  1221.     DBToAppend.Close
  1222.     Set DBToAppend = Nothing
  1223.     Set NewField = Nothing
  1224.     Exit Function
  1225.     
  1226. fcnFailed:
  1227.     DBToAppend.Close
  1228.     Set DBToAppend = Nothing
  1229.     Set NewField = Nothing
  1230.     Create_New_Field = False
  1231.     Exit Function
  1232. End Function
  1233.  
  1234.  
  1235. Private Sub cmdADD_Click()
  1236.     Call Add_Word(lblWORD.Caption)
  1237.     Call Get_Next_Word
  1238. End Sub
  1239.  
  1240. Private Sub cmdCHANGE_Click()
  1241.     If levenWords.ListIndex = -1 Then Exit Sub
  1242.     
  1243.     nWORD = levenWords.List(levenWords.ListIndex)
  1244.     wordCHANGED = True
  1245.     RaiseEvent ChangeWord
  1246.     
  1247. End Sub
  1248.  
  1249. Private Sub cmdCHANGEALL_Click()
  1250.     Dim uITEM As Long
  1251.     
  1252.     On Local Error Resume Next
  1253.     
  1254.     If levenWords.ListIndex = -1 Then Exit Sub
  1255.     
  1256.     uITEM = UBound(ChangeAllWords)
  1257.     uITEM = uITEM + 1
  1258.     ReDim Preserve ChangeAllWords(0 To uITEM)
  1259.     
  1260.     ChangeAllWords(uITEM).OriginalWord = lblWORD
  1261.     ChangeAllWords(uITEM).ReplaceWord = levenWords.List(levenWords.ListIndex)
  1262.     
  1263.     Call cmdCHANGE_Click
  1264. End Sub
  1265.  
  1266.  
  1267. Private Sub cmdCHANGETO_Click()
  1268.     txtCHANGETO.Text = Trim$(txtCHANGETO.Text)
  1269.     If Len(txtCHANGETO.Text) = 0 Then Exit Sub
  1270.     If LCase$(txtCHANGETO.Text) = LCase$(lblWORD) Then Exit Sub
  1271.     
  1272.     nWORD = txtCHANGETO
  1273.     wordCHANGED = True
  1274.     RaiseEvent ChangeWord
  1275. End Sub
  1276.  
  1277. Private Sub cmdIGNORE_Click()
  1278.     Call Get_Next_Word
  1279. End Sub
  1280.  
  1281. Private Sub cmdIGNOREALL_Click()
  1282.     Dim uITEM As Long
  1283.     
  1284.     On Local Error Resume Next
  1285.     
  1286.     uITEM = UBound(IgnoreAllWords)
  1287.     uITEM = uITEM + 1
  1288.     ReDim Preserve IgnoreAllWords(0 To uITEM)
  1289.     
  1290.     IgnoreAllWords(uITEM) = lblWORD
  1291.     Call Get_Next_Word
  1292. End Sub
  1293.  
  1294. Private Sub Image1_Click()
  1295.     CloseClicked = True
  1296.     If cmdADD.Enabled Then
  1297.         wRST.Close
  1298.         Set wRST = Nothing
  1299.         wordDBS.Close
  1300.         Set wordDBS = Nothing
  1301.         WSP.Close
  1302.         Set WSP = Nothing
  1303.     
  1304.         RaiseEvent Finished
  1305.     End If
  1306. End Sub
  1307.  
  1308. Private Sub imgALT_Click()
  1309.     On Local Error Resume Next
  1310.     RaiseEvent Alternate
  1311. End Sub
  1312.  
  1313. Private Sub levenWords_Click()
  1314.     If levenWords.ListIndex = -1 Then Exit Sub
  1315.     cmdCHANGE.ToolTipText = "Change Word To " & levenWords.List(levenWords.ListIndex)
  1316.     cmdCHANGEALL.ToolTipText = "Change ALL Words To " & levenWords.List(levenWords.ListIndex)
  1317. End Sub
  1318.  
  1319. Private Sub txtCHANGETO_Change()
  1320.     cmdCHANGETO.ToolTipText = "Change Word To " & txtCHANGETO.Text
  1321. End Sub
  1322.  
  1323. Private Sub UserControl_Initialize()
  1324.     uShowAlternate = False
  1325.     Call RefreshAlternate
  1326. End Sub
  1327.  
  1328. Private Sub UserControl_Resize()
  1329.     UserControl.Width = 4455 '4440
  1330.     UserControl.Height = 4230 '3555
  1331. End Sub
  1332.  
  1333. Private Function Replace_Text(searchSTRING As String, searchFOR As String, replaceWITH As String) As String
  1334.     Dim newSTRING As String
  1335.     Dim i As Long
  1336.     Dim lPART As String
  1337.     Dim rPART As String
  1338.     
  1339.     On Local Error Resume Next
  1340.     
  1341.     newSTRING = searchSTRING
  1342.     i = InStr(1, newSTRING, searchFOR, vbBinaryCompare)
  1343.     While i <> 0
  1344.         lPART = Left$(newSTRING, i - 1)
  1345.         rPART = Right$(newSTRING, Len(newSTRING) - ((i - 1) + Len(searchFOR)))
  1346.         newSTRING = lPART & replaceWITH & rPART
  1347.         i = InStr(i + Len(replaceWITH), newSTRING, searchFOR, vbBinaryCompare)
  1348.     Wend
  1349.     Replace_Text = newSTRING
  1350.     
  1351. End Function
  1352.  
  1353. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  1354.     With PropBag
  1355.         uShowAlternate = .ReadProperty("ShowAlternate", False)
  1356.         uShowEachWord = .ReadProperty("ShowEachWord", False)
  1357.     End With
  1358.     Call RefreshAlternate
  1359. End Sub
  1360.  
  1361. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  1362.     With PropBag
  1363.         .WriteProperty "ShowAlternate", uShowAlternate, False
  1364.         .WriteProperty "ShowEachWord", uShowEachWord, False
  1365.     End With
  1366. End Sub
  1367.