
VB谈WINDOWS记事簿本作用技术性[二]
2020-12-31
內容:探讨怎样再用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\oldtu\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下降试取得成功。若有不当之处当的地方,烦请诸位大神指正!
扫描二维码分享到微信