分享
 
 
 

用VB6.0设计一个打字练习软件

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

秦凯

记得以前在学校里刚接触电脑时,首先掌握的是学会打字,那时的操作系统都是DOS的,界面比较单调,现在进入WINXP时代,所以打字软件也要跟潮流了!所以我用VB6.0写了一个打字小软件,主要步骤如下,供各位VB fans参考:

1) 首先新建一EXE工程

在工程菜单-部件菜单中选择MICROSOFT COMMON DIALOG CONTROL 6.0(SP3)和MICROSOFT WINDOWS COMMON CONTROLS 6.0(SP4)两项,在工程菜单-引用菜单中选择MICROSOFT SCRIPTING RUNTIME项,然后保存工程,再在窗体中加入控件(部分),列表如下:

菜单 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

(备注:文本框控件Text1(0)和Label1(0)放入Picture1控件中)

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下调试通过)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有