扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
菜单 | NAME:mnuPractice | CAPTION:Practice |
子菜单 | NAME:mnuStart | CAPTION:Start Practice |
NAME:mnuPause | CAPTION:Pause Practice | |
NAME:mnuResume | CAPTION:Resume Practice | |
NAME:mnuCustom | CAPTION:Custom Practice | |
NAME:mnuRestart | CAPTION:Restart Practice | |
NAME:mnuExit | CAPTION:Exit | |
状态栏 | NAME:Stautsbar1 | |
文本框 | NAME:Text1(0) | INDEX:0TABSTOP:FALSEVISIBLE:FALSE |
标签 | NAME:Label1(0) | INDEX:0VISIBLE:FALSEBACKSTYLE:0 |
图片 | NAME:Picture1 | TABSTOP:FALSE |
时钟 | NAME:Timer1 | INTERVAL:1000 ENABLED:FALSE |
对话框 | NAME:CommonDialog1 | |
工具栏 | NAME:Toolbar1 |
2) 加入如下代码:
'rowcount是练习文本的行数,totalchar是练习文本的总字数 Dim rowcount, totalchar As Integer 'mode是当前练习状态:start为正在联系,pause中止练习,否则为等待状态 'filename为练习文本文件的文件名 Dim mode, filename As String 'playsec为当前练习所用的秒数 Dim playsec As Long '------------------------------------------ Private Sub Form_Load() Dim i As Integer '调整Picture1控件的位置 Picture1.Top = Toolbar1.Top + Toolbar1.Height + 10 Picture1.Height = Picture2.Top - Picture1.Top '显示当前练习状态 StatusBar1.Panels(1).Text = "Status : Waiting..." End Sub '------------------------------------------ Private Sub Form_Unload(Cancel As Integer) '如果练习文本行数大于0,则将动态生成的输入文本框和标签控件卸载 If rowcount > 0 Then Dim i As Integer For i = 1 To rowcount Unload Label1(i) Unload Text1(i) Next End If End Sub '--------------------------------------------------------- Private Sub mnuCustom_Click() '自定义练习内容 On Error GoTo Error_Exit '弹出练习文本文件选择框 CommonDialog1.ShowOpen '如果选择的文件名为空,则退出 If CommonDialog1.filename = "" Then Exit Sub '如果当前练习状态不是等待状态,则停止当前练习 Timer1.Enabled = False playsec = 0 Dim i As Integer For i = 1 To rowcount Unload Label1(i) Unload Text1(i) Next filename = CommonDialog1.filename '开始新的练习,练习文本为用户选择的文本文件 Call mnuStart_Click Exit Sub Error_Exit: Exit Sub End Sub '------------------------------------------ Private Sub mnuExit_Click() '退出程序 Timer1.Enabled = False Unload Me End Sub '------------------------------------------ Private Sub mnuPause_Click() '中止练习 '如果当前正在练习, If mode = "start" Then Timer1.Enabled = False mode = "pause" 'Picture1.Enabled = False StatusBar1.Panels(1).Text = "Status : Pausing..." End If End Sub '--------------------------------------------- Private Sub mnuRestart_Click() '重新练习 '如果没有开始练习,则退出;否则先卸载动态生成的控件数组, '然后再开始练习 If mode = "" Then Exit Sub Dim i As Integer mode = "" For i = 1 To rowcount Unload Label1(i) Unload Text1(i) Next Call mnuStart_Click End Sub '--------------------------------------------- Private Sub mnuResume_Click() '继续练习 '如果练习为中止状态,则继续练习 If mode = "pause" Then Timer1.Enabled = True mode = "start" 'Picture1.Enabled = True StatusBar1.Panels(1).Text = "Status : Starting..." End If End Sub '--------------------------------------------- Private Sub mnuStart_Click() '如果当前正在练习,则退出此过程 If mode <> "" Then Exit Sub '申明一个文本流和一个文件系统对象 Dim t As TextStream Dim i As Integer Dim b As FileSystemObject '创建一个文件系统对象 Set b = New FileSystemObject Dim temp As String '如果当前没有练习文本文件,则采用默认的文本文件进行练习 If filename = "" Then filename = App.Path + "\article\a.txt" '读一个文本文件 Set t = b.OpenTextFile(filename, ForReading, False) i = 0: totalchar = 0 '如果没有读完,则继续读 Do While Not t.AtEndOfStream temp = Trim(t.ReadLine) '如果当前读的行数据去掉空格后为空,则忽略此行数据 If temp <> "" Then i = i + 1 '动态生成控件数组,用于显示练习文本数据和创建输入栏 Load Label1(i) Label1(i).Top = 500 * (i - 1) + i * 5 Label1(i).Left = 20 Label1(i).Caption = temp '如果显示的练习文本长度大于Picture1的长度, '则截掉多余的文本 Do While Label1(i).Width + Label1(i).Left > Picture1.Width Label1(i).Caption = Left(Label1(i), Len(Label1(i).Caption) - 1) Loop Label1(i).Visible = True Load Text1(i) Text1(i).Top = Label1(i).Top + Label1(i).Height + 20 Text1(i).Left = 20 Text1(i).Width = Picture1.Width - 20 Text1(i).Visible = True Text1(i).Text = "" '把输入焦点定位到第一个输入框中 Text1(1).SetFocus '统计练习文本总字数 totalchar = Len(Label1(i).Caption) + totalchar '如果练习文本的高度大于Picture1的高度,则不再继续从文本文件中读数据而退出 If Picture1.Height - (Text1(i).Top + Text1(i).Height) < 500 Then Exit Do End If Loop '如果文本文件为空,则退出 If i = 0 Then t.Close Exit Sub End If t.Close '练习开始,并且计时开始 rowcount = i playsec = 0 Timer1.Enabled = True mode = "start" StatusBar1.Panels(1).Text = "Status : Starting..." End Sub '------------------------------------------ Private Sub Text1_Change(Index As Integer) If mode = "pause" Then Call mnuResume_Click '如果当前行的打字字数等于当前练习行字数,则跳到下一打字输入行 '如果练习完毕,则弹出对话框,让玩家选择是否存储打字速度数据 If LenB(Text1(Index).Text) = LenB(Label1(Index).Caption) Then If Index = rowcount Then Timer1.Enabled = False mode = "" Dim i, j, rightchar As Integer rightchar = 0 '统计每一行打字的正确字数 For i = 1 To rowcount For j = 1 To Len(Label1(i).Caption) If Mid(Text1(i).Text, j, 1) = Mid(Label1(i).Caption, j, 1) Then rightchar = rightchar + 1 Next Next If MsgBox("finish task!Correct Percent:" & Int((rightchar / totalchar) * 100) & "%" + vbCrLf + vbCrLf + "Do you want to save this practice result?", vbYesNo + vbInformation, "Hint") = vbYes Then '将打字速度结果存入文本文件中 Open App.Path + "\count.txt" For Append As #1 If playsec = 0 Then Print #1, 0 Else Print #1, CStr(totalchar / playsec) End If Close #1 End If '计时清0 playsec = 0 Else Index = Index + 1 Text1(Index).SetFocus End If End If End Sub '------------------------------------------ Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) '在打字输入框中屏蔽掉方向键和删除键等,以避免玩家误操作 If KeyCode = vbKeyLeft Then KeyCode = 0 If KeyCode = vbKeyRight Then KeyCode = 0 If KeyCode = vbKeyUp Then KeyCode = 0 If KeyCode = vbKeyDown Then KeyCode = 0 If KeyCode = vbKeyDelete Then KeyCode = 0 If KeyCode = vbKeyHome Then KeyCode = 0 If KeyCode = vbKeyEnd Then KeyCode = 0 End Sub '------------------------------------------- Private Sub Text1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) '如果用鼠标点击输入框,则作为作弊行为,重新开始练习 MsgBox "Don't cheat youself,Please studying carefully!" + vbCrLf + vbCrLf + "[Suggestion : This Way is to advantage you]", vbOKOnly + vbInformation, "Warning" Call mnuRestart_Click End Sub '------------------------------------------- Private Sub Timer1_Timer() '计算当前练习所耗时间,以秒为单位 playsec = playsec + 1 StatusBar1.Panels(2).Text = "Seconds Used : " & playsec & "(S)" End Sub |
至此,你就拥有了一个属于自己的打字小软件了。按F5运行它,效果还不错吧,有兴趣的朋友还可以加上一些特殊功能,比如背景音乐,字体颜色或者游戏功能。下面是作者的打字小软件运行后的图示:
(备注:本程序在VB6.0+WIN2000下调试通过)
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者