home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / DAO_Databa706554102002.psc / Browser.ctl < prev    next >
Encoding:
Visual Basic user-defined control file  |  2002-04-10  |  38.7 KB  |  1,441 lines

  1. VERSION 5.00
  2. Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
  3. Begin VB.UserControl Browser 
  4.    BackColor       =   &H008080FF&
  5.    BackStyle       =   0  'Transparent
  6.    ClientHeight    =   4290
  7.    ClientLeft      =   0
  8.    ClientTop       =   0
  9.    ClientWidth     =   9915
  10.    DefaultCancel   =   -1  'True
  11.    KeyPreview      =   -1  'True
  12.    LockControls    =   -1  'True
  13.    ScaleHeight     =   4290
  14.    ScaleWidth      =   9915
  15.    ToolboxBitmap   =   "Browser.ctx":0000
  16.    Begin VB.Timer tmrTick 
  17.       Enabled         =   0   'False
  18.       Interval        =   40
  19.       Left            =   3345
  20.       Top             =   3975
  21.    End
  22.    Begin VB.VScrollBar scScroll 
  23.       Enabled         =   0   'False
  24.       Height          =   3915
  25.       LargeChange     =   10
  26.       Left            =   9690
  27.       Max             =   14
  28.       Min             =   14
  29.       TabIndex        =   10
  30.       Top             =   0
  31.       Value           =   14
  32.       Width           =   225
  33.    End
  34.    Begin VB.TextBox txSearch 
  35.       Enabled         =   0   'False
  36.       Height          =   285
  37.       Left            =   1200
  38.       TabIndex        =   0
  39.       ToolTipText     =   "Search for..."
  40.       Top             =   3990
  41.       Width           =   2115
  42.    End
  43.    Begin VB.CommandButton btNav 
  44.       Caption         =   "| <"
  45.       Enabled         =   0   'False
  46.       BeginProperty Font 
  47.          Name            =   "MS Sans Serif"
  48.          Size            =   8.25
  49.          Charset         =   0
  50.          Weight          =   700
  51.          Underline       =   0   'False
  52.          Italic          =   0   'False
  53.          Strikethrough   =   0   'False
  54.       EndProperty
  55.       Height          =   300
  56.       Index           =   0
  57.       Left            =   3780
  58.       TabIndex        =   1
  59.       ToolTipText     =   "First"
  60.       Top             =   3990
  61.       Width           =   540
  62.    End
  63.    Begin VB.CommandButton btNav 
  64.       Caption         =   "> |"
  65.       Enabled         =   0   'False
  66.       BeginProperty Font 
  67.          Name            =   "MS Sans Serif"
  68.          Size            =   8.25
  69.          Charset         =   0
  70.          Weight          =   700
  71.          Underline       =   0   'False
  72.          Italic          =   0   'False
  73.          Strikethrough   =   0   'False
  74.       EndProperty
  75.       Height          =   300
  76.       Index           =   5
  77.       Left            =   6465
  78.       TabIndex        =   6
  79.       ToolTipText     =   "Last"
  80.       Top             =   3990
  81.       Width           =   540
  82.    End
  83.    Begin VB.CommandButton btNav 
  84.       Caption         =   "<"
  85.       Enabled         =   0   'False
  86.       BeginProperty Font 
  87.          Name            =   "MS Sans Serif"
  88.          Size            =   8.25
  89.          Charset         =   0
  90.          Weight          =   700
  91.          Underline       =   0   'False
  92.          Italic          =   0   'False
  93.          Strikethrough   =   0   'False
  94.       EndProperty
  95.       Height          =   300
  96.       Index           =   2
  97.       Left            =   4845
  98.       TabIndex        =   3
  99.       ToolTipText     =   "Previous"
  100.       Top             =   3990
  101.       Width           =   540
  102.    End
  103.    Begin VB.CommandButton btNav 
  104.       Caption         =   ">"
  105.       Enabled         =   0   'False
  106.       BeginProperty Font 
  107.          Name            =   "MS Sans Serif"
  108.          Size            =   8.25
  109.          Charset         =   0
  110.          Weight          =   700
  111.          Underline       =   0   'False
  112.          Italic          =   0   'False
  113.          Strikethrough   =   0   'False
  114.       EndProperty
  115.       Height          =   300
  116.       Index           =   3
  117.       Left            =   5385
  118.       TabIndex        =   4
  119.       ToolTipText     =   "Next"
  120.       Top             =   3990
  121.       Width           =   540
  122.    End
  123.    Begin VB.CommandButton btNav 
  124.       Caption         =   ">>"
  125.       Enabled         =   0   'False
  126.       BeginProperty Font 
  127.          Name            =   "MS Sans Serif"
  128.          Size            =   8.25
  129.          Charset         =   0
  130.          Weight          =   700
  131.          Underline       =   0   'False
  132.          Italic          =   0   'False
  133.          Strikethrough   =   0   'False
  134.       EndProperty
  135.       Height          =   300
  136.       Index           =   4
  137.       Left            =   5925
  138.       TabIndex        =   5
  139.       ToolTipText     =   "Page down"
  140.       Top             =   3990
  141.       Width           =   540
  142.    End
  143.    Begin VB.CommandButton btNav 
  144.       Caption         =   "<<"
  145.       Enabled         =   0   'False
  146.       BeginProperty Font 
  147.          Name            =   "MS Sans Serif"
  148.          Size            =   8.25
  149.          Charset         =   0
  150.          Weight          =   700
  151.          Underline       =   0   'False
  152.          Italic          =   0   'False
  153.          Strikethrough   =   0   'False
  154.       EndProperty
  155.       Height          =   300
  156.       Index           =   1
  157.       Left            =   4305
  158.       TabIndex        =   2
  159.       ToolTipText     =   "Page up"
  160.       Top             =   3990
  161.       Width           =   540
  162.    End
  163.    Begin VB.CommandButton btOKCan 
  164.       Caption         =   "OK"
  165.       Default         =   -1  'True
  166.       Enabled         =   0   'False
  167.       BeginProperty Font 
  168.          Name            =   "MS Sans Serif"
  169.          Size            =   8.25
  170.          Charset         =   0
  171.          Weight          =   700
  172.          Underline       =   0   'False
  173.          Italic          =   0   'False
  174.          Strikethrough   =   0   'False
  175.       EndProperty
  176.       Height          =   300
  177.       Index           =   0
  178.       Left            =   7410
  179.       TabIndex        =   7
  180.       Top             =   3990
  181.       Width           =   945
  182.    End
  183.    Begin VB.CommandButton btOKCan 
  184.       Cancel          =   -1  'True
  185.       Caption         =   "Cancel"
  186.       BeginProperty Font 
  187.          Name            =   "MS Sans Serif"
  188.          Size            =   8.25
  189.          Charset         =   0
  190.          Weight          =   700
  191.          Underline       =   0   'False
  192.          Italic          =   0   'False
  193.          Strikethrough   =   0   'False
  194.       EndProperty
  195.       Height          =   300
  196.       Index           =   1
  197.       Left            =   8385
  198.       TabIndex        =   8
  199.       Top             =   3990
  200.       Width           =   945
  201.    End
  202.    Begin MSFlexGridLib.MSFlexGrid gdBrowse 
  203.       Height          =   3930
  204.       Left            =   0
  205.       TabIndex        =   9
  206.       TabStop         =   0   'False
  207.       Top             =   0
  208.       Width           =   9690
  209.       _ExtentX        =   17092
  210.       _ExtentY        =   6932
  211.       _Version        =   393216
  212.       Rows            =   16
  213.       Cols            =   10
  214.       BackColorSel    =   128
  215.       BackColorBkg    =   12632256
  216.       GridColor       =   8421504
  217.       GridColorFixed  =   12632256
  218.       WordWrap        =   -1  'True
  219.       AllowBigSelection=   0   'False
  220.       FocusRect       =   0
  221.       GridLines       =   2
  222.       ScrollBars      =   0
  223.       SelectionMode   =   1
  224.       AllowUserResizing=   1
  225.    End
  226.    Begin VB.Label lbFullPop 
  227.       Caption         =   "ⁿ"
  228.       BeginProperty Font 
  229.          Name            =   "Wingdings"
  230.          Size            =   14.25
  231.          Charset         =   2
  232.          Weight          =   400
  233.          Underline       =   0   'False
  234.          Italic          =   0   'False
  235.          Strikethrough   =   0   'False
  236.       EndProperty
  237.       ForeColor       =   &H00000000&
  238.       Height          =   285
  239.       Left            =   7095
  240.       TabIndex        =   12
  241.       ToolTipText     =   "Fully populated"
  242.       Top             =   3990
  243.       Visible         =   0   'False
  244.       Width           =   225
  245.    End
  246.    Begin VB.Label lbSearchName 
  247.       Alignment       =   1  'Rechts
  248.       Appearance      =   0  '2D
  249.       BackColor       =   &H00C0C0C0&
  250.       Height          =   195
  251.       Left            =   15
  252.       TabIndex        =   11
  253.       Top             =   4035
  254.       Width           =   1095
  255.    End
  256. End
  257. Attribute VB_Name = "Browser"
  258. Attribute VB_GlobalNameSpace = False
  259. Attribute VB_Creatable = True
  260. Attribute VB_PredeclaredId = False
  261. Attribute VB_Exposed = True
  262. Option Explicit
  263. DefLng A-Z
  264.  
  265. Private Declare Function GetFocus Lib "user32" () As Long
  266. Private Declare Sub PutFocus Lib "user32" Alias "SetFocus" (ByVal hWnd)
  267.  
  268. Private Type ColInfo
  269.     myColWidth          As Long
  270.     myHeader            As String
  271.     myFieldName         As String
  272.     myFieldTranslation  As Boolean
  273. End Type
  274.  
  275. Public Enum SortDirection
  276.     Ascending = 1
  277.     Descending = 2
  278. End Enum
  279.  
  280. Private Const DefWidth  As Long = 510          'column 0 width
  281. Private Const MinIx     As Long = 1
  282. Private Const MaxIx     As Long = 15
  283. Private Const NavCodes  As String = "$!&(""#"  'keycodes for Pos1 PageUp CursorUp CursorDown PageDown End
  284.  
  285. Private myEnabled       As Boolean
  286. Private myAutosize      As Boolean
  287. Private myDynamicScroll As Boolean
  288. Private myDisplayName   As String
  289. Private myRecordset     As DAO.Recordset
  290. Private myOrderedBy     As String
  291. Private mySortOrder     As SortDirection
  292. Private myColumnInfo()  As ColInfo
  293. Private myCurrBookmark(1 To MaxIx) As String
  294.  
  295. Private Head            As String
  296. Private ForwardLine     As Boolean
  297. Private ForwardPage     As Boolean
  298. Private ReverseLine     As Boolean
  299. Private ReversePage     As Boolean
  300. Private NotFull         As Boolean
  301. Private PageScroll      As Boolean
  302. Private ScrChanged      As Boolean
  303. Private FieldContents   As Variant
  304. Private CompOper        As String
  305. Private OtherCompOper   As String
  306. Private ScrollDivi      As Long
  307. Private TotalWidth      As Long
  308. Private PreviousRow     As Long
  309. Private FilledTo        As Long
  310. Private TpP             As Long
  311.  
  312. Public Event OK()
  313. Public Event Cancel()
  314. Public Event PositionChanged(ByVal Row As Long)
  315. Public Event TranslateColumn(ByVal FieldName As String, ByVal OldValue As Variant, NewValue As Variant)
  316.  
  317. Public Sub AdjustCol(ByVal Col As Long)
  318.  
  319.     ColWidth(Col) = RequiredColWidth(Col)
  320.  
  321. End Sub
  322.  
  323. Public Sub AdjustCols()
  324.  
  325.   Dim i
  326.  
  327.     For i = 1 To gdBrowse.Cols - 1
  328.         AdjustCol (i)
  329.     Next i
  330.  
  331. End Sub
  332.  
  333. Public Property Let Autosize(ByVal nuAutosize As Boolean)
  334. Attribute Autosize.VB_Description = "Sets / returns whether the Control will automatically adjust the column widths to the text displayed."
  335. Attribute Autosize.VB_HelpID = 10007
  336.  
  337.     myAutosize = (nuAutosize <> False)
  338.     If Ambient.UserMode Then
  339.         AdjustCols
  340.     End If
  341.     PropertyChanged "Autosize"
  342.  
  343. End Property
  344.  
  345. Public Property Get Autosize() As Boolean
  346.  
  347.     Autosize = myAutosize
  348.  
  349. End Property
  350.  
  351. Public Property Get Backcolor() As OLE_COLOR
  352.  
  353.     Backcolor = gdBrowse.Backcolor
  354.  
  355. End Property
  356.  
  357. Public Property Let Backcolor(ByVal nuBackColor As OLE_COLOR)
  358.  
  359.     gdBrowse.Backcolor = nuBackColor
  360.     PropertyChanged "Backcolor"
  361.  
  362. End Property
  363.  
  364. Public Property Let BarBackcolor(ByVal nuBackColor As OLE_COLOR)
  365. Attribute BarBackcolor.VB_Description = "Sets / returns the highlite bar backcolor."
  366. Attribute BarBackcolor.VB_HelpID = 10012
  367.  
  368.     gdBrowse.BackColorSel = nuBackColor
  369.     PropertyChanged "BarBackcolor"
  370.  
  371. End Property
  372.  
  373. Public Property Get BarBackcolor() As OLE_COLOR
  374.  
  375.     BarBackcolor = gdBrowse.BackColorSel
  376.  
  377. End Property
  378.  
  379. Public Property Let BarForecolor(ByVal nuForecolor As OLE_COLOR)
  380. Attribute BarForecolor.VB_Description = "Sets / returns the highlite bar forecolor."
  381. Attribute BarForecolor.VB_HelpID = 10013
  382.  
  383.     gdBrowse.ForeColorSel = nuForecolor
  384.     PropertyChanged "BarForeColor"
  385.  
  386. End Property
  387.  
  388. Public Property Get BarForecolor() As OLE_COLOR
  389.  
  390.     BarForecolor = gdBrowse.ForeColorSel
  391.  
  392. End Property
  393.  
  394. Public Property Get Bookmark(Row As Long) As String
  395.  
  396.     If Row >= MinIx And Row <= MaxIx Then
  397.         Bookmark = myCurrBookmark(Row)
  398.     End If
  399.  
  400. End Property
  401.  
  402. Private Sub btNav_MouseDown(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)
  403.  
  404.     tmrTick.Interval = 333
  405.     Select Case Index
  406.       Case 0   'BOF
  407.         GoFirst
  408.       Case 1   'Page back
  409.         ReversePage = True
  410.         ScrollPageRev
  411.         tmrTick.Enabled = True
  412.       Case 2   'Line back
  413.         ReverseLine = True
  414.         ScrollLineRev
  415.         tmrTick.Enabled = True
  416.       Case 3   'Line forward
  417.         ForwardLine = True
  418.         ScrollLineFwd
  419.         tmrTick.Enabled = True
  420.       Case 4   'Page forward
  421.         ForwardPage = True
  422.         ScrollPageFwd
  423.         tmrTick.Enabled = True
  424.       Case 5   'EOF
  425.         GoLast
  426.     End Select
  427.  
  428. End Sub
  429.  
  430. Private Sub btNav_MouseUp(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)
  431.  
  432.     tmrTick.Enabled = False
  433.     ForwardLine = False
  434.     ForwardPage = False
  435.     ReverseLine = False
  436.     ReversePage = False
  437.     gdBrowse.SetFocus
  438.  
  439. End Sub
  440.  
  441. Private Sub btOKCan_Click(Index As Integer)
  442.  
  443.     If Index = 0 Then
  444.         RaiseEvent OK
  445.       Else 'NOT INDEX...
  446.         RaiseEvent Cancel
  447.     End If
  448.  
  449. End Sub
  450.  
  451. Private Sub ChangedPosition(NewRow)
  452.  
  453.     If NewRow <> PreviousRow Then
  454.         PreviousRow = NewRow
  455.         RaiseEvent PositionChanged(NewRow)
  456.     End If
  457.  
  458. End Sub
  459.  
  460. Public Property Get Cols() As Long
  461. Attribute Cols.VB_Description = "Sets / returns the number of columns for the grid."
  462. Attribute Cols.VB_HelpID = 10033
  463.  
  464.     Cols = gdBrowse.Cols - 1
  465.  
  466. End Property
  467.  
  468. Public Property Let Cols(ByVal nuCols As Long)
  469.  
  470.     If nuCols < 1 Then
  471.         Err.Raise 9, Ambient.DisplayName
  472.       Else 'NOT NUCOLS...
  473.         gdBrowse.Cols = nuCols + 1
  474.         ReDim Preserve myColumnInfo(1 To nuCols)
  475.         EqualColWidth
  476.         gdBrowse.Col = 1
  477.         gdBrowse.ColSel = gdBrowse.Cols - 1
  478.     End If
  479.  
  480. End Property
  481.  
  482. Public Property Let ColWidth(ByVal Col As Long, ByVal nuColWidth As Long)
  483. Attribute ColWidth.VB_Description = "Sets / returns the width in twips for a specific column."
  484. Attribute ColWidth.VB_HelpID = 10038
  485.  
  486.   Dim i
  487.  
  488.     If Ambient.UserMode = False Then
  489.         Err.Raise 387, Ambient.DisplayName
  490.       Else 'NOT AMBIENT.USERMODE...
  491.         If Col < LBound(myColumnInfo) Or Col > UBound(myColumnInfo) Then
  492.             Err.Raise 9, Ambient.DisplayName
  493.           Else 'NOT COL...
  494.             i = gdBrowse.ColWidth(gdBrowse.Cols - 1) + gdBrowse.ColWidth(Col) - nuColWidth
  495.             If i < 120 Then
  496.                 i = 120
  497.             End If
  498.             myColumnInfo(gdBrowse.Cols - 1).myColWidth = i
  499.             myColumnInfo(Col).myColWidth = nuColWidth
  500.             SetColWidth
  501.         End If
  502.     End If
  503.  
  504. End Property
  505.  
  506. Public Property Get ColWidth(ByVal Col As Long) As Long
  507.  
  508.     If Col < LBound(myColumnInfo) Or Col > UBound(myColumnInfo) Then
  509.         Err.Raise 9, Ambient.DisplayName
  510.       Else 'NOT COL...
  511.         ColWidth = myColumnInfo(Col).myColWidth
  512.     End If
  513.  
  514. End Property
  515.  
  516. Public Property Get CurrentBookmark() As String
  517.  
  518.     CurrentBookmark = myCurrBookmark(gdBrowse.Row)
  519.  
  520. End Property
  521.  
  522. Public Property Get DisplayName() As String
  523. Attribute DisplayName.VB_Description = "Sets / returns a user friendly name for the order-by field."
  524. Attribute DisplayName.VB_HelpID = 10011
  525.  
  526.     DisplayName = lbSearchName
  527.  
  528. End Property
  529.  
  530. Public Property Let DisplayName(ByVal nuDisplayName As String)
  531.  
  532.     lbSearchName = nuDisplayName
  533.     PropertyChanged "DisplayName"
  534.  
  535. End Property
  536.  
  537. Public Property Get DynamicScroll() As Boolean
  538. Attribute DynamicScroll.VB_Description = "Sets / returns whether the srcollbar will dynamically scroll the grid."
  539. Attribute DynamicScroll.VB_HelpID = 10006
  540.  
  541.     DynamicScroll = myDynamicScroll
  542.  
  543. End Property
  544.  
  545. Public Property Let DynamicScroll(ByVal nuDynamicScroll As Boolean)
  546.  
  547.     myDynamicScroll = (nuDynamicScroll <> False)
  548.     PropertyChanged "DynamicScroll"
  549.  
  550. End Property
  551.  
  552. Public Property Get Enabled() As Boolean
  553. Attribute Enabled.VB_Description = "Gibt einen Wert zurⁿck, der bestimmt, ob ein Objekt auf vom Benutzer erzeugte Ereignisse reagieren kann, oder legt diesen fest."
  554. Attribute Enabled.VB_HelpID = 10005
  555.  
  556.     Enabled = myEnabled
  557.  
  558. End Property
  559.  
  560. Public Property Let Enabled(ByVal nuEnabled As Boolean)
  561.  
  562.   Dim i
  563.  
  564.     myEnabled = nuEnabled
  565.     If Not myRecordset Is Nothing Then
  566.         For i = 0 To 5
  567.             btNav(i).Enabled = nuEnabled
  568.         Next i
  569.         btOKCan(0).Enabled = nuEnabled
  570.         btOKCan(1).Enabled = nuEnabled
  571.         txSearch.Enabled = nuEnabled
  572.         gdBrowse.Enabled = nuEnabled
  573.     End If
  574.     PropertyChanged "Enabled"
  575.  
  576. End Property
  577.  
  578. Public Sub EqualColWidth()
  579.  
  580.   Dim i, j, k
  581.  
  582.     With gdBrowse
  583.         k = .Width - TpP - TpP
  584.         .ColWidth(0) = DefWidth
  585.         k = k - DefWidth
  586.         j = Int(k / (.Cols - 1) / TpP) * TpP
  587.         For i = 1 To .Cols - 2
  588.             .ColWidth(i) = j
  589.             myColumnInfo(i).myColWidth = j
  590.             k = k - j
  591.         Next i
  592.         .ColWidth(i) = k - TpP - TpP - TpP - TpP
  593.         myColumnInfo(i).myColWidth = k - TpP - TpP - TpP - TpP
  594.     End With 'GDBROWSE
  595.  
  596. End Sub
  597.  
  598. Public Property Let FieldName(ByVal Col As Long, ByVal nuFieldName As String)
  599. Attribute FieldName.VB_Description = "Sets / returns the fieldname for a specific column."
  600. Attribute FieldName.VB_HelpID = 10018
  601.  
  602.     If Ambient.UserMode = False Then
  603.         Err.Raise 387, Ambient.DisplayName
  604.       Else 'NOT AMBIENT.USERMODE...
  605.         If Col < LBound(myColumnInfo) Or Col > UBound(myColumnInfo) Then
  606.             Err.Raise 9, Ambient.DisplayName
  607.           Else 'NOT COL...
  608.             myColumnInfo(Col).myFieldName = nuFieldName
  609.         End If
  610.     End If
  611.  
  612. End Property
  613.  
  614. Public Property Get FieldName(ByVal Col As Long) As String
  615.  
  616.     If Col < LBound(myColumnInfo) Or Col > UBound(myColumnInfo) Then
  617.         Err.Raise 9, Ambient.DisplayName
  618.       Else 'NOT COL...
  619.         FieldName = myColumnInfo(Col).myFieldName
  620.     End If
  621.  
  622. End Property
  623.  
  624. Public Property Get FieldTranslation(ByVal Col As Long) As Boolean
  625. Attribute FieldTranslation.VB_Description = "Turns field-translation for a specific column on or off."
  626. Attribute FieldTranslation.VB_HelpID = 10019
  627.  
  628.     If Col < LBound(myColumnInfo) Or Col > UBound(myColumnInfo) Then
  629.         Err.Raise 9, Ambient.DisplayName
  630.       Else 'NOT COL...
  631.         FieldTranslation = myColumnInfo(Col).myFieldTranslation
  632.     End If
  633.  
  634. End Property
  635.  
  636. Public Property Let FieldTranslation(ByVal Col As Long, ByVal nuFieldTranslation As Boolean)
  637.  
  638.     If Ambient.UserMode = False Then
  639.         Err.Raise 387, Ambient.DisplayName
  640.       Else 'NOT AMBIENT.USERMODE...
  641.         If Col < LBound(myColumnInfo) Or Col > UBound(myColumnInfo) Then
  642.             Err.Raise 9, Ambient.DisplayName
  643.           Else 'NOT COL...
  644.             myColumnInfo(Col).myFieldTranslation = (nuFieldTranslation <> False)
  645.         End If
  646.     End If
  647.  
  648. End Property
  649.  
  650. Private Sub FillGridFwd()
  651.  
  652.   Dim i
  653.  
  654.     gdBrowse.Clear
  655.     gdBrowse.FormatString = Head
  656.     SetColWidth
  657.     With myRecordset
  658.         NotFull = False
  659.         For i = MinIx To MaxIx
  660.             If .EOF Then
  661.                 .MoveLast
  662.                 lbFullPop.Visible = True
  663.                 NotFull = (.RecordCount >= MaxIx)
  664.                 Exit For '>---> Next
  665.               Else '.EOF = FALSE
  666.                 myCurrBookmark(i) = .Bookmark
  667.                 gdBrowse.TextMatrix(i, 0) = .AbsolutePosition + 1
  668.                 FillRow i
  669.                 .MoveNext
  670.             End If
  671.         Next i
  672.         FilledTo = i - 1
  673.     End With 'MYRECORDSET
  674.     If i > MaxIx Then
  675.         SetScroll gdBrowse.TextMatrix(MaxIx, 0) - 1
  676.     End If
  677.     If myAutosize Then
  678.         AdjustCols
  679.     End If
  680.  
  681. End Sub
  682.  
  683. Private Sub FillGridRev()
  684.  
  685.   Dim i
  686.  
  687.     gdBrowse.Clear
  688.     gdBrowse.FormatString = Head
  689.     SetColWidth
  690.     With myRecordset
  691.         For i = MaxIx To MinIx Step -1
  692.             If .BOF Then
  693.                 .MoveFirst
  694.                 Exit For '>---> Next
  695.               Else '.BOF = FALSE
  696.                 gdBrowse.TextMatrix(i, 0) = .AbsolutePosition + 1
  697.                 myCurrBookmark(i) = .Bookmark
  698.                 FillRow i
  699.                 .MovePrevious
  700.             End If
  701.         Next i
  702.     End With 'MYRECORDSET
  703.     If i > 0 Then
  704.         'that was not enough to fill the grid in reverse
  705.         FillGridFwd
  706.       Else 'NOT I...
  707.         SetScroll gdBrowse.TextMatrix(MaxIx, 0) - 1
  708.     End If
  709.     If myAutosize Then
  710.         AdjustCols
  711.     End If
  712.  
  713. End Sub
  714.  
  715. Private Sub FillRow(RowNumber As Long)
  716.  
  717.   Dim i
  718.  
  719.     With myRecordset
  720.         For i = 1 To gdBrowse.Cols - 1
  721.             FieldContents = .Fields(myColumnInfo(i).myFieldName)
  722.             If myColumnInfo(i).myFieldTranslation Then
  723.                 RaiseEvent TranslateColumn(myColumnInfo(i).myFieldName, FieldContents, FieldContents)
  724.             End If
  725.             If IsNull(FieldContents) Then
  726.                 FieldContents = "[?]"
  727.             End If
  728.             gdBrowse.TextMatrix(RowNumber, i) = Trim$(FieldContents)
  729.         Next i
  730.     End With 'MYRECORDSET
  731.  
  732. End Sub
  733.  
  734. Public Function FindFirst(Key As Variant) As Boolean
  735.  
  736.     With myRecordset
  737.         If VarType(Key) = vbString Then
  738.             .FindFirst myOrderedBy & " Like " & "'" & Key & "*'"
  739.           Else 'NOT VARTYPE(KEY)...
  740.             .FindFirst myOrderedBy & CompOper & Key
  741.         End If
  742.         If Not .NoMatch Then
  743.             FillGridFwd
  744.             FindFirst = True
  745.             Hilite MinIx
  746.         End If
  747.     End With 'MYRECORDSET
  748.  
  749. End Function
  750.  
  751. Public Function FindLast(Key As Variant) As Boolean
  752.  
  753.     With myRecordset
  754.         If VarType(Key) = vbString Then
  755.             .FindLast myOrderedBy & " Like " & "'" & Key & "*'"
  756.           Else 'NOT VARTYPE(KEY)...
  757.             .FindLast myOrderedBy & OtherCompOper & Key
  758.         End If
  759.         If Not .NoMatch Then
  760.             FillGridRev
  761.             FindLast = True
  762.             Hilite MaxIx
  763.         End If
  764.     End With 'MYRECORDSET
  765.  
  766. End Function
  767.  
  768. Public Property Let Forecolor(ByVal nuForecolor As OLE_COLOR)
  769.  
  770.     gdBrowse.Forecolor = nuForecolor
  771.     PropertyChanged "ForeColor"
  772.  
  773. End Property
  774.  
  775. Public Property Get Forecolor() As OLE_COLOR
  776.  
  777.     Forecolor = gdBrowse.Forecolor
  778.  
  779. End Property
  780.  
  781. Public Property Get FullyPopulated() As Boolean
  782.  
  783.     FullyPopulated = lbFullPop.Visible
  784.  
  785. End Property
  786.  
  787. Private Sub gdBrowse_DblClick()
  788.  
  789.     btOKCan_Click 0
  790.  
  791. End Sub
  792.  
  793. Private Sub gdBrowse_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
  794.  
  795.     Hilite gdBrowse.Row
  796.  
  797. End Sub
  798.  
  799. Private Sub gdBrowse_SelChange()
  800.  
  801.     If gdBrowse.ColSel = gdBrowse.Cols - 1 Then
  802.         ChangedPosition gdBrowse.Row
  803.     End If
  804.  
  805. End Sub
  806.  
  807. Public Sub GoBookmark(Bookmark As String)
  808.  
  809.     myRecordset.Bookmark = Bookmark
  810.     FillGridFwd
  811.  
  812. End Sub
  813.  
  814. Public Sub GoFirst()
  815.  
  816.     myRecordset.MoveFirst
  817.     FillGridFwd
  818.     With gdBrowse
  819.         If .Row = 1 Then
  820.             PreviousRow = 0
  821.             ChangedPosition .Row
  822.           Else 'NOT .ROW...
  823.             Hilite MinIx
  824.         End If
  825.     End With 'GDBROWSE
  826.  
  827. End Sub
  828.  
  829. Public Sub GoLast()
  830.  
  831.     myRecordset.MoveLast
  832.     lbFullPop.Visible = True
  833.     FillGridRev
  834.     With gdBrowse
  835.         If .Row = MaxIx Then
  836.             PreviousRow = 0
  837.             ChangedPosition .Row
  838.           Else 'NOT .ROW...
  839.             Hilite FilledTo
  840.         End If
  841.     End With 'GDBROWSE
  842.  
  843. End Sub
  844.  
  845. Public Property Let HeadBackcolor(ByVal nuBackColor As OLE_COLOR)
  846.  
  847.     gdBrowse.BackColorFixed = nuBackColor
  848.     PropertyChanged "HeadBackcolor"
  849.  
  850. End Property
  851.  
  852. Public Property Get HeadBackcolor() As OLE_COLOR
  853.  
  854.     HeadBackcolor = gdBrowse.BackColorFixed
  855.  
  856. End Property
  857.  
  858. Public Property Let Header(ByVal Col As Long, ByVal nuHeader As String)
  859. Attribute Header.VB_Description = "Sets / returns the column header for a specific column."
  860. Attribute Header.VB_HelpID = 10017
  861.  
  862.   Dim i
  863.  
  864.     If Ambient.UserMode = False Then
  865.         Err.Raise 387, Ambient.DisplayName
  866.       Else 'NOT AMBIENT.USERMODE...
  867.         If Col < LBound(myColumnInfo) Or Col > UBound(myColumnInfo) Then
  868.             Err.Raise 9, Ambient.DisplayName
  869.           Else 'NOT COL...
  870.             myColumnInfo(Col).myHeader = nuHeader
  871.             Head = ""
  872.             For i = 1 To gdBrowse.Cols - 1
  873.                 Head = Head & "|" & myColumnInfo(i).myHeader
  874.             Next i
  875.             gdBrowse.FormatString = Head
  876.             SetColWidth
  877.         End If
  878.     End If
  879.  
  880. End Property
  881.  
  882. Public Property Get Header(ByVal Col As Long) As String
  883.  
  884.     If Col < LBound(myColumnInfo) Or Col > UBound(myColumnInfo) Then
  885.         Err.Raise 9, Ambient.DisplayName
  886.       Else 'NOT COL...
  887.         Header = myColumnInfo(Col).myHeader
  888.     End If
  889.  
  890. End Property
  891.  
  892. Public Property Get HeadForecolor() As OLE_COLOR
  893.  
  894.     HeadForecolor = gdBrowse.ForeColorFixed
  895.  
  896. End Property
  897.  
  898. Public Property Let HeadForecolor(ByVal nuForecolor As OLE_COLOR)
  899.  
  900.     gdBrowse.ForeColorFixed = nuForecolor
  901.     PropertyChanged "HeadForeColor"
  902.  
  903. End Property
  904.  
  905. Private Sub Hilite(Row As Long)
  906.  
  907.     With gdBrowse
  908.         .Row = Row
  909.         .Col = 1
  910.         .ColSel = .Cols - 1
  911.     End With 'GDBROWSE
  912.  
  913. End Sub
  914.  
  915. Public Property Let OrderedBy(ByVal nuOrderedBy As String)
  916. Attribute OrderedBy.VB_Description = "Sets / returns the fieldname by which the recordset is ordered."
  917. Attribute OrderedBy.VB_HelpID = 10015
  918.  
  919.     myOrderedBy = nuOrderedBy
  920.     PropertyChanged "OrderedBy"
  921.  
  922. End Property
  923.  
  924. Public Property Get OrderedBy() As String
  925.  
  926.     OrderedBy = myOrderedBy
  927.  
  928. End Property
  929.  
  930. Public Property Get Recordset() As DAO.Recordset
  931. Attribute Recordset.VB_Description = "Sets the recordset for the control; may be a bookmarkable dynaset or snapshot."
  932. Attribute Recordset.VB_HelpID = 10014
  933.  
  934.     Set Recordset = myRecordset
  935.  
  936. End Property
  937.  
  938. Public Property Set Recordset(ByVal nuRecordset As DAO.Recordset)
  939.  
  940.     If Ambient.UserMode = False Then
  941.         Err.Raise 383, Ambient.DisplayName
  942.       Else 'NOT AMBIENT.USERMODE...
  943.         If nuRecordset.Bookmarkable Then
  944.             Set myRecordset = nuRecordset
  945.             lbFullPop.Visible = False
  946.             Enabled = myEnabled
  947.             FillGridFwd
  948.           Else 'NURECORDSET.BOOKMARKABLE = FALSE
  949.             Err.Raise 300, Ambient.DisplayName, "Recordset is not bookmarkable"
  950.         End If
  951.     End If
  952.  
  953. End Property
  954.  
  955. Public Sub Refresh()
  956.  
  957.     myRecordset.Bookmark = myCurrBookmark(1)
  958.     FillGridFwd
  959.  
  960. End Sub
  961.  
  962. Public Sub Reposition(Bookmark As String, ByVal Row As Long)
  963.  
  964.   Dim i
  965.  
  966.     gdBrowse.Visible = False
  967.     GoBookmark Bookmark
  968.     If Row < MinIx Or Row > MaxIx Then
  969.         gdBrowse.Visible = True
  970.         Err.Raise 380, Ambient.DisplayName, "Row number " & Row & " does not exist."
  971.       Else 'NOT ROW...
  972.         gdBrowse.Row = 1
  973.         PageScroll = True
  974.         Do Until Row <= 1
  975.             Row = Row - 1
  976.             ScrollLineRev
  977.         Loop
  978.         For i = MinIx To MaxIx
  979.             If Bookmark = myCurrBookmark(i) Then
  980.                 gdBrowse.Row = i
  981.                 Exit For '>---> Next
  982.             End If
  983.         Next i
  984.         gdBrowse.Col = 1
  985.         gdBrowse.ColSel = gdBrowse.Cols - 1
  986.         PageScroll = False
  987.         gdBrowse.Visible = True
  988.         If i > MaxIx Then
  989.             Err.Raise 3159, Ambient.DisplayName, "Bookmark not found."
  990.         End If
  991.     End If
  992.  
  993. End Sub
  994.  
  995. Public Property Get RequiredColWidth(ByVal Col As Long) As Long
  996.  
  997.   Dim i, j, k
  998.  
  999.     If Col < LBound(myColumnInfo) Or Col > UBound(myColumnInfo) Then
  1000.         Err.Raise 9, Ambient.DisplayName
  1001.       Else 'NOT COL...
  1002.         With gdBrowse
  1003.             j = 0
  1004.             For i = MinIx - 1 To MaxIx
  1005.                 k = UserControl.TextWidth(Trim$(.TextMatrix(i, Col))) + 120
  1006.                 If k > j Then
  1007.                     j = k
  1008.                 End If
  1009.             Next i
  1010.             RequiredColWidth = j
  1011.         End With 'GDBROWSE
  1012.     End If
  1013.  
  1014. End Property
  1015.  
  1016. Public Sub ScrollLineFwd()
  1017.  
  1018.   Dim i
  1019.  
  1020.     If gdBrowse.Row = FilledTo Then
  1021.         With myRecordset
  1022.             .Bookmark = myCurrBookmark(MaxIx)
  1023.             .MoveNext
  1024.             If .EOF Then
  1025.                 .MoveLast
  1026.                 lbFullPop.Visible = True
  1027.               Else '.EOF = FALSE
  1028.                 gdBrowse.AddItem .AbsolutePosition + 1
  1029.                 gdBrowse.RemoveItem 1
  1030.                 For i = MinIx To MaxIx - 1
  1031.                     myCurrBookmark(i) = myCurrBookmark(i + 1)
  1032.                 Next i
  1033.                 myCurrBookmark(MaxIx) = .Bookmark
  1034.                 FillRow i
  1035.                 If Not PageScroll Then
  1036.                     PreviousRow = 0
  1037.                     ChangedPosition gdBrowse.Row
  1038.                     If myAutosize Then
  1039.                         AdjustCols
  1040.                     End If
  1041.                 End If
  1042.             End If
  1043.             SetScroll Val(gdBrowse.TextMatrix(MaxIx, 0)) - 1
  1044.         End With 'MYRECORDSET
  1045.       Else 'NOT GDBROWSE.ROW...
  1046.         Hilite gdBrowse.Row + 1
  1047.     End If
  1048.  
  1049. End Sub
  1050.  
  1051. Public Sub ScrollLineRev()
  1052.  
  1053.   Dim i
  1054.  
  1055.     If gdBrowse.Row > 1 Then
  1056.         Hilite gdBrowse.Row - 1
  1057.       Else 'NOT GDBROWSE.ROW...
  1058.         With myRecordset
  1059.             .Bookmark = myCurrBookmark(1)
  1060.             .MovePrevious
  1061.             If .BOF Then
  1062.                 .MoveFirst
  1063.               Else '.BOF = FALSE
  1064.                 gdBrowse.AddItem .AbsolutePosition + 1, 1
  1065.                 gdBrowse.RemoveItem MaxIx + 1
  1066.                 For i = MaxIx To MinIx + 1 Step -1
  1067.                     myCurrBookmark(i) = myCurrBookmark(i - 1)
  1068.                 Next i
  1069.                 myCurrBookmark(1) = .Bookmark
  1070.                 FillRow i
  1071.                 If Not PageScroll Then
  1072.                     PreviousRow = 0
  1073.                     ChangedPosition gdBrowse.Row
  1074.                     If myAutosize Then
  1075.                         AdjustCols
  1076.                     End If
  1077.                 End If
  1078.             End If
  1079.             SetScroll Val(gdBrowse.TextMatrix(MaxIx, 0)) - 1
  1080.         End With 'MYRECORDSET
  1081.     End If
  1082.  
  1083. End Sub
  1084.  
  1085. Public Sub ScrollPageFwd()
  1086.  
  1087.   Dim i
  1088.  
  1089.     With gdBrowse
  1090.         If .Row = MaxIx Then
  1091.             PreviousRow = 0
  1092.             ChangedPosition .Row
  1093.           Else 'NOT .ROW...
  1094.             Hilite FilledTo
  1095.         End If
  1096.         PageScroll = True
  1097.         For i = MinIx To MaxIx
  1098.             ScrollLineFwd
  1099.         Next i
  1100.         PageScroll = False
  1101.     End With 'GDBROWSE
  1102.     If myAutosize Then
  1103.         AdjustCols
  1104.     End If
  1105.  
  1106. End Sub
  1107.  
  1108. Public Sub ScrollPageRev()
  1109.  
  1110.   Dim i
  1111.  
  1112.     With gdBrowse
  1113.         If .Row = 1 Then
  1114.             PreviousRow = 0
  1115.             ChangedPosition .Row
  1116.           Else 'NOT .ROW...
  1117.             Hilite MinIx
  1118.         End If
  1119.         PageScroll = True
  1120.         For i = MinIx To MaxIx
  1121.             ScrollLineRev
  1122.         Next i
  1123.         PageScroll = False
  1124.     End With 'GDBROWSE
  1125.     If myAutosize Then
  1126.         AdjustCols
  1127.     End If
  1128.  
  1129. End Sub
  1130.  
  1131.  
  1132. Private Sub scScroll_Change()
  1133.  
  1134.     ScrChanged = True
  1135.     scScroll_Scroll
  1136.     ScrChanged = False
  1137.  
  1138. End Sub
  1139.  
  1140. Private Sub scScroll_Scroll()
  1141.  
  1142.     If myDynamicScroll Or ScrChanged Then
  1143.         If GetFocus = scScroll.hWnd Then
  1144.             myRecordset.Move scScroll * ScrollDivi - myRecordset.AbsolutePosition
  1145.             FillGridRev
  1146.             PreviousRow = 0
  1147.             ChangedPosition gdBrowse.Row
  1148.         End If
  1149.     End If
  1150.  
  1151. End Sub
  1152.  
  1153. Public Property Let SearchFor(nuSearch As String)
  1154. Attribute SearchFor.VB_Description = "Sets / returns the contents of the user accessible search key."
  1155. Attribute SearchFor.VB_HelpID = 10034
  1156.  
  1157.     txSearch = nuSearch
  1158.  
  1159. End Property
  1160.  
  1161. Public Property Get SearchFor() As String
  1162.  
  1163.     SearchFor = txSearch
  1164.  
  1165. End Property
  1166.  
  1167. Public Property Get SelectedRow() As Long
  1168.  
  1169.     SelectedRow = gdBrowse.Row
  1170.  
  1171. End Property
  1172.  
  1173. Private Sub SetColWidth()
  1174.  
  1175.   Dim i
  1176.  
  1177.     gdBrowse.ColWidth(0) = DefWidth
  1178.     For i = 1 To gdBrowse.Cols - 1
  1179.         gdBrowse.ColWidth(i) = myColumnInfo(i).myColWidth
  1180.     Next i
  1181.  
  1182. End Sub
  1183.  
  1184. Private Sub SetScroll(ByVal Value As Long)
  1185.  
  1186.     With scScroll
  1187.         Value = Value / ScrollDivi
  1188.         Do Until Value < 32767
  1189.             Value = Value / 2
  1190.             ScrollDivi = ScrollDivi * 2
  1191.             .Max = 0
  1192.         Loop
  1193.         If .Max < Value Then
  1194.             .Max = Value
  1195.             .LargeChange = Value / MaxIx
  1196.         End If
  1197.         If Value >= .Min And Value <= .Max Then
  1198.             If GetFocus <> scScroll.hWnd Then
  1199.                 scScroll = Value
  1200.             End If
  1201.         End If
  1202.         .Enabled = (.Min < .Max)
  1203.     End With 'SCSCROLL
  1204.  
  1205. End Sub
  1206.  
  1207. Public Property Let SortOrder(ByVal nuSortOrder As SortDirection)
  1208. Attribute SortOrder.VB_Description = "Sets / returns the sort order of the SortedBy column."
  1209. Attribute SortOrder.VB_HelpID = 10016
  1210.  
  1211.     If nuSortOrder = Ascending Or nuSortOrder = Descending Then
  1212.         mySortOrder = nuSortOrder
  1213.         If mySortOrder = Ascending Then
  1214.             CompOper = " >= "
  1215.             OtherCompOper = " <= "
  1216.           Else 'NOT MYSORTORDER...
  1217.             CompOper = " <= "
  1218.             OtherCompOper = " >= "
  1219.         End If
  1220.         PropertyChanged "SortOrder"
  1221.       Else 'NOT NUSORTORDER...
  1222.         Err.Raise 380, Ambient.DisplayName
  1223.     End If
  1224.  
  1225. End Property
  1226.  
  1227. Public Property Get SortOrder() As SortDirection
  1228.  
  1229.     SortOrder = mySortOrder
  1230.  
  1231. End Property
  1232.  
  1233. Private Sub tmrTick_Timer()
  1234.  
  1235.     Select Case True
  1236.       Case ForwardLine
  1237.         ScrollLineFwd
  1238.       Case ReverseLine
  1239.         ScrollLineRev
  1240.       Case ForwardPage
  1241.         ScrollPageFwd
  1242.       Case ReversePage
  1243.         ScrollPageRev
  1244.     End Select
  1245.     tmrTick.Interval = 40
  1246.  
  1247. End Sub
  1248.  
  1249. Private Sub txSearch_Change()
  1250.  
  1251.   Dim BkMk   As String
  1252.  
  1253.     BkMk = myCurrBookmark(1)
  1254.     Select Case myRecordset.Fields(myOrderedBy).Type
  1255.       Case dbChar, dbText
  1256.         If Len(Trim$(txSearch)) = myRecordset.Fields(myOrderedBy).Size Then
  1257.             myRecordset.FindFirst myOrderedBy & CompOper & "'" & Trim$(txSearch) & "'"
  1258.           Else 'NOT LEN(TRIM$(TXSearch))...
  1259.             myRecordset.FindFirst myOrderedBy & " Like '" & Trim$(txSearch) & "*'"
  1260.         End If
  1261.       Case Else
  1262.         myRecordset.FindFirst myOrderedBy & CompOper & Trim$(txSearch)
  1263.     End Select
  1264.     If myRecordset.NoMatch Then
  1265.         Beep
  1266.     End If
  1267.     FillGridFwd
  1268.     If NotFull Then
  1269.         FillGridRev
  1270.     End If
  1271.     Hilite MinIx
  1272.     If myCurrBookmark(1) <> BkMk Then
  1273.         ChangedPosition gdBrowse.Row
  1274.     End If
  1275.  
  1276. End Sub
  1277.  
  1278. Private Sub txSearch_GotFocus()
  1279.  
  1280.     txSearch.Backcolor = &HC0FFFF
  1281.  
  1282. End Sub
  1283.  
  1284. Private Sub txSearch_LostFocus()
  1285.  
  1286.     txSearch.Backcolor = &HFFFFFF
  1287.  
  1288. End Sub
  1289.  
  1290. Private Sub UserControl_AmbientChanged(PropertyName As String)
  1291.  
  1292.     lbSearchName.Backcolor = Ambient.Backcolor
  1293.     lbFullPop.Backcolor = Ambient.Backcolor
  1294.     If Ambient.UserMode = False Then
  1295.         gdBrowse.Text = Ambient.DisplayName
  1296.     End If
  1297.  
  1298. End Sub
  1299.  
  1300. Private Sub UserControl_Initialize()
  1301.  
  1302.     TpP = Screen.TwipsPerPixelX
  1303.     ScrollDivi = 1
  1304.     scScroll.Min = MaxIx - 1
  1305.     SetScroll MaxIx - 1
  1306.  
  1307. End Sub
  1308.  
  1309. Private Sub UserControl_InitProperties()
  1310.  
  1311.   Dim i
  1312.  
  1313.     myEnabled = True
  1314.     mySortOrder = Ascending
  1315.     CompOper = " >= "
  1316.     OtherCompOper = " <= "
  1317.     gdBrowse.Cols = 10
  1318.     ReDim myColumnInfo(1 To gdBrowse.Cols - 1)
  1319.     For i = 1 To gdBrowse.Cols - 1
  1320.         myColumnInfo(i).myColWidth = 960
  1321.         myColumnInfo(i).myHeader = ""
  1322.     Next i
  1323.     gdBrowse.BackColorSel = vbHighlight
  1324.     gdBrowse.ForeColorSel = vbHighlightText
  1325.     gdBrowse.Backcolor = vbWindowBackground
  1326.     gdBrowse.Forecolor = vbWindowText
  1327.     gdBrowse.BackColorFixed = vbButtonFace
  1328.     gdBrowse.ForeColorFixed = vbButtonText
  1329.     EqualColWidth
  1330.  
  1331. End Sub
  1332.  
  1333. Private Sub UserControl_KeyDown(KeyCode As Integer, Shift As Integer)
  1334.  
  1335.   Dim i       As Integer
  1336.   Dim Focus   As Long
  1337.   Static Busy As Boolean
  1338.  
  1339.     i = InStr(NavCodes, Chr$(KeyCode)) - 1
  1340.     If i >= 0 And i <= 5 Then
  1341.         KeyCode = 0
  1342.         If GetFocus <> gdBrowse.hWnd And Not Busy Then
  1343.             'the grid consumes keydown before preview - no chance to catch it
  1344.             If btNav(i).Enabled Then
  1345.                 Busy = True
  1346.                 Focus = GetFocus
  1347.                 btNav_MouseDown i, 0, 0, 0, 0
  1348.                 btNav_MouseUp i, 0, 0, 0, 0
  1349.                 PutFocus Focus
  1350.                 DoEvents
  1351.                 Busy = False
  1352.             End If
  1353.         End If
  1354.     End If
  1355.  
  1356. End Sub
  1357.  
  1358. Private Sub UserControl_KeyPress(KeyAscii As Integer)
  1359.  
  1360.     If Chr$(KeyAscii) = " " And GetFocus <> txSearch.hWnd Then
  1361.         btOKCan_Click 0
  1362.     End If
  1363.  
  1364. End Sub
  1365.  
  1366. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  1367.  
  1368.     With PropBag
  1369.         myEnabled = .ReadProperty("Enabled", True)
  1370.         myAutosize = .ReadProperty("Autosize", False)
  1371.         myDynamicScroll = .ReadProperty("DynamicScroll", False)
  1372.         myDisplayName = .ReadProperty("DisplayName", "")
  1373.         myOrderedBy = .ReadProperty("OrderedBy", "")
  1374.         SortOrder = .ReadProperty("SortOrder", Ascending)
  1375.         Cols = .ReadProperty("Cols", 10)
  1376.         gdBrowse.BackColorSel = .ReadProperty("BarBackcolor", vbHighlight)
  1377.         gdBrowse.ForeColorSel = .ReadProperty("BarForecolor", vbHighlightText)
  1378.         gdBrowse.Backcolor = .ReadProperty("Backcolor", vbWindowBackground)
  1379.         gdBrowse.Forecolor = .ReadProperty("Forecolor", vbWindowText)
  1380.         gdBrowse.BackColorFixed = .ReadProperty("HeadBackcolor", vbButtonFace)
  1381.         gdBrowse.ForeColorFixed = .ReadProperty("HeadForecolor", vbButtonText)
  1382.     End With 'PROPBAG
  1383.     EqualColWidth
  1384.  
  1385. End Sub
  1386.  
  1387. Private Sub UserControl_Resize()
  1388.  
  1389.     ReDim myColumnInfo(1 To gdBrowse.Cols - 1)
  1390.     Size UserControl.Width, btNav(0).Top + btNav(0).Height
  1391.     scScroll.Left = UserControl.Width - scScroll.Width
  1392.     gdBrowse.Width = scScroll.Left
  1393.     EqualColWidth
  1394.  
  1395. End Sub
  1396.  
  1397. Private Sub UserControl_Show()
  1398.  
  1399.   Dim i
  1400.  
  1401.     UserControl_AmbientChanged ""
  1402.     For i = MinIx To MaxIx
  1403.         gdBrowse.TextMatrix(i, 0) = i
  1404.     Next i
  1405.     If Ambient.UserMode = False Then
  1406.         gdBrowse.Text = Ambient.DisplayName
  1407.     End If
  1408.  
  1409. End Sub
  1410.  
  1411. Private Sub UserControl_Terminate()
  1412.  
  1413.     If Not myRecordset Is Nothing Then
  1414.         myRecordset.Close
  1415.         Set myRecordset = Nothing
  1416.     End If
  1417.  
  1418. End Sub
  1419.  
  1420. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  1421.  
  1422.     With PropBag
  1423.         .WriteProperty "Enabled", myEnabled, True
  1424.         .WriteProperty "Autosize", myAutosize, False
  1425.         .WriteProperty "DynamicScroll", myDynamicScroll, False
  1426.         .WriteProperty "DisplayName", myDisplayName, ""
  1427.         .WriteProperty "OrderedBy", myOrderedBy, ""
  1428.         .WriteProperty "SortOrder", mySortOrder, Ascending
  1429.         .WriteProperty "Cols", gdBrowse.Cols - 1, 10
  1430.         .WriteProperty "BarBackcolor", gdBrowse.BackColorSel, vbHighlight
  1431.         .WriteProperty "BarForecolor", gdBrowse.ForeColorSel, vbHighlightText
  1432.         .WriteProperty "Backcolor", gdBrowse.Backcolor, vbWindowBackground
  1433.         .WriteProperty "Forecolor", gdBrowse.Forecolor, vbWindowText
  1434.         .WriteProperty "HeadBackcolor", gdBrowse.BackColorFixed, vbButtonFace
  1435.         .WriteProperty "HeadForecolor", gdBrowse.ForeColorFixed, vbButtonText
  1436.     End With 'PROPBAG
  1437.  
  1438. End Sub
  1439.  
  1440. ':) Ulli's VB Code Formatter V2.11.3 (09.04.2002 17:47:50) 54 + 1093 = 1147 Lines
  1441.