うるうカレンダー

<戻る

ここに載せてあるソースコードは、参考のために載せてあります

サンプルコードは、一番下にLZHとしてあります

コメント書いておきながら、修正しないのはナンなので修正しました。(2004/8/3)




Option Explicit

'フォームのロードをします
Private Sub Form_Load()
    Dim j As Integer
    
    'コンボボックス(月)の初期設定です
    With Combo1
        For j = 1 To 12
            .AddItem j
        Next
    End With
    
    '今、現在の日付(年、月)のカレンダーを描画します
    'Combo1.ListIndexでCombo1_Clickにジャンプします
    Text1.Text = Year(Date)
    Combo1.ListIndex = Month(Date) - 1
    
End Sub

'コンボボックスの項目もクリックしました
Private Sub Combo1_Click()
    Dim jy As Integer, jm As Integer
    
    On Error GoTo ErrProcess
    
    '年が数字で入力されているかを調べ、
    '整数に直し変数へ代入します
    jy = CInt(Text1.Text)
    
    'コンボボックスで選択した月を変数に代入します
    jm = Combo1.ListIndex + 1
    
    'ピクチャボックスにカレンダーを描画します
    MyCalendar Picture1, jy, jm
    
    '表示しているカレンダーの西暦と月を表示します
    Label4(0).Caption = "西暦" & jy & "年" & jm & "月"
    Label4(1).Caption = Label4(0).Caption
    
    Exit Sub
    
ErrProcess:
    MsgBox "西暦を正しく入力してください", vbCritical
End Sub

'カレンダーを描画します
Sub MyCalendar(ByRef obj As Object, ByVal nYear As Integer, ByVal nMonth As Integer)
    Dim EndMonth(1 To 12) As Integer
    Dim nBias As Integer, nSum As Integer
    Dim nWeek As Integer, nDay As Integer
    Dim n1 As Integer, n2 As Integer, n3 As Integer
    Dim strDay As String, n As Integer, j As Integer

    '月末日のひにち(その月の日数ともいえる)
    EndMonth(1) = 31
    EndMonth(2) = 28
    EndMonth(3) = 31
    EndMonth(4) = 30
    EndMonth(5) = 31
    EndMonth(6) = 30
    EndMonth(7) = 31
    EndMonth(8) = 31
    EndMonth(9) = 30
    EndMonth(10) = 31
    EndMonth(11) = 30
    EndMonth(12) = 31
    
    With obj
        '描画内容を消去します
        .Cls
        
        '色付きの曜日を描画します(土曜日に改行)
        .ForeColor = vbRed
        obj.Print " 日 ";
        .ForeColor = vbBlack
        obj.Print "月 火 水 木 金";
        .ForeColor = vbBlue
        obj.Print " 土"
        .ForeColor = vbBlack
    End With
    
    'うるう年の条件を満たした場合
    '2月の末日を29に変更します
    n1 = nYear Mod 4
    n2 = nYear Mod 100
    n3 = nYear Mod 400
    If (n1 = 0 And Not (n2 = 0)) Or n3 = 0 Then
        EndMonth(2) = 29
    End If
    
    '月初が何曜日から始まるかを求めます
    For j = 1 To nMonth - 1
        nSum = nSum + EndMonth(j)
    Next
    nWeek = (Fix(nYear + ((nYear - 1) / 4) - ((nYear - 1) / 100) + ((nYear - 1) / 400)) + nSum) Mod 7
    
    '月初の日のために曜日(位置)を進めます(改行なし)
    For j = 0 To nWeek - 1
        obj.Print Space(3);
    Next
    
    '日を描画します
    For nDay = 1 To EndMonth(nMonth)
        
        'nDayからの曜日を代入します
        n = (nWeek + nDay) Mod 7
        
        '日を文字列に直し代入します
        strDay = Trim(Str(nDay))
        
        '曜日別に処理します
        If n = 1 Then
            '日曜日なので赤色で日を描画します
            obj.ForeColor = vbRed
            obj.Print IIf(Len(strDay) = 1, "  ", " ") & strDay;
            obj.ForeColor = vbBlack
        ElseIf n = 0 Then
            '土曜日なので青で日を描画します
            obj.ForeColor = vbBlue
            obj.Print IIf(Len(strDay) = 1, "  ", " ") & strDay;
            obj.ForeColor = vbBlack
        Else
            '平日なので通常描画します
            obj.Print IIf(Len(strDay) = 1, "  ", " ") & strDay;
        End If
        
        '土曜日で改行します
        If n = 0 Then
            obj.Print ""
        End If
    Next
    

End Sub


<戻る

Sample58.lzh


http://www.vector.co.jp/authors/VA015521/