home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / scrtes / scrtest.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1995-05-08  |  16.8 KB  |  480 lines

  1. VERSION 2.00
  2. Begin Form FRMSCR 
  3.    Caption         =   "Form1"
  4.    ClientHeight    =   3420
  5.    ClientLeft      =   1470
  6.    ClientTop       =   1530
  7.    ClientWidth     =   6015
  8.    Height          =   3825
  9.    Left            =   1410
  10.    LinkTopic       =   "Form1"
  11.    ScaleHeight     =   3420
  12.    ScaleWidth      =   6015
  13.    Top             =   1185
  14.    Width           =   6135
  15.    Begin CommandButton Command1 
  16.       Cancel          =   -1  'True
  17.       Caption         =   "E&xit"
  18.       Height          =   495
  19.       Left            =   2400
  20.       TabIndex        =   2
  21.       Top             =   2595
  22.       Width           =   1215
  23.    End
  24.    Begin ListBox List1 
  25.       Height          =   1980
  26.       Left            =   360
  27.       TabIndex        =   1
  28.       Top             =   240
  29.       Width           =   5055
  30.    End
  31.    Begin VScrollBar VScroll1 
  32.       Height          =   1980
  33.       LargeChange     =   10
  34.       Left            =   5400
  35.       Max             =   1000
  36.       TabIndex        =   0
  37.       Top             =   240
  38.       Width           =   255
  39.    End
  40. Option Explicit
  41. Dim MFile As database     ' Database
  42. Dim MTable As table       ' Table
  43. Dim Mcnt As Integer       ' General purpose loop counter
  44. Dim MxF As String         ' First Record
  45. Dim MxT As String         ' Top Record
  46. Dim MxB As String         ' Bottom Record
  47. Dim MxL As String         ' Last Record
  48. Dim MxN As Integer        ' Number of Records
  49. Dim MxI As Integer        ' Curr Rec Relative Index
  50. Dim MxJ As Integer        ' Temp Index
  51. Dim MxM As Integer        ' Movement reqd !
  52. Dim MxO As Integer        ' Previous Movement ?
  53. Dim MIndex As Integer     ' Current Index-Open Pointer
  54. Dim MxKN As Integer       ' KeyPress Code
  55. Dim MxK1 As String        ' Search Key - Character to Add-On
  56. Dim MxK2 As String        ' Search Key - Fully Assembled
  57. Dim MLev As Integer       ' Event Level Counter
  58. Dim MLevC(10) As String   ' Event Identity Array
  59. Dim MLevP(10) As String   ' Event Indent Padding
  60. Dim MxK As String         '
  61. Dim MxV As Integer        '
  62. Sub Command1_Click ()
  63.     MTable.Close
  64.     MFile.Close
  65.     End
  66. End Sub
  67. Sub Form_Load ()
  68.     ' Enable focus on Scroll-Bar during Form-Load
  69.     ' (prevents error due to setting size of scroll bar)
  70.     FrmScr.Show
  71.     'OpenDb
  72.     ' Open the Database
  73.     Set MFile = OpenDatabase("AFile.mdb")
  74.     ' Open the Data Table
  75.     Set MTable = MFile.OpenTable("ATable")
  76.     ' Open the RecNo Index
  77.     MTable.Index = "AIndex1"
  78.     ' Set Index Number Var
  79.     MIndex = 1
  80.     ' Initialise Counters
  81.     MxF = MTable.Bookmark      ' First Record
  82.     MxT = MxF                  ' Top Record
  83.     'MxC = MxF                  ' Current Record
  84.     MxI = 1                    ' Index of Current Record
  85.     MxN = MTable.RecordCount   ' Number of Records
  86.     MxB = ""                   ' Bottom Record
  87.     MxL = ""                   ' Last Record
  88.     ' Find the last record bookmark for jump-to-End
  89.     MxK = Str$(MxN - 1)
  90.     MxV = Len(MxK) - 1
  91.     MxK = Mid$("00000", 1, 5 - MxV) + Mid$(MxK, 2, MxV)
  92.     'Debug.Print "|" + MxK + "|"
  93.     MTable.Seek "=", MxK
  94.     'If MTable.NoMatch Then
  95.     '    'Debug.Print "*** No Match"
  96.     'Else
  97.     '    'Debug.Print "*** Found O.K."
  98.         MxL = MTable.Bookmark
  99.     '    ' Display the Record/Field
  100.     '    'Debug.Print Mtable("AField")
  101.     '    For Mcnt = 1 To 9
  102.     '        ' Next Record
  103.     '        MTable.MovePrevious
  104.     '    Next Mcnt
  105.     '    MxH = MTable.Bookmark
  106.     '    ' Display the Record/Field
  107.     '    'Debug.Print Mtable("AField")
  108.     'End If
  109.     ' Load The Event Padding
  110.     For Mcnt = 1 To 10
  111.         MLevP(Mcnt) = Space$(Mcnt * 3)
  112.     Next Mcnt
  113.     ' Load the ListBox
  114.     GoHome
  115.     ' Set the Previous Scroll Value to Initial Value
  116.     Mcnt = 0
  117.     MxO = 0
  118.     ' Set the Scroll-Bar to A Sensible Value
  119.     VScroll1.Max = MxN - 1
  120.     'Debug.Cls
  121.     'Debug.Print " "
  122.     'Debug.Print " "
  123.     'Debug.Print "=============================="
  124.     'Debug.Print " "
  125.     'Debug.Print " "
  126. End Sub
  127. Sub Form_Unload (Cancel As Integer)
  128.     ' Close the Table
  129.     MTable.Close
  130.     ' Close the Database
  131.     MFile.Close
  132. End Sub
  133. Sub GoDirect ()
  134.     ' =================================================
  135.     ' This code is to go directly to a relative position
  136.     ' in the file when the User moves the Thumb.
  137.     ' To keep the speed up it doesn't read through the
  138.     ' file but cheats by jumping directly to a specific
  139.     ' record, this will only work reliably on a fixed
  140.     ' read-only file because the record-number entry in
  141.     ' the file can only be maintained on a 'batch' basis
  142.     ' =================================================
  143.     'Debug.Print MLevP(MLev) + "<< Go-Direct >>"
  144.     'Debug.Print MLevP(MLev + 1) + "== V:", VScroll1.Value, "MxO:", MxO
  145.     ' Set the search-key to null
  146.     MxK2 = ""
  147.     ' Store the old comparison value
  148.     MxO = VScroll1.Value
  149.     ' Reset Index If Required (after a Keyed-Search)
  150.     If MIndex = 2 Then
  151.         MTable.Index = "AIndex1"
  152.         MIndex = 1
  153.     End If
  154.     ' Formulate the numeric search key !
  155.     MxK = Str$(MxO)
  156.     MxV = Len(MxK) - 1
  157.     MxK = Mid$("00000", 1, 5 - MxV) + Mid$(MxK, 2, MxV)
  158.     ' Find The Record
  159.     MTable.Seek "=", MxK
  160.     If MTable.NoMatch Then
  161.         'Debug.Print MLevP(MLev + 1) + "== No Match :", MxK
  162.     Else
  163.         'Debug.Print MLevP(MLev + 1) + "== Found O.K.", MxK
  164.         MxI = 0                   ' Set the Listbox index to Top
  165.         MxT = MTable.Bookmark     ' Store the Top bookmark
  166.         LoadList                  ' Reload the Listbox
  167.     End If
  168.     'Debug.Print MLevP(MLev) + ">> Go-Direct <<"
  169. End Sub
  170. Sub GoDown ()
  171.     MxI = MxI + 1              ' Increment Index Pointer
  172.     ' ***** This triggers a Listbox Click Event ! *****
  173.     List1.ListIndex = MxI      ' Set ListBox Index
  174. End Sub
  175. Sub GoEnd ()
  176.     'Debug.Print MLevP(MLev) + "<< GoEnd >>"
  177.     MxI = 9
  178.     MTable.Bookmark = MxL                    ' Move To Last
  179.     For Mcnt = 1 To 9                        ' Skip backwards 9 records
  180.         MTable.MovePrevious                  ' (Analogous to Skip-1 in dbase)
  181.     Next Mcnt
  182.     MxT = MTable.Bookmark                    ' Set New Top Bookmark
  183.     LoadList                                 ' Reload the Listbox
  184.     'Debug.Print MLevP(MLev) + ">> GoEnd <<"
  185. End Sub
  186. Sub GoHome ()
  187.     'Debug.Print MLevP(MLev) + "<< GoHome >>"
  188.     MxT = MxF                ' Set the Top-Bookmark to First
  189.     MxI = 0                  ' Set the Listbox Index to Top (0)
  190.     LoadList                 ' Reload the Listbox
  191.     'Debug.Print MLevP(MLev) + ">> GoHome <<"
  192. End Sub
  193. Sub GoKey ()
  194.     'Debug.Print MLevP(MLev) + "<< Go-Key >>"
  195.     ' Add the new character onto the end of the search key
  196.     MxK2 = MxK2 + MxK1
  197.     ' Set the index to Searchkey if set to Rec-Number
  198.     If MIndex = 1 Then
  199.         MTable.Index = "AIndex2"
  200.         MIndex = 2
  201.     End If
  202.     ' Do a Seek (use >= so a perfect match is not required)
  203.     MTable.Seek ">=", MxK2
  204.     If MTable.NoMatch Then
  205.         'Debug.Print MLevP(MLev + 1) + "== No Match", "|" + MxK2 + "|"
  206.         MxK2 = ""
  207.     Else
  208.         If MxK2 <> Mid$(MTable("AKey"), 1, Len(MxK2)) Then
  209.             'Debug.Print MLevP(MLev + 1) + "== Silly Match", "|" + MxK2 + "|"
  210.             MxK2 = ""
  211.         Else
  212.             'Debug.Print MLevP(MLev + 1) + "== Found O.K.", "|" + MxK2 + "|" + MTable("ARecNo") + "|" + MTable("Afield") + "|"
  213.             'Reset The Scroll Bar to the right place
  214.             VScroll1.Value = Val(MTable("ARecNo"))
  215.             ' Keep the old-scroll value up-to-date
  216.             MxO = VScroll1.Value
  217.             ' Store the Top-Record bookmark
  218.             MxT = MTable.Bookmark
  219.             ' Set the listbox index to top
  220.             MxI = 0
  221.             ' Load the ListBox
  222.             LoadList
  223.         End If
  224.     End If
  225.     'Debug.Print MLevP(MLev) + ">> Go-Key <<"
  226. End Sub
  227. Sub GoLotsDown ()
  228.     ' ***** this routine should never be called *****"
  229.     'Debug.Print MLevP(MLev) + "<< Go-Lots-Down >>"
  230.     Debug.Print MLevP(MLev) + "!! Go-Lots-Down !!"
  231.     'Debug.Print MLevP(MLev) + ">> Go-Lots-Down <<"
  232. End Sub
  233. Sub GoLotsUp ()
  234.     ' ***** this routine should never be called *****"
  235.     'Debug.Print MLevP(MLev) + "<< Go-Lots-Up >>"
  236.     Debug.Print MLevP(MLev) + "!! Go-Lots-Up !!"
  237.     'Debug.Print MLevP(MLev) + ">> Go-Lots-Up <<"
  238. End Sub
  239. Sub GoPageDown ()
  240.     MxT = MxB                  ' Set Top to bottom bookmark
  241.     MxI = 0                    ' Set Listbox index pointer
  242.     LoadList                   ' Load the Listbox
  243. End Sub
  244. Sub GoPageUp1 ()
  245.     'Debug.Print MLevP(MLev) + "<< Go-Page-Up-1 >>"
  246.     MTable.Bookmark = MxT                    ' Move to Top
  247.     ' Skip Backwards for 10 records (or BOF)
  248.     MxJ = 0
  249.     Do While (Not MTable.BOF) And (MxJ < 10)
  250.         MTable.MovePrevious           ' Skip-1 (g)
  251.         MxJ = MxJ + 1
  252.     Loop
  253.     ' Protect from Bof errors
  254.     If MTable.BOF Then
  255.         MxJ = MxJ - 1
  256.         MTable.MoveNext               ' Skip (g)
  257.     End If
  258.     MxT = MTable.Bookmark             ' Store New Top
  259.     MxI = MxJ - 1                     ' Set index position
  260.     LoadList                          ' Load ListBox
  261.     'Debug.Print MLevP(MLev) + "<< Go-Page-Up-1 >>"
  262. End Sub
  263. Sub GoPageUp10 ()
  264.     ' Move to 'Top' Record
  265.     MTable.Bookmark = MxT
  266.     ' Skip Backwards for 10 records (or BOF)
  267.     MxJ = 10
  268.     Do While (Not MTable.BOF) And (MxJ > 0)
  269.         MxJ = MxJ - 1
  270.         MTable.MovePrevious
  271.     Loop
  272.     ' Prevent Bof errors
  273.     If MTable.BOF Then
  274.         MTable.MoveNext
  275.     End If
  276.     'Reset Pointers
  277.     MxT = MTable.Bookmark
  278.     ' Load the ListBox
  279.     LoadList
  280.     MxI = 0
  281.     List1.ListIndex = 0
  282. End Sub
  283. Sub GoSelect ()
  284.    ' Code to branch to other actions goes here
  285.    ' Triggered by <CR> or <Dbl-Click>
  286.    Debug.Print "  == Item Selected", MxI, List1.Text
  287. End Sub
  288. Sub GoUp ()
  289.     MxI = MxI - 1            ' Decrement Index Pointer
  290.     ' ***** This triggers a Listbox Click Event ! *****
  291.     List1.ListIndex = MxI    ' Set Listbox Index
  292. End Sub
  293. Sub List1_Click ()
  294.     MLev = MLev + 1
  295.     MLevC(MLev) = "LC"
  296.     'Debug.Print " "
  297.     'Debug.Print MLevP(MLev) + "<< List-Click >>"
  298.     Master
  299.     'Debug.Print MLevP(MLev) + ">> List-Click <<"
  300.     MLev = MLev - 1
  301. End Sub
  302. Sub List1_DblClick ()
  303.     'GoSelect
  304.     MLev = MLev + 1
  305.     MLevC(MLev) = "LD"
  306.     'Debug.Print " "
  307.     'Debug.Print MLevP(MLev) + "<< List-Dbl-Click >>"
  308.     Master
  309.     'Debug.Print MLevP(MLev) + ">> List-Dbl-Click <<"
  310.     MLev = MLev - 1
  311. End Sub
  312. Sub List1_KeyPress (KeyAscii As Integer)
  313.     'MLev = MLev + 1
  314.     'Debug.Print MLevP(MLev) + "<< List-KeyPress >>"
  315.     'MxKN = KeyAscii
  316.     'Master
  317.     'Debug.Print MLevP(MLev) + ">> List-KeyPress <<"
  318.     'MLev = MLev - 1
  319. End Sub
  320. Sub LoadList ()
  321.     List1.Clear                              ' Clear ListBox
  322.     MTable.Bookmark = MxT                    ' Move To Top
  323.     MxJ = 0
  324.     Do Until (MTable.EOF) Or (MxJ > 9)       ' Read thru records
  325.         List1.AddItem MTable("Afield"), MxJ  ' Store to ListBox
  326.         MTable.MoveNext                      ' Next Record (Skip)
  327.         MxJ = MxJ + 1                        ' Increment Counter
  328.     Loop
  329.     ' Prevent Eof errors
  330.     If MTable.EOF Then
  331.         MTable.MovePrevious
  332.     End If
  333.     ' Store the 'Bottom' Record (for Page-downs)
  334.     MxB = MTable.Bookmark
  335.     ' Set Listbox Index to Pointer
  336.     List1.ListIndex = MxI
  337. End Sub
  338. Sub Master ()
  339.     ' ================================================
  340.     ' This convoluted code is needed because keeping the
  341.     ' Listbox and V-Scroll in Synch triggers change events
  342.     ' and can result in an endless loop if not filtered out
  343.     ' ================================================
  344.     'Debug.Print MLevP(MLev + 1) + "<< Master >>"
  345.     If MLev > 1 Then
  346.         'Debug.Print MLevP(MLev + 2) + "== Event Ignored " + Str$(MLev) + " " + MLevC(MLev)
  347.     Else
  348.         'Debug.Print MLevP(MLev + 2) + "== Event " + Str$(MLev) + " " + MLevC(MLev)
  349.         MLev = MLev + 2
  350.         If MLevC(1) = "LC" Then            ' Listclick event
  351.             SListClick
  352.             'Debug.Print MLevP(MLev + 2) + "== ReFocus On VScroll"
  353.             VScroll1.SetFocus              ' Refocus on VScroll
  354.         ElseIf MLevC(1) = "VK" Then        ' Keypress event
  355.             SKeyPress
  356.         ElseIf MLevC(1) = "LD" Then        ' Dbl-Click event
  357.             SListDbClick
  358.             'Debug.Print MLevP(MLev + 2) + "== ReFocus On VScroll"
  359.             VScroll1.SetFocus              ' Refocus on VScroll
  360.         ElseIf MLevC(1) = "VC" Then        ' Scroll-Change event
  361.             SVScrollChange
  362.         ElseIf MLevC(1) = "VS" Then        ' Scroll-Scroll event
  363.             SVScrollScroll
  364.         End If
  365.         MLev = MLev - 2
  366.     End If
  367.     'Debug.Print MLevP(MLev + 1) + ">> Master <<"
  368. End Sub
  369. Sub SKeyPress ()
  370.     If MxKN = 13 Then            ' Detect <CR>
  371.         'Debug.Print "  == Item Selected", List1.Text
  372.         GoSelect
  373.     Else
  374.         MxK1 = UCase(Chr(MxKN))  ' Convert to Upper-case
  375.         'Debug.Print "==", MxKN, MxK1
  376.         GoKey
  377.     End If
  378. End Sub
  379. Sub SListClick ()
  380.     'Debug.Print MLevP(MLev + 2) + "<< SListClick >>"
  381.     If MxI = List1.ListIndex Then
  382.         'Debug.Print MLevP(MLev + 2) + "== No-Change =="
  383.     Else
  384.         'Debug.Print MLevP(MLev + 2) + "== Change ==", MxI, List1.ListIndex
  385.         ' Keep the Scroll-bar in Synch
  386.         ' ***** This triggers a Scroll-Change Event ! *****
  387.         VScroll1.Value = VScroll1.Value - MxI + List1.ListIndex
  388.         MxO = VScroll1.Value     ' Store the old comparison value
  389.         MxI = List1.ListIndex    ' Store the index pointer
  390.         MxK2 = ""                ' Reset the search-key to null
  391.     End If
  392.     'Debug.Print MLevP(MLev + 2) + ">> SListClick <<"
  393. End Sub
  394. Sub SListDbClick ()
  395.     ' Listbox Double-Click Event
  396.     GoSelect
  397. End Sub
  398. Sub SVScrollChange ()
  399.     'Debug.Print MLevP(MLev) + "<< SVScrollChange >>"
  400.     'Debug.Print MLevP(MLev + 1) + "== V:", VScroll1.Value, "MxO:", MxO
  401.     MxK2 = ""                     ' Set the search-key to null
  402.     If VScroll1.Value = 0 Then
  403.         'Debug.Print MLevP(MLev + 1) + "== Go-Home"
  404.         GoHome
  405.     ElseIf VScroll1.Value = MxN - 1 Then
  406.         'Debug.Print MLevP(MLev + 1) + "== Go-End"
  407.         GoEnd
  408.     Else
  409.         ' Determine Net Movement
  410.         MxM = VScroll1.Value - MxO ' Compare current value to old-value
  411.         If MxM = 1 Then            ' Down-Requested
  412.             'Debug.Print MLevP(MLev + 1) + "== Down-Requested"
  413.             If MxI < 9 Then
  414.                 'Debug.Print MLevP(MLev + 1) + "== Down-Achieved"
  415.                 GoDown               ' Down-Achieved
  416.             Else
  417.                 'Debug.Print MLevP(MLev + 1) + "== Page-Down-Instead"
  418.                 GoPageDown           ' Page-Down-Instead
  419.             End If
  420.         ElseIf MxM = -1 Then       ' Up-Requested
  421.             'Debug.Print MLevP(MLev + 1) + "== Up-Requested"
  422.             If MxI > 0 Then
  423.                 'Debug.Print MLevP(MLev + 1) + "== Up-Achieved"
  424.                 GoUp                 ' Up-Achieved
  425.             Else
  426.                 'Debug.Print MLevP(MLev + 1) + "== Page-Up-Instead"
  427.                 GoPageUp1            ' Page-Up-Instead
  428.             End If
  429.         ElseIf MxM = 10 Then       ' Page-Down
  430.             'Debug.Print MLevP(MLev + 1) + "== Page-Down-Requested"
  431.             GoPageDown
  432.         ElseIf MxM = -10 Then      ' Page-Up
  433.             'Debug.Print MLevP(MLev + 1) + "== Page-Up-Requested"
  434.             GoPageUp10
  435.         ElseIf MxM > 10 Then       ' Lots-Down
  436.             'Debug.Print MLevP(MLev + 1) + "== Lots-Down-Requested"
  437.             GoLotsDown
  438.         ElseIf MxM < -10 Then      ' Lots-Up
  439.             'Debug.Print MLevP(MLev + 1) + "== Lots-Up-Requested"
  440.             GoLotsUp
  441.         ElseIf MxM < -1 Then       ' Page-Up Near-Top ?
  442.             GoHome
  443.         ElseIf MxM > 1 Then        ' Page-Down Near-End ?
  444.             GoEnd
  445.         End If
  446.     End If
  447.     ' Store Old Value - to compare next time around
  448.     MxO = VScroll1.Value
  449.     'Debug.Print MLevP(MLev) + ">> SVScrollChange <<"
  450. End Sub
  451. Sub SVScrollScroll ()
  452.     ' User picked up the Thumb and moved it
  453.     GoDirect
  454. End Sub
  455. Sub VScroll1_Change ()
  456.     MLev = MLev + 1
  457.     MLevC(MLev) = "VC"
  458.     'Debug.Print MLevP(MLev) + "<< VScroll-Change >>"
  459.     Master
  460.     'Debug.Print MLevP(MLev) + ">> VScroll-Change <<"
  461.     MLev = MLev - 1
  462. End Sub
  463. Sub VScroll1_KeyPress (KeyAscii As Integer)
  464.     MLev = MLev + 1
  465.     MLevC(MLev) = "VK"
  466.     'Debug.Print MLevP(MLev) + "<< List-KeyPress >>"
  467.     MxKN = KeyAscii
  468.     Master
  469.     'Debug.Print MLevP(MLev) + ">> List-KeyPress <<"
  470.     MLev = MLev - 1
  471. End Sub
  472. Sub VScroll1_Scroll ()
  473.     MLev = MLev + 1
  474.     MLevC(MLev) = "VS"
  475.     'Debug.Print MLevP(MLev) + "<< VScroll-Scroll >>"
  476.     Master
  477.     'Debug.Print MLevP(MLev) + ">> VScroll-Scroll <<"
  478.     MLev = MLev - 1
  479. End Sub
  480.