| 网站首页 | 新闻资讯 | 网络学院 | 追逐者商城 | 认证考试 | 休闲娱乐 | 图片中心 | 下载中心 | 雁过留声 | 
您现在的位置: 追逐者 >> 网络学院 >> 程序设计 >> Visual Basic >> 正文
 图形图像   Photoshop  CorelDRAW  AutoCAD  3dsMAX   程序设计  C语言  C++  C#  DelPhi  Visal Basic  网络编程  ASP  ASP.Net  网页制作  Dreamweaver  Flash  HTML  JavaScript  VBScript  CSS  网页技术  办公软件  Word  Excel  PowerPoint  OutLook
专题栏目
  • 此栏目下没有热点文章
  • 此栏目下没有推荐文章
  • 相关文章
    广告展示
    用VB实现象Windows记事本的一些功能
              ★★
    用VB实现象Windows记事本的一些功能
    作者:佚名 文章来源:不详 点击数: 更新时间:2008-4-12 14:14:24

    内容:讨论如何在用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下调试成功。如有不妥当之处,敬请各位高手斧正!->

    文章录入:admin    责任编辑:admin 
    【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | 
    备案号:湘ICP备07502188
    Copyright© 2007 zzzhe.Com .All Rights Reserved
    本站资源 纯属收藏 若有侵犯 是属吾过 留言告知 立即处理
    |
    站长:张勇 CMS 基于 powerEasy SiteWeaver™ 模板仿制于 灯火梦幻蓝div