CALENDAR.frm
上传用户:djzm888
上传日期:2013-02-15
资源大小:867k
文件大小:10k
源码类别:

其他数据库

开发平台:

Visual Basic

  1. VERSION 5.00
  2. Begin VB.Form frmCalendar 
  3.    BorderStyle     =   3  'Fixed Dialog
  4.    Caption         =   "日历"
  5.    ClientHeight    =   2475
  6.    ClientLeft      =   3285
  7.    ClientTop       =   3945
  8.    ClientWidth     =   3150
  9.    Icon            =   "CALENDAR.frx":0000
  10.    KeyPreview      =   -1  'True
  11.    LinkTopic       =   "Form3"
  12.    MaxButton       =   0   'False
  13.    MinButton       =   0   'False
  14.    PaletteMode     =   1  'UseZOrder
  15.    ScaleHeight     =   2475
  16.    ScaleWidth      =   3150
  17.    Begin VB.PictureBox picMonth 
  18.       BackColor       =   &H00C0C0C0&
  19.       BorderStyle     =   0  'None
  20.       ClipControls    =   0   'False
  21.       ForeColor       =   &H00C00000&
  22.       Height          =   1590
  23.       Left            =   60
  24.       ScaleHeight     =   1590
  25.       ScaleWidth      =   3060
  26.       TabIndex        =   0
  27.       Top             =   765
  28.       Width           =   3060
  29.    End
  30.    Begin VB.Line Line1 
  31.       BorderColor     =   &H00C00000&
  32.       X1              =   45
  33.       X2              =   3105
  34.       Y1              =   720
  35.       Y2              =   720
  36.    End
  37.    Begin VB.Label Label1 
  38.       AutoSize        =   -1  'True
  39.       BackColor       =   &H00C0C0C0&
  40.       Caption         =   "日   一   二   三   四   五   六"
  41.       ForeColor       =   &H00C00000&
  42.       Height          =   180
  43.       Left            =   135
  44.       TabIndex        =   4
  45.       Top             =   540
  46.       Width           =   2880
  47.    End
  48.    Begin VB.Label lblMonth 
  49.       Alignment       =   2  'Center
  50.       AutoSize        =   -1  'True
  51.       BeginProperty Font 
  52.          Name            =   "宋体"
  53.          Size            =   10.5
  54.          Charset         =   134
  55.          Weight          =   700
  56.          Underline       =   0   'False
  57.          Italic          =   0   'False
  58.          Strikethrough   =   0   'False
  59.       EndProperty
  60.       ForeColor       =   &H00C000C0&
  61.       Height          =   210
  62.       Left            =   1290
  63.       TabIndex        =   1
  64.       Top             =   135
  65.       Width           =   165
  66.    End
  67.    Begin VB.Label lblNext 
  68.       Alignment       =   2  'Center
  69.       BackColor       =   &H00C0C0C0&
  70.       Caption         =   ">>"
  71.       BeginProperty Font 
  72.          Name            =   "MS Sans Serif"
  73.          Size            =   8.25
  74.          Charset         =   0
  75.          Weight          =   700
  76.          Underline       =   0   'False
  77.          Italic          =   0   'False
  78.          Strikethrough   =   0   'False
  79.       EndProperty
  80.       ForeColor       =   &H00FF00FF&
  81.       Height          =   255
  82.       Left            =   2835
  83.       TabIndex        =   3
  84.       Top             =   120
  85.       Width           =   375
  86.    End
  87.    Begin VB.Label lblPrev 
  88.       Alignment       =   2  'Center
  89.       Caption         =   "<<"
  90.       BeginProperty Font 
  91.          Name            =   "MS Sans Serif"
  92.          Size            =   8.25
  93.          Charset         =   0
  94.          Weight          =   700
  95.          Underline       =   0   'False
  96.          Italic          =   0   'False
  97.          Strikethrough   =   0   'False
  98.       EndProperty
  99.       ForeColor       =   &H00FF00FF&
  100.       Height          =   255
  101.       Left            =   0
  102.       TabIndex        =   2
  103.       Top             =   120
  104.       Width           =   375
  105.    End
  106. End
  107. Attribute VB_Name = "frmCalendar"
  108. Attribute VB_GlobalNameSpace = False
  109. Attribute VB_Creatable = False
  110. Attribute VB_PredeclaredId = True
  111. Attribute VB_Exposed = False
  112. Option Explicit
  113. 'Grid dimensions for days
  114. Private Const GRID_ROWS = 6
  115. Private Const GRID_COLS = 7
  116. 'Private variables
  117. Private m_CurrDate As Date, m_bAcceptChange As Boolean
  118. Private m_nGridWidth As Integer, m_nGridHeight As Integer
  119. Const mYEAR = "年"
  120. Const mMONTH = "月"
  121. 'Public function: If user selects date, sets UserDate to selected
  122. 'date and returns True. Otherwise, returns False.
  123. Public Function GetDate(UserDate As Date, Optional Title) As Boolean
  124.     'Store user-specified date
  125.     m_CurrDate = UserDate
  126.     
  127.     'Use caller-specified caption if any
  128.     If Not IsMissing(Title) Then
  129.         Caption = Title
  130.     End If
  131.     'Display this form
  132.     Me.Show vbModal
  133.     'Return selected date
  134.     If m_bAcceptChange Then
  135.         UserDate = m_CurrDate
  136.     End If
  137.     'Return value indicates if date was selected
  138.     GetDate = m_bAcceptChange
  139. End Function
  140. 'Form initialization
  141. Private Sub Form_Load()
  142.     'Center form on screen
  143.     'Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
  144.     
  145.     'Calculate calendar grid measurements
  146.     m_nGridWidth = ((picMonth.ScaleWidth - Screen.TwipsPerPixelX)  GRID_COLS)
  147.     m_nGridHeight = ((picMonth.ScaleHeight - Screen.TwipsPerPixelY)  GRID_ROWS)
  148.     
  149.     m_bAcceptChange = False
  150. End Sub
  151. 'Process user keystrokes
  152. Private Sub picMonth_KeyDown(KeyCode As Integer, Shift As Integer)
  153.     Dim NewDate As Date
  154.     
  155.     Select Case KeyCode
  156.         Case vbKeyRight
  157.             NewDate = DateAdd("d", 1, m_CurrDate)
  158.         Case vbKeyLeft
  159.             NewDate = DateAdd("d", -1, m_CurrDate)
  160.         Case vbKeyDown
  161.             NewDate = DateAdd("ww", 1, m_CurrDate)
  162.         Case vbKeyUp
  163.             NewDate = DateAdd("ww", -1, m_CurrDate)
  164.         Case vbKeyPageDown
  165.             NewDate = DateAdd("m", 1, m_CurrDate)
  166.         Case vbKeyPageUp
  167.             NewDate = DateAdd("m", -1, m_CurrDate)
  168.         Case vbKeyReturn
  169.             m_bAcceptChange = True
  170.             Unload Me
  171.             Exit Sub
  172.         Case vbKeyEscape
  173.             Unload Me
  174.             Exit Sub
  175.         Case Else
  176.             Exit Sub
  177.     End Select
  178.     SetNewDate NewDate
  179.     KeyCode = 0
  180. End Sub
  181. 'Double-click accepts current date
  182. Private Sub picMonth_DblClick()
  183.     m_bAcceptChange = True
  184.     Unload Me
  185. End Sub
  186. ' Select the date by mouse
  187. Private Sub picMonth_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  188.     Dim i As Integer, MaxDay As Integer
  189.     'Determine which date is being clicked
  190.     i = WeekDay(DateSerial(Year(m_CurrDate), Month(m_CurrDate), 1)) - 1
  191.     i = (((X  m_nGridWidth) + 1) + ((Y  m_nGridHeight) * GRID_COLS)) - i
  192.     
  193.     'Get last day of current month
  194.     MaxDay = Day(DateAdd("d", -1, DateSerial(Year(m_CurrDate), Month(m_CurrDate) + 1, 1)))
  195.     
  196.     If i >= 1 And i <= MaxDay Then
  197.         SetNewDate DateSerial(Year(m_CurrDate), Month(m_CurrDate), i)
  198.     End If
  199. End Sub
  200. 'Click on ">>" goes to next month
  201. Private Sub lblNext_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  202.     If Button And vbLeftButton Then
  203.         SetNewDate DateAdd("m", 1, m_CurrDate)
  204.     End If
  205. End Sub
  206. 'Double-click has same effect
  207. Private Sub lblNext_DblClick()
  208.     SetNewDate DateAdd("m", 1, m_CurrDate)
  209. End Sub
  210. 'Click on "<<" goes to previous month
  211. Private Sub lblPrev_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  212.     If Button And vbLeftButton Then
  213.         SetNewDate DateAdd("m", -1, m_CurrDate)
  214.     End If
  215. End Sub
  216. 'Double-click has same effect
  217. Private Sub lblPrev_DblClick()
  218.     SetNewDate DateAdd("m", -1, m_CurrDate)
  219. End Sub
  220. 'Changes the selected date
  221. Private Sub SetNewDate(NewDate As Date)
  222.     If Month(m_CurrDate) = Month(NewDate) And Year(m_CurrDate) = Year(NewDate) Then
  223.         DrawSelectionBox False
  224.         m_CurrDate = NewDate
  225.         DrawSelectionBox True
  226.     Else
  227.         m_CurrDate = NewDate
  228.         picMonth_Paint
  229.     End If
  230. End Sub
  231. 'Here's the calendar paint handler; displayes the calendar days
  232. Private Sub picMonth_Paint()
  233.     Dim i As Integer, j As Integer, X As Integer, Y As Integer
  234.     Dim NumDays As Integer, CurrPos As Integer, bCurrMonth As Boolean
  235.     Dim MonthStart As Date, buffer As String
  236.     
  237.     'Determine if this month is today's month
  238.     If Month(m_CurrDate) = Month(Date) And Year(m_CurrDate) = Year(Date) Then
  239.         bCurrMonth = True
  240.     End If
  241.     'Get first date in the month
  242.     MonthStart = DateSerial(Year(m_CurrDate), Month(m_CurrDate), 1)
  243.     
  244.     'Number of days in the month
  245.     NumDays = DateDiff("d", MonthStart, DateAdd("m", 1, MonthStart))
  246.     'Get first weekday in the month (0 - based)
  247.     j = WeekDay(MonthStart) - 1
  248.     
  249.     'Tweak for 1-based For/Next index
  250.     j = j - 1
  251.     'Show current month/year
  252.     'lblMonth = Format$(m_CurrDate, "mmmm yyyy")
  253.     lblMonth = Format(m_CurrDate, "yyyy") & mYEAR _
  254.         & Format(Month(m_CurrDate), "00") & mMONTH
  255.     
  256.     'Clear existing data
  257.     picMonth.Cls
  258.     'Display dates for current month
  259.     For i = 1 To NumDays
  260.         CurrPos = i + j
  261.         X = (CurrPos Mod GRID_COLS) * m_nGridWidth
  262.         Y = (CurrPos  GRID_COLS) * m_nGridHeight
  263.         'Show date as bold if today's date
  264.         If bCurrMonth And i = Day(Date) Then
  265.             picMonth.Font.Bold = True
  266.         Else
  267.             picMonth.Font.Bold = False
  268.         End If
  269.         'Center date within "date cell"
  270.         buffer = CStr(i)
  271.         picMonth.CurrentX = X + ((m_nGridWidth - picMonth.TextWidth(buffer)) / 2)
  272.         picMonth.CurrentY = Y + ((m_nGridHeight - picMonth.TextHeight(buffer)) / 2)
  273.         'Print date
  274.         picMonth.Print buffer;
  275.     Next i
  276.     'Indicate selected date
  277.     DrawSelectionBox True
  278. End Sub
  279. 'Draw or clears the selection box around the current date
  280. Private Sub DrawSelectionBox(bSelected As Boolean)
  281.     Dim clrTopLeft As Long, clrBottomRight As Long
  282.     Dim i As Integer, X As Integer, Y As Integer
  283.     'Set highlight and shadow colors
  284.     If bSelected Then
  285.         clrTopLeft = vbButtonShadow
  286.         clrBottomRight = vb3DHighlight
  287.     Else
  288.         clrTopLeft = vbButtonFace
  289.         clrBottomRight = vbButtonFace
  290.     End If
  291.     
  292.     'Compute location for current date
  293.     i = WeekDay(DateSerial(Year(m_CurrDate), Month(m_CurrDate), 1)) - 1
  294.     i = i + (Day(m_CurrDate) - 1)
  295.     X = (i Mod GRID_COLS) * m_nGridWidth
  296.     Y = (i  GRID_COLS) * m_nGridHeight
  297.     'Draw box around date
  298.     picMonth.Line (X, Y + m_nGridHeight)-Step(0, -m_nGridHeight), clrTopLeft
  299.     picMonth.Line -Step(m_nGridWidth, 0), clrTopLeft
  300.     picMonth.Line -Step(0, m_nGridHeight), clrBottomRight
  301.     picMonth.Line -Step(-m_nGridWidth, 0), clrBottomRight
  302. End Sub