⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.frm

📁 很棒 考虑很周全 适合大家学习 页面很漂亮 可以作为良师益友 谢谢大家支持
💻 FRM
📖 第 1 页 / 共 4 页
字号:

    On Error Resume Next

    antisi = KeyCode

    Label26.Left = Label24.Left

    If Label1.Caption <> Label2.Caption Then '输入字符错误,但是可能按键对,只是大小字符不同
        If KeyCode <> 16 Then sndPlaySound Label6.Caption, SND_ASYNC Or SND_NODEFAULT     '打错的声音
        Picture5.Cls
        Picture5.PaintPicture Picture2.Picture, A(Jiantisi).Left, A(Jiantisi).Top, A(Jiantisi).Width, A(Jiantisi).Height, _
                              A(Jiantisi).Left, A(Jiantisi).Top, A(Jiantisi).Width, A(Jiantisi).Height, vbSrcCopy '恢复原来提示,因为打错了。

        If Jiantisi <> antisi Then '输入字符错误,而且按键也不对。
            '以下是打错了字符,也按错了键的红色提示。
            Picture5.PaintPicture Picture6.Picture, A(antisi).Left, A(antisi).Top, A(antisi).Width, A(antisi).Height, _
                                  A(antisi).Left, A(antisi).Top, A(antisi).Width, A(antisi).Height, vbSrcCopy

        End If

        Label26.Caption = Label1.Caption '打错了,出现红色提示

        If Label26.Visible = False Then

            Label26.Visible = True
            Label36.Caption = Trim(Val(Label36.Caption) + 1) '打错字符数加1
            Label34.Caption = Trim(Val(Label34.Caption) + 1) '已经练习的字符数也要加1
        End If
        If KeyCode = 8 Then Label26.Visible = False

        Label38.Caption = Trim(Int(100 * (Val(Label34.Caption) - Val(Label36.Caption)) / Val(Label34.Caption))) + " %" '计算正确率
        '  Label39.Caption = Trim(Int(100 * (Val(Label34.Caption) / Val(Label32.Caption)))) + " %" '计算进度
        If Label41.Caption <> "0" Then Label45.Caption = Trim(Int(60 * Val(Label34.Caption) / Val(Label41.Caption))) + " WPM" '计算速度

        Exit Sub

    End If

    sndPlaySound Label5.Caption, SND_ASYNC Or SND_NODEFAULT  '打对的声音

    Label13.Caption = Label13.Caption + 1 '应该打下一个字了,因为打对了呀
    STRtisi = Mid(Label3.Caption, Label13.Caption, 1)  '提示那个字符STRtisi
    Label2.Caption = STRtisi

    Dim i As Byte

    Label24.Left = Label24.Left + 285

    If Label26.Visible = False Then Label34.Caption = Trim(Val(Label34.Caption) + 1) '打对字符数,也就是已经练习的字符数加1--这句一定要在前一句的前面,否则计数出错

    Label26.Visible = False '这句一定要在前一句的后面,否则计数出错.

    Label25.Caption = Left(Label3.Caption, Label13.Caption - 1) '自己打字记录行

    Label38.Caption = Trim(Int(100 * (Val(Label34.Caption) - Val(Label36.Caption)) / Val(Label34.Caption))) + " %" '计算正确率
    ' Label39.Caption = Trim(Int(100 * (Val(Label34.Caption) / Val(Label32.Caption)))) + " %" '计算进度
    Image9.Width = Image8.Width * Int(100 * (Val(Label34.Caption) / Val(Label32.Caption))) / 100
    If Label41.Caption <> "0" Then Label45.Caption = Trim(Int(60 * Val(Label34.Caption) / Val(Label41.Caption))) + " WPM" '计算速度

    ''''''''''''''''''''''''''''
    If Label13.Caption - 1 = Label15.Caption Then '如果一行打完了,就要换一行

        Label9.Caption = Label9.Caption + 1 'N行
        Label24.Left = -555
        If Label9.Caption - 1 = Label11.Caption Then
            Picture5.Cls
            Dim okny
            okny = MsgBox("您已完成所选课程的练习,继续选择其它练习课程吗?", 33, "key$")

            If okny = vbOK Then
                Label28.Caption = "end"
                Form2.Show 1
                Exit Sub
            Else
                tttt '读新的一行

            End If

            Exit Sub
        End If

        Call TextBoxGetLine(Text2.hwnd, Label9.Caption, vData)  '读入第2行为当前练习

        Label3.Caption = vData '要练习的字符
        Label15.Caption = Len(vData) '总个数字符

        Label13.Caption = "1" '第N+1行第1个字母
        Label2.Caption = Left(Label3.Caption, 1)
        Label24.Left = Label3.Left
        Label25.Width = 15

        '  If Label17.Caption = "2" Then Label24.Left = Label3.Left

        '
    End If

    STRtisi = Label2.Caption

    ''''''''''''''''''''''''''''''

    Select Case Asc(STRtisi) '这段就是把提示字符转换为图中的数组数jiantisi----KeyCode = AscB(UCase(STR))

      Case 97 To 122
        Jiantisi = Asc(UCase(STRtisi))
      Case 33
        Jiantisi = 49 '!

      Case 34
        Jiantisi = 222 ' "
      Case 39
        Jiantisi = 222 '  '

      Case 96
        Jiantisi = 192 ' "
      Case 126
        Jiantisi = 192 '

      Case 58
        Jiantisi = 186 ' :
      Case 59
        Jiantisi = 186 ' ;

      Case 60
        Jiantisi = 188 ', < 和 ,
      Case 44
        Jiantisi = 188 ', < 和 ,

      Case 62
        Jiantisi = 190 ' 。和 >
      Case 46
        Jiantisi = 190 ' 。和 >

      Case 63
        Jiantisi = 191 ' /
      Case 47
        Jiantisi = 191 '  和 ?

      Case 123
        Jiantisi = 219 '[ 和 {
      Case 91
        Jiantisi = 219 '[ 和 {

      Case 125
        Jiantisi = 221 '] 和 }
      Case 93
        Jiantisi = 221 '] 和 }

      Case 64
        Jiantisi = 50 '@ 和 2

      Case 35 To 37 '#$%
        Jiantisi = Asc(STRtisi) + 16

      Case 94
        Jiantisi = 54 '^

      Case 38
        Jiantisi = 55 '& 和 7

      Case 42
        Jiantisi = 56 '* 和 8
      Case 40
        Jiantisi = 57 '( 和 9

      Case 41
        Jiantisi = 48 ') 和 0

      Case 45
        Jiantisi = 189 '- 和_
      Case 95
        Jiantisi = 189 '- 和_

      Case 61
        Jiantisi = 187 '+ 和=
      Case 43
        Jiantisi = 187 '+ 和=

      Case Else
        Jiantisi = Asc(STRtisi)

    End Select
    'MsgBox Str(jiantisi)
    Picture5.Cls '以下是击打那个键的提示图

    Picture5.PaintPicture Picture2.Picture, A(Jiantisi).Left, A(Jiantisi).Top, A(Jiantisi).Width, A(Jiantisi).Height, _
                          A(Jiantisi).Left, A(Jiantisi).Top, A(Jiantisi).Width, A(Jiantisi).Height, vbSrcCopy

    Label1.Caption = ""

    Text1.SetFocus

End Sub

Private Sub Text2_GotFocus()
    Text1.SetFocus '有了这句话,TEXT1就总有有焦点了。
    Picture5.PaintPicture Picture3.Picture, A(527).Left, A(527).Top, A(527).Width, A(527).Height, _
                          A(527).Left, A(527).Top, A(527).Width, A(527).Height, vbSrcCopy 'tab键被按下
    sndPlaySound Label6.Caption, SND_ASYNC Or SND_NODEFAULT    '打错的声音
    Timer2.Enabled = True

End Sub

Public Sub capyn()
    Text3.SetFocus '大写检测过程
    Text3.Text = ""
    SendKeys "{a}"
    Timer1.Enabled = True '大写检测过程
End Sub

Private Sub Text6_KeyPress(KeyAscii As Integer)
    Label1.Caption = Chr$(KeyAscii)
End Sub

Private Sub Timer1_Timer()
    If Text3.Text = "A" Then '大写检测过程
        Picture1.Visible = True
    Else
        Picture1.Visible = False
        Picture5.PaintPicture Picture2.Picture, A(20).Left, A(20).Top, A(20).Width, A(20).Height, _
                              A(20).Left, A(20).Top, A(20).Width, A(20).Height, vbSrcCopy
    End If
    Timer1.Enabled = False
    Text1.SetFocus '大写检测过程
End Sub

Private Sub Timer2_Timer()
    Picture5.PaintPicture Picture2.Picture, A(527).Left, A(527).Top, A(527).Width, A(527).Height, _
                          A(527).Left, A(527).Top, A(527).Width, A(527).Height, vbSrcCopy 'tab键被抬上
    Timer2.Enabled = False
End Sub

Public Sub tttt()
    Timer4.Enabled = False
    Label41.Caption = "0" '总时间
    Label42.Caption = "0" '小时
    Label43.Caption = "00" '分钟
    Label44.Caption = "00" '秒
    Label40.Caption = "0:00:00"
    Label38.Caption = "0 %" '正确率
    Label45.Caption = "0 WPM"
    Image9.Width = 0 '进度

    Label38.Caption = "0 %" '正确率
    Label39.Caption = "0 %" '进度
    Label34.Caption = "0" '练习字符数
    Label36.Caption = "0" '打错字符数

    Picture5.Cls
    Text1.Text = ""

    Call TextBoxGetLine(Text2.hwnd, 0, vData) '读入第一行为标题
    Label8.Caption = vData

    Call TextBoxGetLine(Text2.hwnd, 1, vData) '读入第2行为当前练习
    Label3.Caption = vData
    Label15.Caption = Len(vData)
    Label9.Caption = "1" '标明为练习第1行
    Label13.Caption = "1" '第一行第1个字母

    Label2.Caption = Left(Label3.Caption, 1)
    STRtisi = Label2.Caption

    '''''''''''''''''''''这一段保存初始值为数字,字母或上位符号如$%^&都行

    Select Case Asc(Label2.Caption) '这段就是把提示字符转换为图中的数组数jiantisi----KeyCode = AscB(UCase(STR))

      Case 97 To 122
        Jiantisi = Asc(UCase(STRtisi))
      Case 33
        Jiantisi = 49 '!

      Case 34
        Jiantisi = 222 ' "
      Case 39
        Jiantisi = 222 '  '

      Case 96
        Jiantisi = 192 ' "
      Case 126
        Jiantisi = 192 '

      Case 58
        Jiantisi = 186 ' :
      Case 59
        Jiantisi = 186 ' ;

      Case 60
        Jiantisi = 188 ', < 和 ,
      Case 44
        Jiantisi = 188 ', < 和 ,

      Case 62
        Jiantisi = 190 ' 。和 >
      Case 46
        Jiantisi = 190 ' 。和 >

      Case 63
        Jiantisi = 191 ' /
      Case 47
        Jiantisi = 191 '  和 ?

      Case 123
        Jiantisi = 219 '[ 和 {
      Case 91
        Jiantisi = 219 '[ 和 {

      Case 125
        Jiantisi = 221 '] 和 }
      Case 93
        Jiantisi = 221 '] 和 }

      Case 64
        Jiantisi = 50 '@ 和 2

      Case 35 To 37 '#$%
        Jiantisi = Asc(STRtisi) + 16

      Case 94
        Jiantisi = 54 '^

      Case 38
        Jiantisi = 55 '& 和 7

      Case 42
        Jiantisi = 56 '* 和 8
      Case 40
        Jiantisi = 57 '( 和 9

      Case 41
        Jiantisi = 48 ') 和 0

      Case 45
        Jiantisi = 189 '- 和_
      Case 95
        Jiantisi = 189 '- 和_

      Case 61
        Jiantisi = 187 '+ 和=
      Case 43
        Jiantisi = 187 '+ 和=

      Case Else
        Jiantisi = Asc(STRtisi)

    End Select

    Picture5.PaintPicture Picture2.Picture, A(Jiantisi).Left, A(Jiantisi).Top, A(Jiantisi).Width, A(Jiantisi).Height, _
                          A(Jiantisi).Left, A(Jiantisi).Top, A(Jiantisi).Width, A(Jiantisi).Height, vbSrcCopy

    '  Case "~", "!", "@", "#", "$", " %"

    '    Picture5.PaintPicture Picture2.Picture, A(0).Left, A(0).Top, A(0).Width, A(0).Height, _
        A(0).Left, A(0).Top, A(0).Width, A(0).Height, vbSrcCopy

    '  Case "^", "&", "*", "(", ")", "_", "+", "|", "{", "}", "<", ">", "?", ":", """"

    ' Picture5.PaintPicture Picture2.Picture, A(16).Left, A(16).Top, A(16).Width, A(16).Height, _
        A(16).Left, A(16).Top, A(16).Width, A(16).Height, vbSrcCopy

    ' End Select

    '''''''''''''''''''''''''''''''''这一段保存初始值为数字,字母或上位符号如$%^&都行----上档键提示功能暂时不做。

    Label24.Left = Label3.Left
    Label25.Width = 15
    Label26.Visible = False
    Label26.Left = Label24.Left
    Label28.Caption = "home" '开始标志
    Label25.Caption = ""

End Sub

Public Sub dr()
    On Error Resume Next

    Dim OpenString As String
    Dim Zhonghang As Integer
    Dim zhongshu As Integer
    Text2.Text = ""
    Open App.Path & "\" & Label17.Caption & "\" & Label18.Caption & ".txt" For Input As #1

    Do While Not EOF(1)
        Line Input #1, OpenString
        Text2.Text = Text2.Text + OpenString + Chr(13) + Chr(10)
        Zhonghang = Zhonghang + 1 '行数累加
        If Zhonghang <> 1 Then zhongshu = zhongshu + Len(OpenString) '第一行不计数是因为第一行是标题行。
    Loop
    Close #1
    Label11.Caption = Zhonghang - 1 '要少1 是因为第一行是标题行。
    Label32 = zhongshu
End Sub

Public Sub TextBoxGetLine(ByVal hwnd As Long, ByVal whichLine As Long, Line As String)
    Dim length As Long, bArr() As Byte, bArr2() As Byte, lc As Long

    lc = SendMessage(hwnd, EM_LINEINDEX, whichLine, ByVal 0&)
    length = SendMessage(hwnd, EM_LINELENGTH, lc, ByVal 0&)
    If length > 0 Then
        ReDim bArr(length + 1) As Byte, bArr2(length - 1) As Byte
        Call RtlMoveMemory(bArr(0), length, 2)     '准备一个存储器,传递消息之前先在存储器的前两个字节填入存储器的长度
        Call SendMessage(hwnd, EM_GETLINE, whichLine, bArr(0))
        Call RtlMoveMemory(bArr2(0), bArr(0), length)
        Line = StrConv(bArr2, vbUnicode)
    Else
        Line = ""
    End If
End Sub

Private Sub Timer4_Timer()

    Label41.Caption = Val(Label41.Caption) + 1

    Label44.Caption = Val(Label44.Caption) + 1
    Label44.Caption = Right("0" + Label44.Caption, 2) '秒

    If Label44.Caption = "60" Then
        Label44.Caption = "00"
        Label43.Caption = Val(Label43.Caption) + 1
        Label43.Caption = Right("0" + Label43.Caption, 2) '分

    End If

    If Label43.Caption = "60" Then
        Label43.Caption = "00"
        Label42.Caption = Val(Label42.Caption) + 1 '时
    End If

    Label40.Caption = Label42.Caption + ":" + Label43.Caption + ":" + Label44.Caption
    If Label41.Caption <> "0" Then Label45.Caption = Trim(Int(60 * Val(Label34.Caption) / Val(Label41.Caption))) + " WPM" '计算速度

End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -