home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / demo / truegrid / apptbook / apptbook.$ / APPTBOOK.FRM < prev    next >
Text File  |  1994-02-08  |  29KB  |  988 lines

  1. VERSION 2.00
  2. Begin Form ApptForm 
  3.    BackColor       =   &H00C0C0C0&
  4.    Caption         =   "Appointments"
  5.    ClientHeight    =   5055
  6.    ClientLeft      =   840
  7.    ClientTop       =   1740
  8.    ClientWidth     =   7320
  9.    Height          =   5745
  10.    Icon            =   APPTBOOK.FRX:0000
  11.    Left            =   780
  12.    LinkTopic       =   "Form1"
  13.    ScaleHeight     =   5055
  14.    ScaleWidth      =   7320
  15.    Top             =   1110
  16.    Width           =   7440
  17.    Begin TrueGrid ApptList 
  18.       AllowArrows     =   -1  'True
  19.       AllowTabs       =   -1  'True
  20.       Editable        =   0   'False
  21.       EditDropDown    =   -1  'True
  22.       ExposeCellMode  =   0  'Expose upon selection
  23.       FetchMode       =   0  'By cell
  24.       HeadingHeight   =   1
  25.       Height          =   2835
  26.       HorzLines       =   1  'Single
  27.       Layout          =   APPTBOOK.FRX:0302
  28.       Left            =   120
  29.       LinesPerRow     =   1
  30.       MarqueeUnique   =   -1  'True
  31.       SplitPropsGlobal=   -1  'True
  32.       SplitTabMode    =   0  'Don't tab across splits
  33.       TabCapture      =   0   'False
  34.       TabIndex        =   16
  35.       Top             =   240
  36.       UseBookmarks    =   -1  'True
  37.       Width           =   4275
  38.       WrapCellPointer =   0   'False
  39.    End
  40.    Begin SSPanel Panel3D2 
  41.       Alignment       =   6  'Center - TOP
  42.       BevelOuter      =   1  'Inset
  43.       BorderWidth     =   2
  44.       Caption         =   "Appointment Types"
  45.       FontBold        =   0   'False
  46.       FontItalic      =   0   'False
  47.       FontName        =   "MS Sans Serif"
  48.       FontSize        =   8.25
  49.       FontStrikethru  =   0   'False
  50.       FontUnderline   =   0   'False
  51.       ForeColor       =   &H00800000&
  52.       Height          =   1755
  53.       Left            =   4500
  54.       TabIndex        =   11
  55.       Top             =   240
  56.       Width           =   1635
  57.       Begin SSPanel KindFrame 
  58.          BevelInner      =   1  'Inset
  59.          BorderWidth     =   2
  60.          ForeColor       =   &H00C0C0C0&
  61.          Height          =   675
  62.          Index           =   0
  63.          Left            =   120
  64.          TabIndex        =   15
  65.          Tag             =   "Phone"
  66.          Top             =   300
  67.          Width           =   675
  68.          Begin Image KindPict 
  69.             Height          =   480
  70.             Index           =   0
  71.             Left            =   90
  72.             Picture         =   APPTBOOK.FRX:0390
  73.             Top             =   90
  74.             Width           =   480
  75.          End
  76.       End
  77.       Begin SSPanel KindFrame 
  78.          BevelInner      =   1  'Inset
  79.          BorderWidth     =   2
  80.          ForeColor       =   &H00C0C0C0&
  81.          Height          =   675
  82.          Index           =   1
  83.          Left            =   120
  84.          TabIndex        =   14
  85.          Tag             =   "Travel"
  86.          Top             =   1020
  87.          Width           =   675
  88.          Begin Image KindPict 
  89.             Height          =   480
  90.             Index           =   1
  91.             Left            =   90
  92.             Picture         =   APPTBOOK.FRX:0692
  93.             Top             =   90
  94.             Width           =   480
  95.          End
  96.       End
  97.       Begin SSPanel KindFrame 
  98.          BevelInner      =   1  'Inset
  99.          BorderWidth     =   2
  100.          ForeColor       =   &H00C0C0C0&
  101.          Height          =   675
  102.          Index           =   2
  103.          Left            =   840
  104.          TabIndex        =   13
  105.          Tag             =   "Meeting"
  106.          Top             =   300
  107.          Width           =   675
  108.          Begin Image KindPict 
  109.             Height          =   480
  110.             Index           =   2
  111.             Left            =   90
  112.             Picture         =   APPTBOOK.FRX:0994
  113.             Top             =   90
  114.             Width           =   480
  115.          End
  116.       End
  117.       Begin SSPanel KindFrame 
  118.          BevelInner      =   1  'Inset
  119.          BorderWidth     =   2
  120.          ForeColor       =   &H00C0C0C0&
  121.          Height          =   675
  122.          Index           =   3
  123.          Left            =   840
  124.          TabIndex        =   12
  125.          Tag             =   "Lunch"
  126.          Top             =   1020
  127.          Width           =   675
  128.          Begin Image KindPict 
  129.             Height          =   480
  130.             Index           =   3
  131.             Left            =   90
  132.             Picture         =   APPTBOOK.FRX:0C96
  133.             Top             =   90
  134.             Width           =   480
  135.          End
  136.       End
  137.    End
  138.    Begin SSPanel Panel3D1 
  139.       BevelInner      =   1  'Inset
  140.       BorderWidth     =   2
  141.       Caption         =   "Panel3D1"
  142.       ForeColor       =   &H00C0C0C0&
  143.       Height          =   2655
  144.       Left            =   4500
  145.       TabIndex        =   2
  146.       Top             =   2280
  147.       Width           =   2775
  148.       Begin CommandButton SaveButton 
  149.          Caption         =   "Save"
  150.          Default         =   -1  'True
  151.          FontBold        =   0   'False
  152.          FontItalic      =   0   'False
  153.          FontName        =   "MS Sans Serif"
  154.          FontSize        =   8.25
  155.          FontStrikethru  =   0   'False
  156.          FontUnderline   =   0   'False
  157.          Height          =   375
  158.          Left            =   120
  159.          TabIndex        =   9
  160.          Top             =   780
  161.          Width           =   735
  162.       End
  163.       Begin TextBox ApptText 
  164.          BackColor       =   &H00FFFFFF&
  165.          ForeColor       =   &H00000000&
  166.          Height          =   1275
  167.          Left            =   120
  168.          MultiLine       =   -1  'True
  169.          TabIndex        =   7
  170.          Top             =   1260
  171.          Width           =   2535
  172.       End
  173.       Begin MaskEdBox ApptTime 
  174.          BackColor       =   &H00C0C0C0&
  175.          FontBold        =   0   'False
  176.          FontItalic      =   0   'False
  177.          FontName        =   "MS Sans Serif"
  178.          FontSize        =   8.25
  179.          FontStrikethru  =   0   'False
  180.          FontUnderline   =   0   'False
  181.          ForeColor       =   &H00800000&
  182.          Format          =   "hh:nn AM/PM"
  183.          Height          =   315
  184.          Left            =   1500
  185.          Mask            =   "##:## ??"
  186.          MaxLength       =   8
  187.          PromptChar      =   "_"
  188.          TabIndex        =   5
  189.          Top             =   840
  190.          Width           =   1155
  191.       End
  192.       Begin TextBox ApptType 
  193.          BackColor       =   &H00C0C0C0&
  194.          FontBold        =   0   'False
  195.          FontItalic      =   0   'False
  196.          FontName        =   "MS Sans Serif"
  197.          FontSize        =   8.25
  198.          FontStrikethru  =   0   'False
  199.          FontUnderline   =   0   'False
  200.          ForeColor       =   &H00800000&
  201.          Height          =   285
  202.          Left            =   1500
  203.          TabIndex        =   4
  204.          Top             =   480
  205.          Width           =   1155
  206.       End
  207.       Begin Image Image1 
  208.          Height          =   480
  209.          Left            =   1140
  210.          Picture         =   APPTBOOK.FRX:0F98
  211.          Top             =   60
  212.          Width           =   480
  213.       End
  214.       Begin Label Label2 
  215.          Alignment       =   1  'Right Justify
  216.          BackColor       =   &H00C0C0C0&
  217.          Caption         =   "When:"
  218.          FontBold        =   0   'False
  219.          FontItalic      =   0   'False
  220.          FontName        =   "MS Sans Serif"
  221.          FontSize        =   8.25
  222.          FontStrikethru  =   0   'False
  223.          FontUnderline   =   0   'False
  224.          Height          =   255
  225.          Left            =   900
  226.          TabIndex        =   6
  227.          Top             =   840
  228.          Width           =   555
  229.       End
  230.       Begin Label Label1 
  231.          Alignment       =   1  'Right Justify
  232.          BackColor       =   &H00C0C0C0&
  233.          Caption         =   "Appointment type:"
  234.          FontBold        =   0   'False
  235.          FontItalic      =   0   'False
  236.          FontName        =   "MS Sans Serif"
  237.          FontSize        =   8.25
  238.          FontStrikethru  =   0   'False
  239.          FontUnderline   =   0   'False
  240.          Height          =   195
  241.          Left            =   120
  242.          TabIndex        =   3
  243.          Top             =   480
  244.          Width           =   1335
  245.       End
  246.    End
  247.    Begin Image TrashCan 
  248.       Height          =   480
  249.       Left            =   6480
  250.       Picture         =   APPTBOOK.FRX:129A
  251.       Top             =   900
  252.       Width           =   480
  253.    End
  254.    Begin Image TrashOpened 
  255.       Height          =   480
  256.       Left            =   1740
  257.       Picture         =   APPTBOOK.FRX:159C
  258.       Top             =   4380
  259.       Visible         =   0   'False
  260.       Width           =   480
  261.    End
  262.    Begin Image TrashClosed 
  263.       Height          =   480
  264.       Left            =   1260
  265.       Picture         =   APPTBOOK.FRX:189E
  266.       Top             =   4380
  267.       Visible         =   0   'False
  268.       Width           =   480
  269.    End
  270.    Begin Label DragArrow 
  271.       Caption         =   "DragArrow"
  272.       DragIcon        =   APPTBOOK.FRX:1BA0
  273.       Height          =   255
  274.       Left            =   180
  275.       TabIndex        =   10
  276.       Top             =   4680
  277.       Visible         =   0   'False
  278.       Width           =   915
  279.    End
  280.    Begin Label MoveIcon 
  281.       Caption         =   "MoveIcon"
  282.       DragIcon        =   APPTBOOK.FRX:1EA2
  283.       Height          =   255
  284.       Left            =   180
  285.       TabIndex        =   8
  286.       Top             =   4380
  287.       Visible         =   0   'False
  288.       Width           =   915
  289.    End
  290.    Begin Label SaveIcon 
  291.       Caption         =   "SaveIcon"
  292.       Height          =   255
  293.       Left            =   180
  294.       TabIndex        =   1
  295.       Top             =   4080
  296.       Visible         =   0   'False
  297.       Width           =   915
  298.    End
  299.    Begin Label NoDrag 
  300.       Caption         =   "NoDrag"
  301.       DragIcon        =   APPTBOOK.FRX:21A4
  302.       Height          =   255
  303.       Left            =   180
  304.       TabIndex        =   0
  305.       Top             =   3780
  306.       Visible         =   0   'False
  307.       Width           =   915
  308.    End
  309.    Begin Menu ExitMenuOption 
  310.       Caption         =   "E&xit!"
  311.    End
  312.    Begin Menu HelpMenu 
  313.       Caption         =   "&Help"
  314.       Begin Menu HelpOption 
  315.          Caption         =   "&Index"
  316.          Index           =   1
  317.       End
  318.       Begin Menu HelpOption 
  319.          Caption         =   "&Using Help"
  320.          Index           =   2
  321.       End
  322.       Begin Menu HelpOption 
  323.          Caption         =   "-"
  324.          Index           =   3
  325.       End
  326.       Begin Menu HelpOption 
  327.          Caption         =   "&About Appointment Book..."
  328.          Index           =   4
  329.       End
  330.    End
  331. End
  332. ' ---------------------------------------------------------
  333. '       Copyright (C) 1993 Apex Software Corporation
  334. '
  335. ' You have a royalty-free right to use, modify, reproduce,
  336. ' and distribute the True Grid sample application files
  337. ' (and/or any modified version) in any way you find useful,
  338. ' provided that you agree that Apex Software Corporation
  339. ' has no warranty, obligations, or liability for any sample
  340. ' application files.
  341. ' ---------------------------------------------------------
  342.  
  343. ' Drag mode constants to keep track of dragging activity.
  344.  
  345. Dim DragType As Integer         ' type of object being dragged
  346. Dim Dragging As Integer         ' TRUE when dragging is in progress
  347. Dim DragIndex As Integer        ' Optional index of dragged obj
  348. Dim DragRow As Integer          ' Optional row being dragged in grid
  349.  
  350. ' Miscellaneous variables
  351.  
  352. Dim valid%                      ' used as return for DragValid
  353.  
  354. ' Bitmasks to describe valid drag objects
  355.  
  356. Const MASK_NEWAPPT = 1      ' a new appointment
  357. Const MASK_OLDAPPT = 2      ' an old appointment
  358. Const MASK_NONE = 0         ' mask used where no drops are allowed
  359.  
  360. Sub ApptEdit ()
  361.     
  362.     ' This subroutine moves the data in the current grid row into
  363.     ' the "post-it" editing area.
  364.  
  365.     Dim aText As String
  366.     Dim colonPos As Integer
  367.  
  368.     ' This routine copies appointment data to the edit window
  369.  
  370.     aText = ApptList.ColumnText(2)
  371.     colonPos = InStr(aText, ":")
  372.  
  373.     ' If no colon, there's no appointment, so clear the post-it
  374.     ' area.  If there is a colon, fill in the information.
  375.  
  376.     If colonPos = 0 Then
  377.     ApptText.Text = ""
  378.     ApptTime.Text = Format$(0, ApptTime.Format)
  379.     ApptType.Text = ""
  380.     Else
  381.     ApptType.Text = Left$(aText, colonPos - 1)
  382.     ApptText.Text = Mid$(aText, colonPos + 2)
  383.     ApptTime.Text = Format$(ApptList.ColumnText(1), ApptTime.Format)
  384.     End If
  385.  
  386. End Sub
  387.  
  388. Sub ApptList_ColumnChange ()
  389.  
  390.     ' This is to prevent the user from selecting the first column
  391.  
  392.     ApptList.ColumnIndex = 2
  393.     
  394. End Sub
  395.  
  396. Sub ApptList_DragCell (Split As Integer, Row As Long, Col As Integer)
  397.  
  398.     ' This event is intitiating when the user drags the mouse with
  399.     ' the right mouse button depressed.  If the user is in column 2
  400.     ' and there is an appointment then initiate dragging
  401.  
  402.     If Col = 2 Then
  403.     ApptList.RowIndex = Row
  404.     If InStr(ApptList.Text, ":") <> 0 Then
  405.         DragRow = ApptList.RowIndex
  406.         ApptList.RefreshRow = 0
  407.         ApptList.DragIcon = MoveIcon.DragIcon
  408.         BeginDragMode ApptList, MASK_OLDAPPT
  409.     End If
  410.     End If
  411.  
  412. End Sub
  413.  
  414. Sub ApptList_DragDrop (Source As Control, X As Single, Y As Single)
  415.     
  416.     ' Drop a new appointment or existing appointment at a new
  417.     ' row position.
  418.  
  419.     Dim aText As String
  420.     Dim i%
  421.  
  422.     If Not EndDragMode(MASK_NEWAPPT Or MASK_OLDAPPT) Then Exit Sub
  423.  
  424.     ' Check the location of the drag and drop
  425.  
  426.     ApptList.PointX = X
  427.     ApptList.PointY = Y
  428.     GridDropRow = ApptList.RowAtPoint
  429.  
  430.     ' If new appointment add to grid otherwise change appt time
  431.     If DragType = MASK_NEWAPPT Then
  432.     ApptList.RowIndex = GridDropRow
  433.     ApptInfo(GridDropRow) = Source.Tag & ": "
  434.     ApptList.RefreshRow = 0
  435.     ApptEdit
  436.     Else
  437.     aText = ApptList.ColumnText(1)
  438.     ApptList.RowIndex = DragRow
  439.     i% = ChangeApptTime(TimeValue(aText))
  440.     End If
  441.     
  442.     ' Clear drag row
  443.  
  444.     DragRow = 0
  445.     ApptText.SetFocus
  446.     
  447. End Sub
  448.  
  449. Sub ApptList_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  450.     
  451.     ' When dragging over the grid, both new and old appointments
  452.     ' are considered.
  453.  
  454.     If Not DragValid(Source, MASK_NEWAPPT Or MASK_OLDAPPT, State) Then
  455.     Exit Sub
  456.     End If
  457.  
  458.     ' Find location in the grid
  459.  
  460.     ApptList.PointX = X
  461.     ApptList.PointY = Y
  462.  
  463.     ' If leaving the grid set the rowindex back to the where dragging
  464.     ' started, else move the RowIndex with the drag icon.
  465.  
  466.     Select Case State
  467.     Case LEAVE
  468.         ApptList.RowIndex = DragRow
  469.     Case Else
  470.         GridDropRow = ApptList.RowAtPoint
  471.         
  472.         ' If RowAtPoint is valid then move the RowIndex
  473.  
  474.         If ApptList.RowAtPoint <> -1 Then
  475.         ApptList.RowIndex = ApptList.RowAtPoint
  476.         End If
  477.     End Select
  478.  
  479. End Sub
  480.  
  481. Sub ApptList_Fetch (Row As Long, Col As Integer, Value As String)
  482.  
  483.     ' This event is the main display mechanism in callback mode
  484.     ' If in column 1 display the times.  If in column 2 query the
  485.     ' ApptInfo array and display all appointments
  486.  
  487.     If Col = 1 Then
  488.     Value = ApptTimes(Row)
  489.     ElseIf Col = 2 Then
  490.     Value = ApptInfo(Row)
  491.     End If
  492.         
  493. End Sub
  494.  
  495. Sub ApptList_FetchAttributes (Status As Integer, Split As Integer, Row As Long, Col As Integer, FgColor As Long, BgColor As Long, FontStyle As Integer)
  496.  
  497.     ' This event lets us set attributes for given cells.  In this case
  498.     ' if the current cell has an appointment then highlight it in
  499.     ' green and white.
  500.  
  501.     If InStr(ApptList.Text, ":") Then
  502.     If Status = GFS_CURCELL Then
  503.        BgColor = LTGREEN
  504.        FgColor = WHITE
  505.     End If
  506.     End If
  507.     
  508.     ' If dragging is occuring then highlight the cell being
  509.     ' dragged from in blue and white.
  510.  
  511.     If DragRow = Row Then
  512.     BgColor = BLUE
  513.     FgColor = WHITE
  514.     End If
  515.  
  516. End Sub
  517.  
  518. Sub ApptList_MarkChange (Row As Long, IsMarked As Integer)
  519.  
  520.     ' In TrueGrid Pro you can now use multiple selection
  521.     ' callback mode.  The code in the MarkChange event
  522.     ' causes a select array to be updated
  523.     
  524.     ApptSelect(Row) = ApptSelect(Row) Xor True
  525.     ApptList.RefreshRow = Row
  526.     
  527. End Sub
  528.  
  529. Sub ApptList_QueryMark (Row As Long, IsMarked As Integer)
  530.  
  531.     ' Here the grid checks to see if it should highlight a
  532.     ' given row.  We provide it our array that we maintain
  533.     ' in MarkChange.
  534.  
  535.     IsMarked = ApptSelect(Row)
  536.  
  537.  
  538. End Sub
  539.  
  540. Sub ApptList_RowChange ()
  541.     
  542.     ' If a RowChange occurs call ApptEdit to update Post-it area
  543.  
  544.     ApptEdit
  545.  
  546. End Sub
  547.  
  548. Sub ApptText_DragDrop (Source As Control, X As Single, Y As Single)
  549.     valid% = EndDragMode(MASK_NONE)
  550. End Sub
  551.  
  552. Sub ApptText_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  553.     valid% = DragValid(Source, MASK_NONE, State)
  554. End Sub
  555.  
  556. Sub ApptTime_DragDrop (Source As Control, X As Single, Y As Single)
  557.     valid% = EndDragMode(MASK_NONE)
  558. End Sub
  559.  
  560. Sub ApptTime_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  561.     valid% = DragValid(Source, MASK_NONE, State)
  562. End Sub
  563.  
  564. Sub ApptTime_ValidationError (InvalidText As String, StartPosition As Integer)
  565.  
  566.     ' Check for valid time if user manually changes time
  567.     
  568.     MsgBox "Invalid time"
  569.     ApptTime.SetFocus
  570.  
  571. End Sub
  572.  
  573. Sub ApptType_DragDrop (Source As Control, X As Single, Y As Single)
  574.     
  575.     ' Accept a drop only for a NEWAPPT icon, otherwise the
  576.     ' operation will be cancelled.
  577.  
  578.     If EndDragMode(MASK_NEWAPPT) Then
  579.     ApptType.Text = Source.Tag
  580.     End If
  581.  
  582. End Sub
  583.  
  584. Sub ApptType_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  585.     valid% = DragValid(Source, MASK_NEWAPPT, State)
  586. End Sub
  587.  
  588. Sub ApptType_KeyPress (KeyAscii As Integer)
  589.     
  590.     ' Don't allow a colon to be entered, since we use a colon to
  591.     ' separate the appointment "kind" from the text.
  592.  
  593.     If KeyAscii = Asc(":") Then
  594.     Beep
  595.     KeyAscii = 0
  596.     End If
  597.  
  598. End Sub
  599.  
  600. Sub BeginDragMode (ctl As Control, objType As Integer)
  601.     
  602.     ' Whenever a drag is about to start, this routine is called.
  603.     ' The type mask of the drag is flagged, and we remember that
  604.     ' dragging is in progress.   This routine MUST be matched
  605.     ' by an EndDragMode function call.
  606.  
  607.     DragType = objType
  608.     Dragging = True
  609.  
  610.     ' Change the highlight color for the current cell to blue and white
  611.     ' while dragging is occuring
  612.  
  613.     ApptList.ParamBackColor = BLUE
  614.     ApptList.ParamForeColor = WHITE
  615.     ApptList.ColumnSetStatusAttr(2) = GFS_CURCELL
  616.  
  617.     ' Start the drag process
  618.  
  619.     ctl.Drag BEGIN_DRAG
  620.  
  621. End Sub
  622.  
  623. Function ChangeApptTime (newtime As Variant) As Integer
  624.     
  625.     ' Given a new time for an appointment at the current row, this
  626.     ' routine moves the appointment to the new location in the
  627.     ' grid.
  628.  
  629.     Dim trow As Integer
  630.     Dim oldAppt As String
  631.  
  632.     trow = TimeRow(newtime)
  633.  
  634.     ' If we're already there, then do nothing and return False,
  635.     ' indicating no row change occurred.
  636.  
  637.     If trow = ApptList.RowIndex Then
  638.     ChangeApptTime = False
  639.     Exit Function
  640.     End If
  641.  
  642.     ' If the user entered in invalid time print an error
  643.  
  644.     If trow > ApptList.Rows Or trow < 0 Then
  645.     ChangeApptTime = False
  646.     MsgBox "Invalid time"
  647.     Exit Function
  648.     End If
  649.     
  650.     ChangeApptTime = True
  651.     
  652.     ' Actually move the row.
  653.  
  654.     oldAppt = ApptList.Text
  655.     ApptInfo(ApptList.RowIndex) = ""
  656.     ApptList.RefreshRow = 0
  657.     
  658.     ApptList.RowIndex = trow
  659.     ApptInfo(ApptList.RowIndex) = oldAppt
  660.     ApptList.RefreshRow = 0
  661.  
  662.     ApptEdit            ' move the data to the post-it area
  663.  
  664. End Function
  665.  
  666. Function DragValid (src As Control, mask As Integer, State As Integer) As Integer
  667.     
  668.     ' This function is called by an object's DragOver event to
  669.     ' automatically change the drag cursor to the "no drop"
  670.     ' cursor if necessary.  It also returns True if the object
  671.     ' can legally be dropped according to the input mask.
  672.  
  673.     If (mask And DragType) Then
  674.     DragValid = True
  675.     Exit Function
  676.     End If
  677.  
  678.     ' This is not a valid drag.  Return False, but also change the
  679.     ' object's drag icon to the NoDrag icon (remembering the old
  680.     ' value for later restore when we exit this object).
  681.  
  682.     DragValid = False
  683.  
  684.     Select Case State
  685.     
  686.     Case ENTER
  687.  
  688.         ' Entering, remember old icon
  689.  
  690.         SaveIcon.DragIcon = src.DragIcon
  691.         src.DragIcon = NoDrag.DragIcon
  692.  
  693.     Case LEAVE
  694.         
  695.         ' Exiting, restore old icon
  696.  
  697.         src.DragIcon = SaveIcon.DragIcon
  698.  
  699.     End Select
  700.         
  701. End Function
  702.  
  703. Function EndDragMode (mask As Integer) As Integer
  704.     
  705.     ' This function is called when a drag has ended, either
  706.     ' successfully or unsuccessfully.  This routine removes any
  707.     ' user feedback related to the drag operation and returns
  708.     ' TRUE if the passed mask matches the dragged object.
  709.  
  710.     ' Set Current cell colors back to previous settings
  711.  
  712.     ApptList.ParamBackColor = INHERIT_COLOR
  713.     ApptList.ParamForeColor = INHERIT_COLOR
  714.     ApptList.ColumnSetStatusAttr(2) = GFS_CURCELL
  715.     
  716.     Select Case DragType
  717.  
  718.     Case MASK_NEWAPPT
  719.  
  720.         ' If a "new appointment" icon was dragged, change the
  721.         ' frame background to LTGREY again so that the drag
  722.         ' is officially over.
  723.  
  724.         KindFrame(DragIndex).BackColor = LTGREY
  725.  
  726.     Case MASK_OLDAPPT
  727.  
  728.         ' If this is an item dragged from the grid, refresh
  729.         ' the grid in case the drag ended outside the grid
  730.         ' frame (and the inverted row remains).
  731.     
  732.     End Select
  733.  
  734.     Dragging = False
  735.     EndDragMode = (mask And DragType) <> 0
  736.     
  737. End Function
  738.  
  739. Sub ExitMenuOption_Click ()
  740.  
  741.     'Unload forms and exit
  742.  
  743.     Unload About
  744.     Unload ApptForm
  745.     End
  746.  
  747. End Sub
  748.  
  749. Sub Form_DragDrop (Source As Control, X As Single, Y As Single)
  750.     
  751.     ' Ignore drops which occur on the form
  752.  
  753.     valid% = EndDragMode(MASK_NONE)
  754.  
  755. End Sub
  756.  
  757. Sub Form_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  758.     
  759.     ' Assure that the "no drop" icon is displayed when passing
  760.     ' over the form.
  761.  
  762.     valid% = DragValid(Source, MASK_NONE, State)
  763.  
  764. End Sub
  765.  
  766. Sub Form_Load ()
  767.  
  768.     Dim curTime As Variant
  769.     Dim curRow As Integer
  770.     Dim rowMax As Integer
  771.     
  772.     ' Fill the leftmost column with appointment times.
  773.     curRow = 1
  774.     For curTime = Prefs.timeStart To Prefs.timeEnd Step Prefs.timeIncrement
  775.     ApptTimes(curRow) = Format$(curTime, "hh:mm am/pm")
  776.     curRow = curRow + 1
  777.     Next curTime
  778.  
  779.     ' Set up ApptList
  780.     
  781.     ApptList.SelectMode = 1  ' Enable multiple selection
  782.     rowMax = (Prefs.timeEnd - Prefs.timeStart) / Prefs.timeIncrement
  783.     ApptList.Rows = rowMax
  784.     ApptList.RowIndex = 1
  785.     ApptList.Height = (ApptList.CellRectHeight + (Screen.TwipsPerPixelY + 1)) * rowMax
  786.  
  787.     ' ApptList column colors
  788.  
  789.     ApptList.ColumnBackColor(1) = LTGREY     'Grey background
  790.     ApptList.ColumnBackColor(2) = OFF_YELLOW     'Yellow background
  791.     
  792.     ' Forces the FetchAttributes to be called for column 2
  793.  
  794.     ApptList.ColumnCellAttrs(2) = True
  795.  
  796. End Sub
  797.  
  798. Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
  799.     
  800.     ' Since we can't trap a "drop" which occurs outside of our
  801.     ' application, this is a pretty good solution.  Whenever the
  802.     ' cursor passes over the form, if we're still dragging check
  803.     ' to see if the button is now up.  If so, just cancel the
  804.     ' operation
  805.  
  806.     If Dragging Then
  807.     If (Button And LEFT_BUTTON) = 0 Then
  808.         valid% = EndDragMode(MASK_NONE)
  809.     End If
  810.     End If
  811.  
  812. End Sub
  813.  
  814. Sub HelpOption_Click (index As Integer)
  815.     
  816.     'This event calls the WinHelp EXE and a location to goto based on which selection the user has chosen
  817.     'Case 4 shows the about box for True Browser
  818.     Select Case index
  819.     Case 1
  820.         HelpContext ApptForm, HELP_APPTBOOK
  821.     Case 2
  822.         HelpOnHelp ApptForm
  823.     Case 4
  824.         About.Show 1
  825.     End Select
  826.  
  827.  
  828. End Sub
  829.  
  830. Sub Image1_DragDrop (Source As Control, X As Single, Y As Single)
  831.     valid% = EndDragMode(MASK_NONE)
  832. End Sub
  833.  
  834. Sub Image1_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  835.     valid% = DragValid(Source, MASK_NONE, State)
  836. End Sub
  837.  
  838. Sub KindFrame_DragDrop (index As Integer, Source As Control, X As Single, Y As Single)
  839.     valid% = EndDragMode(MASK_NONE)
  840. End Sub
  841.  
  842. Sub KindFrame_DragOver (index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
  843.     valid% = DragValid(Source, MASK_NEWAPPT, State)
  844. End Sub
  845.  
  846. Sub KindPict_DragDrop (index As Integer, Source As Control, X As Single, Y As Single)
  847.     valid% = EndDragMode(MASK_NONE)
  848. End Sub
  849.  
  850. Sub KindPict_DragOver (index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
  851.     valid% = DragValid(Source, MASK_NEWAPPT, State)
  852. End Sub
  853.  
  854. Sub KindPict_MouseDown (index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
  855.     
  856.     ' When the left button goes down over an "appointment type"
  857.     ' icon, drag its image in NEWAPPT mode.  Copy the DragIcon
  858.     ' each time, since it may still be set to the "no drop" icon
  859.     ' from a previous cancellation.
  860.  
  861.     If Button And LEFT_BUTTON Then
  862.  
  863.     KindFrame(index).DragIcon = DragArrow.DragIcon
  864.     BeginDragMode KindFrame(index), MASK_NEWAPPT
  865.     KindFrame(index).BackColor = CYAN
  866.     
  867.     ' Save the index, we'll need it in EndDragMode
  868.  
  869.     DragIndex = index
  870.     ApptList.RowIndex = 0
  871.  
  872.     End If
  873.  
  874. End Sub
  875.  
  876. Sub Label1_DragDrop (Source As Control, X As Single, Y As Single)
  877.     valid% = EndDragMode(MASK_NONE)
  878. End Sub
  879.  
  880. Sub Label1_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  881.     valid% = DragValid(Source, MASK_NONE, State)
  882. End Sub
  883.  
  884. Sub Label2_DragDrop (Source As Control, X As Single, Y As Single)
  885.     valid% = EndDragMode(MASK_NONE)
  886. End Sub
  887.  
  888. Sub Label2_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  889.     valid% = DragValid(Source, MASK_NONE, State)
  890. End Sub
  891.  
  892. Sub Panel3D1_DragDrop (Source As Control, X As Single, Y As Single)
  893.     valid% = EndDragMode(MASK_NONE)
  894. End Sub
  895.  
  896. Sub Panel3D1_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  897.     valid% = DragValid(Source, MASK_NONE, State)
  898. End Sub
  899.  
  900. Sub Panel3D2_DragDrop (Source As Control, X As Single, Y As Single)
  901.     valid% = EndDragMode(MASK_NONE)
  902. End Sub
  903.  
  904. Sub Panel3D2_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  905.     valid% = DragValid(Source, MASK_NONE, State)
  906.  
  907. End Sub
  908.  
  909. Sub SaveButton_Click ()
  910.     
  911.     ' Save all data in the post-it area to the grid.
  912.  
  913.     Dim i%
  914.     
  915.     ' We can only save if there's an appointment on the current
  916.     ' grid row already (at least a blank one).
  917.  
  918.     If InStr(ApptList.ColumnText(2), ":") = 0 Then
  919.     MsgBox "No appointment at current row"
  920.     Exit Sub
  921.     End If
  922.     
  923.     ApptInfo(ApptList.RowIndex) = ApptType.Text & ": " & ApptText.Text
  924.     ApptList.RefreshRow = 0
  925.     ApptList.RowIndex = ApptList.RowIndex
  926.     IgnoreRowChange = False
  927.     
  928.     ' If the time was changed manually, then move the row to the new
  929.     ' location.
  930.  
  931.     i% = ChangeApptTime(TimeValue(ApptTime.Text))
  932.  
  933. End Sub
  934.  
  935. Sub SaveButton_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  936.     valid% = DragValid(Source, MASK_NONE, State)
  937. End Sub
  938.  
  939. Function TimeRow (thetime As Variant) As Integer
  940.     
  941.     ' Given a time value, return the row number within the grid
  942.     ' where the specified time slot is located.
  943.  
  944.     TimeRow = (thetime - TimeValue("08:00am")) / TimeValue("00:30") + 1
  945.  
  946. End Function
  947.  
  948. Sub TrashCan_DragDrop (Source As Control, X As Single, Y As Single)
  949.     
  950.     ' The trash can only accepts drops for "old appointments" from
  951.     ' the grid.
  952.  
  953.     If EndDragMode(MASK_OLDAPPT) Then
  954.  
  955.     ' Get rid of feedback
  956.  
  957.     TrashCan.Picture = TrashClosed.Picture
  958.  
  959.     ' Clear the grid row and update the post-it area
  960.     
  961.     ApptInfo(ApptList.RowIndex) = ""
  962.     ApptList.RefreshRow = 0
  963.     DragRow = 0
  964.     ApptEdit
  965.     ApptList.SetFocus
  966.     
  967.     End If
  968.  
  969. End Sub
  970.  
  971. Sub TrashCan_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  972.     
  973.     ' Provide feedback by "opening the trashcan" whenever an
  974.     ' old appointment is dragged over the trash.
  975.  
  976.     If DragValid(Source, MASK_OLDAPPT, State) Then
  977.     Select Case State
  978.         Case ENTER
  979.         ' Open when entering
  980.         TrashCan.Picture = TrashOpened.Picture
  981.         Case LEAVE
  982.         ' Close when leaving
  983.         TrashCan.Picture = TrashClosed.Picture
  984.     End Select
  985.     End If
  986. End Sub
  987.  
  988.