Delphi练习之简单实现记事本功能
2021-05-19 08:31
我们双击”另存为“选项或者双击 OnClick事件(两者是一样的,效果都是程序运行时,单击该选项是做出相应反应);
或者
我们完成该操作时,会在Unit内自动生成框架代码,然后我们进行完善(我直接贴图吧,代码我也不知道咋调颜色);
我声明了三个局部变量,其中两个Integer类型的变量(I用来存储文件名长度,J用于for计数和数组索引功能),一个Char型数组(该数组4个长度,是用来存储文件名后4个字符的);
这里用了with..do句型,因为begin和end之间的很多method是属于SaveDialog1的,例如FileName其实是SaveDialog1.FileName,利用with句型就是声明SaveDialog1的作用域,避免写的繁复。
在SaveDialog1.Execute()之前先对SaveDialog1.FileName赋值,即在弹出保存窗口前就要赋一个默认的名字,否则什么都不会显示,如图;
mmo1.Lines.SaveToFile(FileName,TEncoding.UTF-8); |
然后我们看打开窗口语句和保存操作之间的赋值、循环和if语句,我调用了ExtractFileName()这个函数处理FileName,使返还的是文本名字的字符串,而不包含路径(关于这个函数我看了帮助文档,但失望的是,并没有进行解释,而我选择用这个函数是因为其他前辈的博客中用到了这个,我就试了试,行得通,唉,RAD真的很让人失望);
当然,这里需要注意的就是SaveToFile()这个Method是个重载函数,可以只写第一个参数,不过可能会编码格式不统一,造成乱码的情况。
I := Length(ExtractFileName(FileName)); |
然后调用 Length()返还该字符串的长度值存储在局部变量I中;接着用了一个for循环语句,将文本名字的后4位字符复制到数组s中;通过判断名字的后4位是否为“.txt”,来决定是否添加后缀名。
ok,现在我来解释为什么要怎么做以及需要注意的事项。因为在保存窗口弹出来以后,我们可以选择是否使用默认名称,也可以选择重新命名;当我们重新命名时,一般都是写个名字,而不会主动去添加后缀“.txt”,可是这样会造成保存的文档是没有后缀名的,我们肯定不想这样,所以才会有语句“ FileName := FileName + ‘.txt‘; ”,但是这样又会有一个问题,就是它会给所有的名称后都加上后缀,如果我们重新命名时主动键入了后缀,那保存的文本就会有两个后缀了,这也是我们不想要的;所以我选择添加一个判断,当没有主动写后缀或者写的后缀不是“.txt”时给文件名后面添加后缀(当然,这里主动键入的后缀是不区分大小写的,例如主动键入了“.Txt”,也是符合的,是不会再被添加“.txt”后缀的,因为“.TXT”、“.tXt”、“txT”等后缀都是被识别为文本文档的)。
这里主要有两点需要注意:1)字符串后直接跟中括号,中括号内的数字为字符串内元素的索引,索引值是从1开始的,而不是从0开始;例如,S := ‘abcdef’ ,则S[1]是 a ,S[6]是 f ;(之所以可以不像C语言那样,我想是因为,如果C语言中数组索引从1开始时,那数组的声明方式和末尾字符的表达方式是混淆的,而Pascal中数组的声明方式和C语言不同);2)if语句中的判断条件,可以看到,我用了4次判断,而这实际上只需要把判断条件写一起,判断一次就行了,可是Pascal语言好像并不支持这种多个判断条件的操作(我也不太懂是为啥,如果你知道详细情况请务必告诉我 ,一次写一个判断条件实在是有点扯淡)。
然后下一句,
cFileName := ExtractFileName(FileName); Caption := Format(‘%s - %s‘,[cFileName,sSuffix]); |
使用cFileName这个字符串变量(变量就是盒子)来存储文件名字符串,然后Caption引用该变量,因为我需要将主窗体的标题修改成保存的文件的文件名,就是下图所示区域:
这里我使用了Format()函数(它也是个重载函数,第三个参数好像是跟线程安全相关的,我们暂时不考虑),该函数会将第二个参数中的字符串或者数字以第一个参数的格式重新组合并且将组合后的字符串返回,也就是说此时 Caption 为 cFileName – sSuffix 字符串;
最后一句;
WhetherSaved := True; |
这个变量表示文件是否被保存过一次,是个全局变量,菜单中的”保存“选项需要用它作为判断条件,下面会用到;
上一篇:C#学生管理系统/学习