石家庄铁道学院课程设计
基于Visual Basic语言的文本编辑
器设计
单 位 分院(系)
专 业
学 号
学生姓名
指导教师
完成日期 二零一零年 七 月
日 五
我们日常生活中会用到许多软件,有聊天、娱乐等等。也会浏览许多网站,但我们经常使用的却不多,此外,我们每天要做的事也需要有备忘,以及我们的联系簿等。此软件就是依旧人们的这些需求而编写的。内容包括对常用的网站操作,联系簿和备忘录的操作。本软件采用Visual Basic语言来编写,实现的需求功能。
Visual Basic语言简便易学,有许多优点,例如:可编写标准模块,在多个窗体中调用相同的程序,也可自定义函数,在同一工程中自由调用,可以添加多个专用部件,为编程带来了方便,为编写使用方便、功能强大的生活小助手软件提供了良好的平台。
软件功能编写中使用了access数据库,通过对数据库的调用实现了数据的管理。大量调用事件、过程、函数及窗体,实现了需求的功能。
论文首先介绍了生活小助手开发涉及的相关技术,主要围绕
Visual Basic语言的相关对象和事件。其次,介绍了生活小助手的总体分析与设计,包括需求分析、功能模块分析和程序设计。最后,通过Visual Basic语言的开发界面检验了该程序的可用性,并以具体描述与展示代码相结合的方式详细地叙述了系统功能的实现。
关键词:Visual Basic语言、生活小助手软件、数据库。
目 录
第一章 选题的意义 ···································································· 7
第二章 系统功能需求分析 ························································ 9
2.2 系统的构成 ······································································ 9
2.3 各模块的功能 ································································ 10
第三章 系统代码 ······································································ 12
第四章 系统实现 ······································································ 55
第五章 总结 ·············································································· 57
第一章 选题的意义
生活小助手是对日常生活使用的软件的管理的应用软件。选择自己编写软件程序是因为能更深刻地了解Visual Basic软件的应用,并且能够学习到简易软件的编写、开发过程。
通过本次实习的程序制作,使学生进一步掌握了Visual Basic的基础知识、规范和高级语言程序设计的基本方法,理解事件驱动的特性,能够阅读由Visual Basic编写的程序。
了解并学会了对数据库的增删改查等基本的功能运用,通过数据库对一般数据的管理。并掌握一般的程序设计方法,具有一定的程序调试能力,为后续的计算机课程打下坚实的基础。
本次实习我们学到的知识有:熟悉Visual Basic集成开发环境,了解Visual Basic中对象的概念和事件驱动程序的基本特性,掌握基本的数据结构和常用算法,学会了数据库的方法使用,数据的管理,能够编写和调试Visual Basic程序。
我们设计该软件的主要目的是:
1. 通过该题目的设计,掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
2. 掌握菜单的使用方法;
3. 掌握多窗体的调用方法;
4. 掌握数据库的应用;
5.数据库的调用,及对数据的管理。
第二章 系统功能需求分析
2.1系统概述
我设计的软件,模仿了万能收藏窗体布局、其中部分功能与它相似。窗体大致分为:标题栏、菜单栏、工具栏、工作区、状态栏几个部分。系统拥有网址的保存、修改、删除,和浏览网页;联系簿的保存、修改、删除;及备忘等功能。
2.2系统的构成
我们设计的软件,窗体布局简洁,方便实用。软件主要有气个窗体构成,登陆、主窗口、添加网址、添加联系人,备忘录、数据查找窗体、标准模块。
登录窗口主要包括combo、text录入。验证码的使用、数据库的链接等
主窗口主要包括viewtree、dgbrid显示数据,快捷键的使用、菜单栏、数据库的链接等
添加窗体主要包括combo输入及下拉菜单的使用、数据的显示、数据库的链接等
备忘录窗体主要包括栏、文本编辑、文字计数、数据库的链接等。 数据查找窗体主要包括combo输入及下拉菜单的使用、dbgrid数据显示数据库的链接等。
标准模块主要包括各种函数、全局变量的声明,文件初始化等功能。
2.3各模块的功能
登录窗体与数据库链接实现单对单(一个账户对应一个密码)登陆模式,实用随机数产生验证码限制登录。
主窗体使用viewtree与dbgrid显示数据库内容,同时是viewtree中节点与dbgrid相连,实现随时变化。菜单栏中添加、修改按钮能实现对其他窗体的调用,同时改变显示窗体的标题栏属性;菜单栏中的删除按钮可以删除对应项在数据库的数据内容,并同时改变dbgrid格内容;菜单栏中的查看网址按钮可打开浏览器浏览相应网页;查找按钮可查找数据库中相应内容。下方的状态栏可以显示操作人的信息,与系统详细时间等内容。
添加窗体与数据库相连,单击保存改变数据库中数据,取消关闭相应窗口。
修改窗体可读取显存数据库中的内容,并进行修改,取消关闭相应窗口。当改变关系与类型与数据库中无相符内容时,则改变数据树内容。
编辑菜单项具有编辑文本文件的最基本、最常见的功能,复制菜单项可以复制已选定的文本,剪切菜单项可以剪切已选定的文本,粘贴菜单项可以可以再光标插入点处插入一已复制或已剪切的文本。全选菜单项可以把当前文本全部选中。同时字体菜单可改变字体属性。
在文本框中内容改变时,统计其中字数显示在下方,当字数超出一定限制是给出提示。
2.4系统的运行环境
系统的运行环境是win7、Vista 、XP等常用系统软件。
2.5各模块的功能
软件具有储存修改网址、联系簿、备忘录的功能。
登录窗口有数据库连接,实现单对单(一个账号对应一个密码)登陆系统。使用随机数产生验证码限制登录情况。
主窗口使用viewtree显示数据库中类型表的显示,使用dbgrid显示数据中的详细数据,菜单栏是文件功能的具体体现者,具有对其他窗体的显示的调用功能。新建菜单调用添加网址、添加联系人或添加备忘窗体;修改菜单调用修改网址、修改联系人或修改备忘窗体;点击删除会在数据库中删除相应项;查找联系人会调用查找窗体,查看网址会启动浏览器查看相应网页。
当点击添加时,窗体的caption属性为添加,当点击确定时改变数据库内容;取消退出窗体。
当点击修改时,窗体的caption属性会变为修改,同时读取数据库文件显示相应数据,当内容数据发生改变时对数据库内容进行修改;点击取消突出窗体。
当窗体中的类型或关系框中内容与数据库中内容不符,则同时在类型数据表中进行修改。
备忘录菜单中菜单栏编辑菜单项具有编辑文本文件的最基本、最重要、也是最常见的功能,复制菜单项可以复制已选定的文本,剪切菜单项可以剪切已选定的文本,粘贴菜单项可以可以再光标插入点处插入一已复制或已剪切的文本。全选菜单项可以把当前文本全部选中。
第三章 系统代码
3.1主窗体代码
Option Explicit
Const treewide = 2000 'TREEVIEW的最小宽度
Const biaowide = 2000 'DBGRID的最小宽度
Private Sub Form_Load()
imgPointer.Left = ReadIni("chuangti", "imgpointerleft", "1200") '从ini文件中确定窗体大小
Me.Move ReadIni("chuangti", "formleft", "100"),
ReadIni("chuangti", "formtop", "100"), ReadIni("chuangti", "formwidth", "2400"), ReadIni("chuangti", "formheight", "2400")
'Me关键字像是隐含声明的变量。这个关键字适用于类模块中的每个过程。当类有多个实例时,Me在代码正在执行的地方提供引用
具体实例的方法。要把当前执行类实例的有关信息传递到另一个模块的过程,Me非常有用
Data1.DatabaseName = dizhi & "shuju.mdb"
Set Datashuju = Workspaces(0).OpenDatabase(dizhi & "shuju.mdb", False, False)
ListTree
lianxibiao
End Sub
Private Sub Form_Resize() '当一个对象第一次显示或当一个对象的窗口状态改变时该事件发生
On Error Resume Next ' resume在错误处理程序结束后,恢复原先的运行。如果错误和错误处理程序出现在同一个程序中,则从紧随产生错误的语句的下个语句恢复运行。如果错误发生在被调用的过程中,则对最后一次调用包含错误处理程序的过程的语句(或
OnErrorResumeNext语句),从紧随该语句之后的语句处恢复运行
If Me.Width < treewide + biaowide Then Me.Width = treewide +
biaowide
If Me.WindowState <> 1 Then chicun imgPointer.Left 'windowstate返回或设置一个值,该值用来指定在运行时窗体窗口的可视状态。0为正常,1最小化,2最大化
End Sub
Private Sub chicun(X As Long)
X = treewide
TreeView1.Width = X
imgPointer.Left = X + 40
DBGrid1.Left = X + 40
DBGrid1.Width = Me.Width - (TreeView1.Width + 100)
TreeView1.Top = Toolbar1.Height
DBGrid1.Top = TreeView1.Top + 2
imgPointer.Top = TreeView1.Top
picMove.Top = TreeView1.Top
TreeView1.Height = Me.ScaleHeight - TreeView1.Top - 300 '设置 height
DBGrid1.Height = TreeView1.Height
imgPointer.Height = TreeView1.Height
picMove.Height = TreeView1.Height
StatusBar1.Top = Me.ScaleHeight - TreeView1.Height -
TreeView1.Top - 300
StatusBar1.Height = 300
End Sub
Public Sub ListTree() '显示树形列表
Dim a As Node
Dim b As Long
'添加地址薄类型
TreeView1.Nodes.Clear
Set a = TreeView1.Nodes.Add(, , "l", "联系人")
'object.Add (relative, relationship, key, text, image, selectedimage)
With Datashuju.OpenRecordset("select * from list where
book='lianxiren'")
While Not .EOF
b = b + 1
Set a = TreeView1.Nodes.Add("l", tvwChild, "l" & b, !Type)
'TvwChild4(缺省)子节点。该Node节点是relative命名节点的子节点
.MoveNext
Wend
End With
a.EnsureVisible
'添加网址薄类型
Set a = TreeView1.Nodes.Add(, , "W", "网址薄")
With Datashuju.OpenRecordset("select * from list where
book='wangzhi'")
While Not .EOF
b = b + 1
Set a = TreeView1.Nodes.Add("W", tvwChild, "W" & b, !Type) .MoveNext
Wend
End With
a.EnsureVisible
'添加备忘列表
Set a = TreeView1.Nodes.Add(, , "b", "备忘录")
With Datashuju.OpenRecordset("select * from list where
book='beiwang'")
While Not .EOF
b = b + 1
Set a = TreeView1.Nodes.Add("b", tvwChild, "b" & b, !Type) .MoveNext
Wend
End With
a.EnsureVisible
End Sub
Public Sub lianxibiao(Optional strRelation As String)
Dim a As String
a = "select 姓名,关系,电话,地址,qq,Email,备注 from lianxiren" If strRelation <> "" Then a = a & " where 关系='" & strRelation & "'"
Data1.RecordSource = a 'ecordSource 设置一个数据控件的底层表、sql语句或querydef
Data1.Refresh
shujudbg 7, "lianxiren"
If strRelation <> "" Then DBGrid1.Columns(1).Visible = True End Sub
Public Sub wangzhibiao(Optional strType As String)
Dim a As String
a = "select 名称,网址,类型,备注 from wangzhi"
If strType <> "" Then a = a & " where 类型='" & strType & "'"
Data1.RecordSource = a 'ecordSource 设置一个数据控件的底层表、sql语句或querydef
Data1.Refresh
shujudbg 4, "wangzhi"
End Sub
Public Sub beiwangbiao(Optional strType As String)
Dim a As String
a = "select 文件名,内容 from beiwang"
If strType <> "" Then a = a & " where 类型='" & strType & "'"
Data1.RecordSource = a 'ecordSource 设置一个数据控件的底层表、sql语句或querydef
Data1.Refresh
shujudbg 2, "beiwang"
End Sub
Private Sub shujudbg(lieshu As Long, shujukuming As String) Dim yuanlieshu As Long, i As Integer, b As Integer
yuanlieshu = DBGrid1.Columns.Count
b = lieshu - yuanlieshu
For i = 1 To b
DBGrid1.Columns.Add (1)
Next
For lieshu = 0 To lieshu - 1 '设置字段、宽度
DBGrid1.Columns(lieshu).Width = ReadIni(shujukuming,
"colwid" & lieshu, 2000)
Next
End Sub
Private Sub treeview1_NodeClick(ByVal Node As ComctlLib.Node) Select Case Node.Key
Case "l"
lianxibiao
Case "l1" To "l9", "l10" To "l99"
lianxibiao Node.Text
Case "W"
wangzhibiao
Case "W1" To "W9", "W10" To "W99"
wangzhibiao Node.Text
Case "b"
beiwangbiao
Case "b1" To "b9", "b10" To "b99"
beiwangbiao Node.Text
End Select
End Sub
Private Sub TreeView1_BeforeLabelEdit(Cancel As Integer) Cancel = True '取消标签编辑操作 End Sub
Private Sub men_Click(Index As Integer) '点击菜单事件 Select Case Index
Case 1
lianxiadd.liancaozuo = 1
lianxiadd.Show vbModal, Me
Case 2
shanlian
Case 3
lianxiadd.liancaozuo = 2
lianxiadd.Show vbModal, Me
Case 4
chazhao.Show
End Select
End Sub
Private Sub wang_Click(Index As Integer) '点击菜单事件 Dim a As Long
Select Case Index
Case 1
wangzhiadd.wangcaozuo = 1
wangzhiadd.Show vbModal, Me
Case 2
shanwang
Case 3
wangzhiadd.wangcaozuo = 2
wangzhiadd.Show vbModal, Me
Case 4
If InStr(Data1.RecordSource, "wangzhi") > 0 Then
With Data1.Recordset
If Not .EOF And Not .BOF Then '指针处于中间位置
If Left(!网址, 7) = "http://" Then
a = ShellExecute(Me.hwnd, "Open", !网址, "", App.Path, 1) Else
'shellexecute(byval hwand as Long ,byval ipoperation as String ,byval ipfile as String ,byval ipparamelers as String ,byval ipdirectory as String ,byval nshowcmd as Long)
'shellexecute函数:查找与制定相关程序的文件名
'hwnd 制定一个窗口的句柄,有时候windows程序有必要在创建自己的主窗口前显示一个消息框
'ipoperation 制定字符串"open"来打开ipfile文档,或指定"print"来打印它
'ipfile 想用关联程序打印或打开一个程序名或文件名
'ippatameters 如果ipszfile是可执行文件,则这个字符串包括传递给执行程序的参数
'ipkirectory 使用的完整路径
'nshowsmd 定义了如何显示启动程序的常数值
a = ShellExecute(Me.hwnd, "Open", "http://" & !网址, "", App.Path, 1) '
End If
End If
End With
End If
End Select
End Sub
Private Sub bei_Click(Index As Integer) '点击菜单事件
Select Case Index
Case 1
beiwanglu.beicaozuo = 1
beiwanglu.Show vbModal, Me
Case 2
shanbei
Case 3
beiwanglu.beicaozuo = 2
beiwanglu.Show vbModal, Me
End Select
End Sub
Private Sub shanwang()
Dim a As String, b As String
With Data1.Recordset
a = MsgBox("确定删除" & vbCrLf & !网址 & " ?", vbQuestion + vbYesNo)
If a = vbYes Then
Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End If
End With
ListTree
End Sub
Private Sub shanlian()
Dim a As String, b As String
With Data1.Recordset
a = MsgBox("确定删除" & vbCrLf & !姓名 & " ?", vbQuestion + vbYesNo)
If a = vbYes Then
Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End If
End With
ListTree
End Sub
Private Sub shanbei()
Dim a As String, b As String
With Data1.Recordset
a = MsgBox("确定删除" & vbCrLf & !备忘 & " ?", vbQuestion + vbYesNo)
If a = vbYes Then
Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End If
End With
ListTree
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As
ComctlLib.Button)
If Button.Index < 5 Then
men_Click (Button.Index)
ElseIf Button.Index > 5 Then
wang_Click (Button.Index - 5)
End If
End Sub
'Private Sub StatusBar1_PanelClick(ByVal Panel As
ComctlLib.Panel)
'If denglu.Combo1.Text = dou Then StatusBar1.Panels.Item(1).Text = "操作者:窦军强"
'If denglu.Combo1.Text = gao Then StatusBar1.Panels.Item(1).Text = "操作者:高树青"
'StatusBar1.Panels.Item(2).Text = Format(Date, "yyyy年mm月dd日")
'n = Weekday(Data)
'If n = 1 Then StatusBar1.Panels.Item(3).Text = "星期日"
'If n = 2 Then StatusBar1.Panels.Item(3).Text = "星期一"
'If n = 3 Then StatusBar1.Panels.Item(3).Text = "星期二"
'If n = 4 Then StatusBar1.Panels.Item(3).Text = "星期三"
'If n = 5 Then StatusBar1.Panels.Item(3).Text = "星期四"
'If n = 6 Then StatusBar1.Panels.Item(3).Text = "星期五"
'If n = 7 Then StatusBar1.Panels.Item(3).Text = "星期六"
'StatusBar1.Panels.Item(4).Text = Time
'End Sub
3.2登录窗体代码
Private Sub Form_Load()
Randomize
Data1.DatabaseName = App.Path & "\shuju.mdb"
X = Int(Rnd * 10)
Y = Int(Rnd * 10)
z = Int(Rnd * 10)
m = Int(Rnd * 10)
Label3.Caption = X & Y & z & m
Label3.Font = 宋体
'Combo1.AddItem = "qing"
'Combo1.AddItem = "dou"
End Sub
Private Sub Command1_Click()
Dim a As String, b As String, c As String
a = Trim(Combo1)
Data1.RecordSource = "select * from yonghu where yonghu ='" & a & "' and mima= '" & Text2.Text & "'"
Data1.Refresh
If a = "" Then
MsgBox "用户名不能为空,请重新输入!", vbOKOnly + vbExclamation, "错误"
Combo1.SetFocus
Exit Sub
End If
If Text2.Text = "" Then
MsgBox "请输入密码", vbOKOnly + vbExclamation, "错误" Text2.SetFocus
Exit Sub
End If
If Text1.Text <> Trim(Label3.Caption) And a <> "" And Text2.Text <> "" Then
MsgBox "验证码错误,请重新输入!", vbOKOnly +
vbExclamation, "错误"
Text1.Text = ""
Text1.SetFocus
Exit Sub
End If
b = Data1.Recordset.Fields("yonghu")
c = Data1.Recordset.Fields("mima")
If Combo1.Text = b And Text2.Text = c Then
Load frmmain
frmmain.Show
Unload Me
ElseIf Combo1.Text <> b Then
MsgBox "查无此用户,请重新输入!", vbOKOnly + vbExclamation, "错误"
ElseIf Combo1.Text = b And Text2.Text <> c Then
MsgBox "密码错误,请重新输入密码!", vbOKOnly + vbExclamation, "错误"
Text2.SetFocus
Exit Sub
End If
End Sub
Private Sub text2_keypress(keyascii As Integer) If keyascii = 13 Then
Call Command1_Click
End If
End Sub
Private Sub Command2_Click()
End
End Sub
3.3添加联系人窗体代码
Option Explicit
Public liancaozuo As Long
Public jialeixing As Boolean
Private Sub Form_Load()
Data1.DatabaseName = dizhi & "shuju.mdb"
With Datashuju.OpenRecordset("select * from list where book='lianxiren'")
While Not .EOF
Combo1.AddItem !Type
.MoveNext
Wend
Combo1 = ReadIni("lianxiren", "type")
End With
If liancaozuo = 1 Then
Me.Caption = "添加联系人"
Else
Me.Caption = "修改联系方式"
Command2.Caption = "取消"
xianshuju1
End If
jialeixing = False
End Sub
Private Sub text1_GotFocus(Index As Integer)
Text1(Index).SelStart = 0
Text1(Index).SelLength = Len(Text1(Index)) '得到焦点时选中文本框里全部内容
End Sub
Private Sub Ok_Click()
If Trim(Text1(0)) = "" Then
Beep
MsgBox "姓名不可为空。请重新输入!", vbExclamation Text1(0).SetFocus
Exit Sub
End If
If Trim(Combo1) = "" Then
Beep
MsgBox "关系不可为空。请重新输入!", vbExclamation Combo1.SetFocus
Exit Sub
End If
frmmain.Data1.RecordSource = "list"
frmmain.Data1.Refresh
If Combo1.Text <> frmmain.Data1.Recordset.Fields("type") Then
With frmmain.Data1.Recordset
.AddNew
.Fields("type").Value = Combo1
.Fields("book").Value = "lianxiren" .Update
jialeixing = True
End With
frmmain.Data1.RecordSource = "lianxiren" frmmain.Data1.Refresh
End If
If liancaozuo = 1 Then
zhengshuju1
Else
gaishuju1
End If
Unload Me
End Sub
Private Sub gaishuju1()
'添加联系人
With frmmain.Data1.Recordset
.Edit
.Fields("姓名").Value = Text1(0)
.Fields("地址").Value = Text1(1)
.Fields("关系").Value = Combo1
.Fields("电话").Value = Val(Text1(2))
.Fields("qq").Value = Val(Text1(3))
.Fields("备注").Value = Text1(4)
.Update
End With
End Sub
Private Sub zhengshuju1()
Dim a As Long
Dim neirong As TextBox
'设置data控件到联系人
With frmmain
If Right(.Data1.RecordSource, 7) <> "lianxiren" Then
.lianxibiao
Set .TreeView1.SelectedItem = .TreeView1.Nodes.Item("W") End If
End With
With frmmain.Data1.Recordset
.AddNew
.Fields("姓名").Value = Text1(0)
.Fields("地址").Value = Text1(1)
.Fields("关系").Value = Combo1
.Fields("电话").Value = Val(Text1(2))
.Fields("qq").Value = Val(Text1(3))
.Fields("备注").Value = Text1(4)
.Update
End With
a = WritePrivateProfileString("wang", "type", Combo1, dizhi & ININAME)
'writeprivateprofilestring(byval ipapplicationname as String ,byval ipkeyname as String ,byval ipstring as String ,byval ipfilename as String )as Long
'函数在win.ini初始化文件指定小节内设置一个字符串。
'ipapplicationname要写入的新字符串的小节名称,字符串不区分大小写。
'ipkeyname要设置的项目名,不区分大小写。
'ipstring指定为这个项写入的字符串值。用vbnullstring表示删除这个项现有的字符。
'ipfilename初始化文件名字,如果没有指定完整的路径,系统会自动在windows目录下查找文件,如果没有找到系统会自动创建
For Each neirong In Me.Text1
neirong = ""
Next
Text1(0).SetFocus
End Sub
Private Sub xianshuju1()
Dim a As Long, b As Long
a = Val(Text1(2))
b = Val(Text1(3))
With frmmain.Data1.Recordset
Text1(0) = .Fields("姓名").Value
Text1(1) = .Fields("地址").Value
Combo1 = .Fields("关系").Value
a = .Fields("电话").Value
b = .Fields("qq").Value
Text1(4) = .Fields("备注").Value
End With
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
If jialeixing Then frmmain.ListTree
Set lianxiadd = Nothing
End Sub
3.4添加网址代码
Option Explicit
Public wangcaozuo As Long '1表示添加,2表示修改 Dim jialeixing1 As Boolean '如果添加了类型,则需要修改树形列表
Private Sub Form_Load()
Data1.DatabaseName = dizhi & "shuju.mdb"
With Datashuju.OpenRecordset("select * from list where
book='wangzhi'")
While Not .EOF
Combo1.AddItem !Type
.MoveNext
Wend
Combo1 = ReadIni("wang", "type")
End With
'ImageCombo1.ComboItems.Add(Index As Variant, Key As Variant, Text As Variant, Image As Variant,SelImage OverLayImage As Variant, Indentation As Variant) As ComboItem
'向集合中添加一个 ComboItem 对象,并返回对新创建对象的一个引用。
'index可选的。在集合内创建新对象的位置在集合内创建新对象的位置。
'key可选的。在集合内标识该项的唯一字符串。可用来代替 Index指定对象。
'text可选的。该项的文本,同将在组合框的列表和文本部分中出现的一样image可选的。
'一个 ImageList 控件的索引或关键字,标识与列表项同时使用的图片selImage可选的。
'一个 ImageList 控件的索引或关键字,标识当列表项被选中时与其同时使用的图片overLayImage可选的。
'一个ImageList控件的索引或关键字,标识列表项所使用的覆盖图片indentation可选的。将应用于项的缩进等级。应用于每一个缩进等级的空格数由 Indentation属性决定
'comboItem新创建 ComboItem 对象的一个引用,作为此函数成功完成的一个结果返回
If wangcaozuo = 1 Then
Me.Caption = "添加网址薄"
Else
Me.Caption = "修改网址薄"
Command2.Caption = "取消(&C)"
xianshuju1
End If
jialeixing1 = False
End Sub
Private Sub text1_GotFocus(Index As Integer)
Text1(Index).SelStart = 0
Text1(Index).SelLength = Len(Text1(Index)) '得到焦点时选中文本框里全部内容
End Sub
Private Sub Ok_Click()
If Trim(Text1(1)) = "" Then
Beep
MsgBox "网址不可为空。请重新输入!", vbExclamation
Text1(1).SetFocus
Exit Sub
End If
If Trim(Combo1) = "" Then
Beep
MsgBox "类型不可为空。请重新输入!", vbExclamation Combo1.SetFocus
Exit Sub
End If
If Combo1.Text <> frmmain.Data1.Recordset.Fields("类型") Then frmmain.Data1.RecordSource = "list"
frmmain.Data1.Refresh
With frmmain.Data1.Recordset
.AddNew
.Fields("type").Value = Combo1
.Fields("book").Value = "wangzhi"
.Update
jialeixing1 = True
End With
frmmain.Data1.RecordSource = "wangzhi"
frmmain.Data1.Refresh
End If
If wangcaozuo = 1 Then
zhengshuju1
Else
gaishuju1
End If
Unload Me
End Sub
Private Sub gaishuju1()
'添加网址薄
With frmmain.Data1.Recordset .Edit
.Fields("名称").Value = Text1(0) .Fields("网址").Value = Text1(1) .Fields("类型").Value = Combo1 .Fields("备注").Value = Text1(2) .Update
End With
End Sub
Private Sub zhengshuju1()
Dim a As Long
Dim neirong As TextBox
'设置data控件到网址薄
With frmmain
If Right(.Data1.RecordSource, 7) <> "wangzhi" Then
.wangzhibiao
Set .TreeView1.SelectedItem = .TreeView1.Nodes.Item("W") End If
End With
With frmmain.Data1.Recordset
.AddNew
.Fields("名称").Value = Text1(0)
.Fields("网址").Value = Text1(1)
.Fields("类型").Value = Combo1
.Fields("备注").Value = Text1(2)
.Update
End With
a = WritePrivateProfileString("wang", "type", Combo1, dizhi & ININAME)
'writeprivateprofilestring(byval ipapplicationname as String ,byval ipkeyname as String ,byval ipstring as String ,byval ipfilename as String )as Long
'函数在win.ini初始化文件指定小节内设置一个字符串。
'ipapplicationname要写入的新字符串的小节名称,字符串不区分大小写。
'ipkeyname要设置的项目名,不区分大小写。
'ipstring指定为这个项写入的字符串值。用vbnullstring表示删除这个项现有的字符。
'ipfilename初始化文件名字,如果没有指定完整的路径,系统会自动在windows目录下查找文件,如果没有找到系统会自动创建
For Each neirong In Me.Text1
neirong = ""
Next
Text1(0).SetFocus
End Sub
Private Sub xianshuju1()
With frmmain.Data1.Recordset
Text1(0) = .Fields("名称").Value
Text1(1) = .Fields("网址").Value
Combo1 = .Fields("类型").Value
Text1(2) = .Fields("备注").Value
End With
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
If jialeixing1 Then frmmain.ListTree
Set wangzhiadd = Nothing
End Sub
3.5备忘录窗体代码
Public beicaozuo As Integer
Private Sub Form_Load()
If beicaozuo = 2 Then xianbei
End Sub
'当文本框上出现鼠标按下的事件时
Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'MouseDown事件各种语法包含下列部分:
'button 返回一个整数,用来标识该事件的产生是按下哪个按钮
'其中 左按钮(位 0),右按钮(位 2),以及中间按钮(位 4) 'shift 返回一个整数,标示是否同时有Shift,Ctrl,Alt键按下 'x, y 返回一个指定鼠标指针当前位置的数
'Button = 2 表示右键按下
If Button = 2 Then
'PopupMenu方法用来弹出一个菜单
'语法是 object.PopupMenu menuname, flags, X, Y
'mnufile是我们在菜单编辑器中设计好的菜单
'X,Y是弹出菜单的位置,可以为数字,如果直接写为X,Y则是在当前鼠标位置弹出菜单
PopupFrm.PopupMenu mnufile, 0, X, Y
End If
End Sub
Private Sub jian_Click(Index As Integer)
Select Case Index
Case 1
Clipboard.Clear
Clipboard.SetText Text1.SelText
Text1.SelText = ""
Case 3
Text1.SelText = Clipboard.GetText Case 2
Clipboard.Clear
Clipboard.SetText Text1.SelText Case 4
Text1.SelStart = 0
Text1.SelLength = Len(Text1) End Select
End Sub
Private Sub wen_Click(Index As Integer) Select Case Index
Case 1
addshuju
Unload Me
Case 2
guanbi
Unload Me
End Select
End Sub
Private Sub Text1_Change()
Dim a As Integer
a = clen(Text1.Text)
Label1.Caption = "当前总字数为" & a
If a > 255 Then
MsgBox "内容过多,请删除部分再保存", vbOKOnly + vbExclamation, "错误"
Text1.SetFocus
Text1.SelStart = 0
Text1.SelLength = Len(Text1)
End If
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
If Button.Index < 2 Then
wen_Click (Button.Index)
ElseIf Button.Index > 6 Then
zi_Click (Button.Index - 6)
ElseIf Button.Index > 2 Then
jian_Click (Button.Index - 2)
End If
End Sub
Private Sub xianbei()
With frmmain.Data1.Recordset
Text1 = .Fields("内容").Value
End With
End Sub
Private Sub guanbi()
Dim a As Integer
If Text1.Text <> "" Then
a = MsgBox("是否保存文件", vbOKCancel + vbInformation) End If
If a = 1 Then
wen_Click (Index = 1)
Else
Unload Me
End If
End Sub
Private Function clen(ByVal a As String) As Integer
clen = LenB(StrConv(a, vbFromUnicode)) '读取text中字节 End Function
Private Sub zi_Click(Index As Integer)
Select Case Index
Case 1
CommonDialog1.ShowFont
Text1.FontName = CommonDialog1.FontName
Text1.FontBold = CommonDialog1.FontBold
Text1.FontSize = CommonDialog1.FontSize
Text1.FontItalic = CommonDialog1.FontItalic
Text1.FontStrikethru = CommonDialog1.FontStrikethru Text1.FontUnderline = CommonDialog1.FontUnderline Case 2
CommonDialog1.ShowColor
Text1.ForeColor = CommonDialog1.Color
End Select
End Sub
Private Sub addshuju()
Dim a As String
a = InputBox("请输入文件名", "输入文件名", "备忘") frmmain.Data1.RecordSource = "beiwang"
frmmain.Data1.Refresh
If a = frmmain.Data1.Recordset.Fields("文件名") Then
MsgBox "文件已存在是否保存", vbOKCancel + vbExclamation, "错误"
End If
With frmmain.Data1.Recordset
.AddNew
.Fields("文件名").Value = a
.Fields("文件内容").Value = Text1.Text
.Update
End With
End Sub
3.6查找窗体代码
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Form_Load()
Data1.DatabaseName = dizhi & "shuju.mdb"
Combo1.AddItem ("按姓名")
Combo1.AddItem ("按关系")
Combo1.AddItem ("按电话号码")
Combo1.AddItem ("按qq")
Combo1.AddItem ("按地址")
End Sub
Private Sub Command1_Click()
Dim a As String
Data1.RecordSource = "select * from lianxiren " & a Data1.Refresh
If Text1.Text <> "" Then
If Combo1.Text = "按姓名" Then
a = "where 姓名='" & Text1.Text & "'"
ElseIf Combo1.Text = "按关系" Then
a = "where 关系='" & Text1.Text & "'"
ElseIf Combo1.Text = "按电话号码" Then
a = "where 电话号码='" & Text1.Text & "'" ElseIf Combo1.Text = "按qq" Then
a = "where qq='" & Text1.Text & "'"
ElseIf Combo1.Text = "按地址" Then
a = "where 地址='" & Text1.Text & "'"
End If
Else
a = ""
End If
End Sub
3.7标准模块代码
Option Explicit
Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal
lpFileName As String) As Long
'在win.ini初始化文件指定小节内设置一个字符串。ipszsection 指定要在其中写入新字符串的小节名称。
'ipszkeyname 要设置的项名或条目名,字符串不区分大小写。用vbnullstring可删除这个小节的所有设置项。
'ipszstring 指定为这个项写入的字符串值,用vbnullstring表示删除这个项现有的字符串。
'返回值 非0为成功 0为失败
Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal
lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
'函数在win.ini初始化文件指定小节内设置一个字符串。
'ipapplicationname要写入的新字符串的小节名称,字符串不区分大小写。
'ipkeyname要设置的项目名,不区分大小写。
'ipstring指定为这个项写入的字符串值。用vbnullstring表示删除这个项现有的字符。
'ipfilename初始化文件哦名字,如果没有指定完整的路径,系统会自动在windows目录下查找文件,如果没有找到系统会自动创建
Declare Function LockWindowUpdate Lib "user32" (ByVal
hwndLock As Long) As Long
'锁定制定窗口,并禁止更新,同一时刻只能有一个窗体处于锁定状态。
'hwndlock 要锁定窗口的句柄。如设置为0,则对窗口解锁
'返回值:返回值为long 如调用函数成功,则返回非0值,否则为0
'windows会跟踪锁定窗口区域,并会在窗口解锁后重画他们。可用getdcex函数获得这一特殊的设备声景,使其与锁定窗口协同工作,从而绘制一个加锁的窗口
Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
'shellexecute函数:查找与制定相关程序的文件名
'hwnd 制定一个窗口的句柄,有时候windows程序有必要在创建自己的主窗口前显示一个消息框
'ipoperation 制定字符串"open"来打开ipfile文档,或指定
"print"来打印它
'ipfile 想用关联程序打印或打开一个程序名或文件名
'ippatameters 如果ipszfile是可执行文件,则这个字符串包括传递给执行程序的参数
'ipkirectory 使用的完整路径
'nshowsmd 定义了如何显示启动程序的常数值
Public dizhi As String
Public Datashuju As Database
Public ziliebiao As Recordset
Public Const DBNAME = "shuju.mdb"
Public Const ININAME = "shuju.ini"
Sub Main()
If App.PrevInstance Then Exit Sub 'App对象是通过关键字App访问的全局对象。它指定如下信息:应用程序的标题、版本信息、可执行文件和帮助文件的路径及名称以及是否运行前一个应用程序的示例。返回一个值,该值指示是否已经有前一个应用程序实例在运行。
dizhi = App.Path '返回或设置当前路径。在设计时是不可用的。对于App对象,在运行时是只读的。
If Right(dizhi, 1) <> "\" Then dizhi = dizhi & "\"
denglu.Show
End Sub
'从 .ini 文件中读数据
Public Function ReadIni(strApp As String, strKey As String,
Optional strDefault As String) As String
Dim strResult As String * 30
Dim lngSize As Long
lngSize = GetPrivateProfileString(strApp, strKey, strDefault,
strResult, 30, dizhi & ININAME)
'GetPrivateProfileString(byval ipapplicationname as String查找条目小节名称 ,byval ipkeyname as String获取的条目名 ,byval ipdefault
as String条目未找到默认值 ,byval ipreturnedstring as String指定字符串缓冲区 ,byval nsize as Long装载到缓冲区的最大字符量 ,byval ipfilename as String初始化文件名 )为初始化文件中指定的条目取得字符串
ReadIni = Left(strResult, lngSize) '确定
End Function
第四章 系统实现
4.1主窗体功能的实现
主窗口使用viewtree与dbgrid显示数据库内容,通过数据库的链接显示相应内容,通过设置节点的点击事件改变dbgrid与数据库表的链接情况,主窗口中的添加与修改菜单在点击的情况下调用其他窗体,同时改变其他窗体的部分属性,删除菜单通过删除数据库中相应条目并同时更新viewtree与dbgrid的显示,浏览网页选项可控制打开浏览器打开相应网页,单击查找可调用查找窗口,具体方法在上述代码中已经表示,在此不再赘述。
4.2其他窗口的实现
通过显示与保存更新数据库内容从而实现数据维护功能,从而使用户能够方便快捷的使用本软件。文本编辑器包括剪切、复制、粘贴、
全选等基本功能,并通过文字计数器可及时了解备忘中字数,当字数超过数据库所存最大容量时,给予提示。
第五章 总结
5.1总结
经过课程设计后我总结了一些学习方法,学到了一些知识,以下是我对此次实习的总结
对学习者知识的要求:
首先,学习程序设计要有一定的逻辑思维能力,逻辑思维需要长时间的锻炼,如果你觉得自己在逻辑思维能力上有不足,也没有关系,因为编写程序本身也是对逻辑思维的锻炼,初学程序设计应具备的逻辑基础可以从高中数学中学到。
其次,学习程序设计要具备一定的数学基础,计算机与数学有很大的联系,综观计算机历史,计算机的数学模型(图灵机,由Alan Turing提出)和体系结构(由John Von Neuman提出)等都是由数学家提出的。因此,要学习好计算机就要有一定的数学基础,不过对于初学者来说,在数学基础方面的要求并不是很高,从我个人的角度来看,有高中数学水平就差不多了。
学习程序设计基本要求:
熟悉Visual Basic操作环境与设计工具,能设计应用程序界面。
掌握,理解面向对象程序设计基本概念。
理解、运用数据库的连接,及调用 。
掌握数据库对数据的管理。
掌握VB语言的基础知识,程序设计的方法。
能阅读一般难的程序;
能应用编写一些简单程序;
具有用Visual Basic开发Windows环境下应用程序的能力和阅读分析一般难度的VB程序的能力。
Visual Basic 简介
Visual Basic 是Microsoft 公司开发的Windows 应用程序开发工具,Visual ——"可视化的",是一种开发图形户界面(GUI)的方法,使得非计算机专业的人也可以开发出专业的Windows软件。
Visual Basic继承了BASIC语言简单易学的优点,又增加了许多新的功能,它采用面向对象与事件驱动的程序设计思想,使编程变得更加方便、快捷,使用Visual Basic既可以开发个人或小组使用的小型工具,又可以开发多媒体软件,数据库应用程序,网络应用程序等大型软件,是国内外最流行的程序设计语言之一。
英文Visual的意思是"视觉的","可视的Baisc"这个名字可能抽象了点,但实际上它却是最直观的编程方法,之所以叫做"可视",你
只要看到VB的界面就会明白,实际上你无需编程,就可以完成许多步骤。
在VB中入了控件的概念,在Windows中控件的身影无处不在,如按钮、文本框等。VB把这些控件模式化,并且每个控件都有若干属性用来控制控件的外观,工作方法,能够响应用户操作(事件)。
这样你就可以象在画板上一样,随意点几下鼠标,一个按钮就完成了。这些在以前的编程语言下是要经过相当复杂的工作的。
Visual Basic 特点
1、具有面向对象的可视化设计工具
2、事件驱动的编程机制
3、结构化的程序设计语言
4、提供了易学易用的应用程序集成开发环境
5、支持多种数据库系统的访问
6、高度可移植化的代码
7、VB6.0在开发环境上,网络功能等的大大增强。
可视化设计:Visual Basic为用户提供大量的界面元素(在Visual Basic中称为控件对象),例如 "窗体"、"菜单"、"命令按钮"、"工具按钮"、"检查框"等等。用户只需要利用鼠标,键盘把这些控件对象拖动
到适当的位置,设置它们的大小,形状,属性等,就可以设计出所需的应用程序界面。
事件驱动编程:Windows操作系统出现以来,图形化的用户界面和多任务多进程的应用程序要求程序设计不能是单一性的,在使用Visual Basic设计应用程序时,必须首先确定应用程序如何同用户进行交互。(例如发生鼠标单击,键盘输入等事件时,用户必须编写代码控制这些事件的响应方法)这就是所谓的事件驱动编程。
程序设计方法概述
1、初期的程序设计
高运行效率,少占用内存为目标
2、结构化程序设计
程序的可读性,可维护性为目标
程序=算法+数据结构+计算机语言+面向过程的程序设计方法
3、面向对象的程序设计(OOP)
降低程序的复杂性,提高软件的开法效率和改善工作界面为目标 程序=对象+消息+面向对象的程序设计
面向对象的程序设计具有如下的优点:
1、符合人们习惯的思维方法,便于分解大型的复杂多变的问题。由于对象对应于现实世界中的实体,因而可以很自然地按照现实世界中处理实体的方法来处理对象,软件开发者可以很方便地与问题提出者进行沟通和交流。
2、易于软件的维护和功能的增减,对象的封装性及对象之间的松散组合,都给软件的修改和维护带来了方便。
3、可重用性好。重复使用一个类(类是对象的定义,对象是类的实例化),可以比较方便地构造出软件系统,加上继承的方式,极大地提高了软件开发的效率。
4、与可视化技术相结合,改善了工作界面。随着基于图形界面操作系统的流行,面向对象的程序设计方法也将深入人心,它与可视化技术相结合,使人机界面进入GUI时代。
如何学好VB
(1)养成良好的学习习惯
VB程序设计的入门学习并不难,但却是一个十分重要的过程,因为程序设计思想就在这时形成的,良好的程序设计习惯也在这个阶段养成。
(2)学习程序设计要注重理解一些重要的概念。
VB程序设计本身并不复杂。翻开一本程序设计学习的书籍。看到的无非就是变量、函数、条件语句、循环语句等概念,但要真正能进行程序设计,需要深入理解这些概念。因此,在程序入门阶段还是应该重视概念的学习。
(3)自己动手编写程序
程序设计入门阶段要经常自己动手编写程序,亲自动手进行程序设计是创造性思维应用的体现,是培养逻辑思维的好方法。因此一定要多动手编写程序,而且要从小程序开发开始,逐渐提高开发程序的规模。
(4)阅读。借签别人设计的好程序
多看别人设计好的程序代码,包括教材上的例题程序。在读懂别人程序后,要想他为什么这么设计,能不能将程序修改完成更多的功能,则可以学到别人优秀的东西,帮助自己提高自身水平。
(5) VB程序设计学习的重点
重点放在思路、算法、编程构思和程序实现上。
语句只是表达工具,要求堂上积极思考,尽量当堂学懂,并做到灵活应用。
学会利用计算机编程手段分析问题和解决问题。
(6)养成良好的编程习惯
强调可读性,变量要加注释;
程序构思要有说明;
学会如何调试程序;
对运行结果要做正确与否的分析。
学好VB程序设计的具体要求:
(1)课前预习,认真听课并作适当做笔记,课后要认真复习消化所学内容,完成作业。
(2)多写程序,注重实践
程序设计课是高强度的脑力劳动,不是听会的,也不是看会的,而是练会的。
只有自己动手,编写一些程序,才会有成就感,进而对课程产生兴趣,学起来才比较从容;只有当你在编写大量程序之后,才能获得真知灼见,感到运用自如。
动手能力的培养是这门课和以往课程最大的不同之处。
(3)上机调试程序应注意的几点:
上机前应认真把实验题在用纸上做一做(包括窗体界面设计;事件代码的编写等)
每次上机后应总结,把没有搞清楚的问题记录下来,请教老师或同学。
平时应多抽课余时间多上机调试程序。注意系统的提示信息,遇到问题,多问几个为什么。 、
(4)保持良好的学习心态
要有自信、自强、积极主动学习。
克服畏难情绪,树立学好程序设计的信心。
5.2不足之处
由于一定的时间原因:备忘录文本编辑功能不够完备,备忘与数据库更新不能过同步,数据树列表在新增过程中出现部分问题,上述问题没能完好解决。其他部分没有明显不足之处。
参考文献
1. 《Visual Basic 6.0程序设计》, 王学军,中国铁道出版社
2.《Visual Basic 6.0函数参考大全》,明日科技,人民邮电出版社