用VB实现象Windows记事本的一些功能

2016-02-19 21:46 55 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享用VB实现象Windows记事本的一些功能吧。

【 tulaoshi.com - 编程语言 】

内容:讨论如何在用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:VBFILENEWTextbox控件用法举例.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:games6dooldtucomheartStory001.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.SelStart0ThenText1.SelStart=0
  Search=InputBox("请输入要查找的字词:")
  sFind=FindMyStr(Text1,Search)
  
  3.继续查找[就简单了]:
  
  DimsFindAsString
  sFind=FindMyStr(Text1,Search)
  
  这样,搜索功能就基本具备了,如再提供向上查找功能,则更令人满意。
  
  以上是笔者在学习、探索中的一些体会,在PWin98、VB中文企业版6.0下调试成功。如有不妥当之处,敬请各位高手斧正!->

来源:https://www.tulaoshi.com/n/20160219/1627127.html

延伸阅读
乐云记事怎么置顶记事本?   有些记事要时刻记住很特殊?对于这些记事小伙伴们可以置顶,这样不管什么时候大家记事本都会出现在最上面,那么怎么置顶记事本呢?现在小编就教大家乐云记事怎么置顶记事本。 打开乐云记事,点击长按要置顶的记事,然后点击上方的即可。
/****************************************************************/ /* @(#)busyworkBook.java 1.0.0 2004-06-04 */ /* */ /* Email: pqdb123@yahoo.com.cn */ /* */ /* Copyright (c) 2004-2006 by ZhangYunFeng All Rights Reserved. */ /****************************************************************/ //导入awt包,event包 import...
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace DbInMo {      /// summary      /// Form1 的摘要说明。  &n...
在大学作毕业设计的课题是编制一个教学软件,所以很自然地和VB这种易学、易懂、界面友好漂亮的语言打上了交道。在编写的过程中当然遇到了许多的问题,这里将一些简单的小程序写下来与喜爱编程的朋友们分享。 一、封面 封面的设计是这样的,先出现一窗体,上面为你喜欢的图案。然后出现一艘从左向右行驶着的船。屏幕上方从两侧分别移动出...
标签: 电脑入门
    记事本可谓小巧玲珑,体积小,占用内存小,当然还有容量小,正因为小,所以打开速度可是超快,与word等老牛拉车式的软件相比,使用记事本一定让你感受到是叫休憩速度。今天拿出来和大家分享的是关于记事本使用时的一些小技巧,希望对大家今后使用有所帮助。 1、 让记事本自动记录上次打开的时间 方法:在记事本的第一行...

经验教程

194

收藏

19
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部