电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 网络编程 -> Perl教程
用vb实现象windows记事本的一些功能_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
内容:讨论如何在用VB编写的记事中实现自动将日志添加到文档尾部、判断保存还是另存为、确认文件是否需要保存等功能。

Windows自带的记事本即Notepad有一些功能还是颇具吸引力的,比如自动在特定的文档尾部加入计算机时钟的时间和日期,截取已经打开或者保存了的纯文档名[见记事本的标题栏]以及搜索等,给用户带来许多方便。本文就TextBox控件讨论如何实现这些功能。

一、将日志添加到文档

在Windows中,如果文档的第一行最左边有".LOG"字样,那么每次用记事本打开此文时,记事本会自动在文档尾部加入时间日期。
".LOG"共占四个字节,又置于文档第一行顶格处,因此可以用VB的Left函数来读取这个字符串,如有,则用CStr函数来自动添加时间和日期。
我们可以在打开文件的程序加入以下代码:

DimaAsString
a=Left(Text1.Text,4)取得头4个字节
Ifa=".LOG"Then若有则:
Text1.SelStart=Len(Text1.Text)光标移到文件尾
Text1.SelText=vbCrLf&CStr(Now)加入换行和时间
Else若无,退出过程
ExitSub
EndIf

这样,我们用VB编写的记事本就和Windows的Notepad一样具有自动将日志添加到文档的功能了。

二、截取FileName中的纯文档名

如若我们用Notepad打开文件D:\VBFILE\NEW\Textbox控件用法举例.txt,Notepad的标题栏的Caption变为:TextBox控件用法举例-记事本。这个,我们用VB来完成还是比较容易的。

为了方便在程序的各处使用,我们不妨编写一个截取字符串的函数:

截取纯文栏名函数
FunctionGetFileTitle(OldStrAsString)AsString

OnErrorResumeNext
DimnAsInteger,mAsInteger声明字符串变量
DimiAsString,rAsString
DimpAsInteger
i="\"要查找的指定字符
Forn=1ToLen(OldStr)用Len函数计算已知字符串的字节数
m=InStrRev(OldStr,i,-1)"\"所在的位置(其中的-1是默认的)
Nextn找下去!

截取最后一个"\"后面的字符串
r=Right(OldStr,Len(OldStr)-m)获取Title
p=InStrRev(r,".",-1)"."所在位置
GetFileTitle=Left(r,p-1)去掉后缀

EndFunction

现在我们来调用这个函数以获取纯文档名:

DimMyStrAsString,ResultAsString
MyStr="d:\games\6do\oldtucom\heart\Story001.TXT"
Result=GetFileTitle(MyStr)
Me.Caption=Result&"-记事本"

执行之,则窗体的标题变为:Story001-记事本,与NotePad的效果无异!

三、判断保存还是另存为

通常,我们通过使用CommonDialog控件来保存文件,不过,VB的公共对话框提供的ShowSave其实只是SaveAs,如不作处理则在运行程序中每次保存文件都会跳出另存为对话框,为避免这种不便,我们可以声明一个窗体级或模块级的文件名变量[类型:String],并在每一次相关操作中给此变量赋值且保存于内存之中,然后在保存文件时给予识别,如变量不为空则直接保存文件,否则调出另存为对话框,让用户输入文件名。
试看:

DimSaveFileNameAsString窗体或模块级变量

在打开文件事件加入:
SaveFileName=CommonDialog1.FileName

保存文件
IfSaveFileName<>""Then
OpenSaveFileNameForInputAs#1
Print#1,Text1.Text
Close#1
Else
此处写上用公共对话框保存文件的代码
EndIf

这样,我们的记事本变得象Notepad一样聪明了:那令人讨厌的另存为对话框不会总是弹出来了!

四、从“我的电脑”拖动文件并打开

当从“我的电脑”拖动文件到Notepad编辑界面,文件格式正确的话则自动打开。在VB中,我们可以这样处理:

1.在Form_Load事件中加入:

Text1.OLEDropMode=1令Text1成为可接受文件拖放的OLE容器

2.采用OLE技术实现拖放并打开功能:

当文件拖到文本框
PrivateSubText1_OLEDragOver(dataAsDataObject,effectAsLong,_
ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle,_
StateAsInteger)
Ifdata.GetFormat(vbCFFiles)Then如是文件则显示可放下图标
effect=vbDropEffectCopyAndeffect
Else否则显示不可放下图标
effect=vbDropEffectNone
EndIf
EndSub

当文件被放下
PrivateSubText1_OLEDragDrop(dataAsDataObject,effectAsLong,_
ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

DimsFileName$AsString放下的文件名变量
检查放下的东西是不是文件名
Ifdata.GetFormat(vbCFFiles)=TrueThen如是则sFileName=data.Files(1)只读取第一个文件信息
OnErrorResumeNext出错处理:不予理睬
在TextBox中打开文件
OpensFileNameForInputAs#1
IfmnuComb(0).CheckedThenText1.Text=Text1.Text&StrConv(InputB$_
(LOF(1),1),vbUnicode):MyLen=Len(Text1.Text)
IfmnuComb(1).CheckedThenText1.Text=StrConv(InputB$(LOF(1),1),_
vbUnicode):MyLen=Len(Text1.Text)
Close#1
EndIf
EndSub

注意:可要记得写出错处理代码,否则……你知道的。

五、确认文件是否需要保存

从当前状态退出程序或转移到其它状态如新建文件、打开文件等,如若当前文件已经改变而用户又没有保存,应该提醒用户要不要保存已做的改变。这一点Notepad是有的,在VB中该怎么办呢?
我们可以声明一个布尔变量,用来记录文本框是否有了改变,并利用TextBox控件的Change事件来监视文本框的状态,若有变化,则改变变量值。

1.模块或窗体级声明:

DimAskAsBoolean

2.在Form_Load中:

Ask=False初值

3.在Text1_Change中加入:

Ask=True

4.退出程序或转移到新的状态时:

IfAsk=Truethen
DimFlagAsInteger,MsgStrAsString
MsgStr="文件已经改变,是否要存盘?"提示语
Flag=MsgBox(MsgStr,vbYesNoCancel,"提示")给予提示
IfFlag=vbYesThenSaveIt选择了确定则保存之:这里假定已有了一个保存文件的子过程SaveIt
IfFlag=vbCancelThenExitSub
IfFlag=vbNoThenCancel=False
EndIf
......这里写上其它主要处理事件代码
Ask=False操作结束令其为假,以免老提示

六、搜索功能

Notepad提供了查找和继续查找字符串的功能。VB中,控件TextBox并不象RichTextBox控件那样提供了Find方法。这样我们只好求助于VB的一些内部函数了。以下是笔者自行编写的一个专用于TextBox控件中查找字符串的函数,函数中用上了VB的InStr等内部函数,这里就不多作解释了。

查找字符串函数[可置于模块或窗体级中]
FunctionFindMyStr(MyNameAsTextBox,SearchStrAsString)AsInteger
DimWhere获取需要查找的字符串变量
DimStartAsInteger
MyName.SetFocus文本框获得焦点,以显示所找到的内容
Start=MyName.SelStart MyName.SelLength 1
Where=InStr(Start,MyName.Text,SearchStr)在文本中查找字符串
IfWhereThen
若找到则设置选定的起始位置并使找到的字符串高亮
FindStr=Where-1
MyName.SelStart=Where-1
MyName.SelLength=Len(SearchStr)
否则给出提示
Else:MsgBox"未找到所要查找的字符串。",vbInformation,"提示"
EndIf
EndFunction

有了这个函数,我们可以这样查找和继续查找字符串:

1.在窗体级声明:

DimSearchAsString声明要查找的变量

2.第一次查找:

DimsFindAsString
若光标不在开头处则令其回到开头
IfText1.SelStart<>0ThenText1.SelStart=0
Search=InputBox("请输入要查找的字词:")
sFind=FindMyStr(Text1,Search)

3.继续查找[就简单了]:

DimsFindAsString
sFind=FindMyStr(Text1,Search)

这样,搜索功能就基本具备了,如再提供向上查找功能,则更令人满意。

以上是笔者在学习、探索中的一些体会,在PWin98、VB中文企业版6.0下调试成功。如有不妥当之处,敬请各位高手斧正!->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·perl常问问题集--第一篇_perl教程
·perl常规表达式(1)_perl教程
·perl语言全面编译(一)_perl教程
·perl语言全面编译(三)_perl教程
·perl语言全面编译(二)_perl教程
·各种平台下perl模块的安装方法_perl教程
·perl语言全面编译(四)_perl教程
·perldbi入门_perl教程
·有线电视宽带数据网络设计管理(上)_视频通信
·perl常问问题集--第一篇_perl教程

最新文章
·php5对mysql5的任意数据库表的管理代码示例(四)_php技巧
·用perl来分析并生成中文excel文件_perl教程
·photoshop基础教程:跟我学调色练习15-室内光效_photoshop教程
·使用perl连接mysql数据库_perl教程
·photoshop把照片打造为漫画艺术风格_photoshop教程
·photoshop绘制印度小美人_photoshop教程
·photoshop快速制作粗糙岩石纹理材质_photoshop教程
·用perl来分析并生成中文excel文件_perl教程
·photoshop特效设计-夜明珠_photoshop教程
·关于xsl中count()的使用_xsl教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号