📄 form1.frm
字号:
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 + -