一个计算机爱好者的不完整回忆(二十九)ArcanBook

  去年,我闲着没事在网上搜自己的名字——Arcan,结果发现了我做的一个软件叫ArcanBook2,再搜一下ArcanBook2,发现居然还有不少人在用,还向别人推荐,这真是太让我惊讶了。
  我的惊讶不是没有理由的,因为我这个软件就没真正发布过。当年在CSDN中有一个人在Delphi版发了一个帖子,说晒晒大家自己最近写的东西,我正好刚刚写出ArcanBook2这个软件,于是就发了上去,好像只有一两个人用了并发表了两句观点,然后那个帖子就沉了。时隔10年,居然还有人用,绝对让我有一种难言的感觉,也不知道是感动还是什么。还有人在介绍的时候说作者联系不上了,一想也是,个人主页早就没了,连信箱也都没了——由此可见,找一个大点的靠谱的公司的产品是多么重要。
  ArcanBoox是一个看书软件,一共做过4个版本,VB版的ArcanBook和ArcanBook2000,Delphi版的ArcanBook和ArcanBook2。除了ArcanBook2不经意发布到网上外,剩下的都没发布过。
  我的绝大部分软件都是根据我自己需求编写的,用得年头最长的当属ArcanBook这个系列的软件。之所以做这个软件,是因为当时看《寻秦记》这本小说,大概在1999年到2000年左右我决定重新看一遍金庸的武侠小说,在看的过程中就觉得当时光盘上提供的一个叫book.exe的小软件还算挺好用,至少模拟了书的形式,采用左右翻页的方式。时至今日,我也觉得上下滚动的方式看书不太方便,特别是现在屏幕这么宽,当全屏状态下每一行的长度太长了,看到行尾后有时候会不太容易找到下一行的行首。对于book这个软件,我当时觉得有两个缺点,一个是背景相对比较刺眼,长时间看书会很累,第二个就是不能自动读取下一个文件。当时可能是由于网络速度的原因,所有的小说都被切割成很多小文件,少则几十,多则上百,《寻秦记》好像将近300个文件,刚开始的时候还好说,打开OpenDialog文件选择框按读的顺序选择诸如xqj001.txt、xqj002.txt之类的文件,但是当超过了OpenDialog一屏显示后再去选择文件就很不方便,特别是2000年左右的时候,微软的OpenDialog还没那么智能,当你要选择编号100多甚至200多的文件时你就要不断地拖动滚动条去找,或者直接输入文件名,不方便,绝对不符合我懒人的信条。所以,当我看上《寻秦记》后,我毅然决定自己做一个读书软件。
  第一个版本和第二个版本都是用VB做的,主要功能如下:
  1、首先就解决了按编号读取文件的问题,这个是我用别的读书软件遇到的最大的问题。
  2、当然界面一定是左右翻页那种模仿真书的感觉,可能有的人不喜欢,不过直到现在我仍然认为这种方式更舒服,特别是在宽屏的电脑上。
  3、支持GB码与BIG5码互相转换。
  4、支持格式调整,比如每段固定缩进两个字符而不管原文件是否有缩进等等。
  5、自动保存上次阅读的位置。
  6、支持背景颜色调整——不然眼睛难受。
  差不多主要功能就这些吧。
  2002年左右开始决定学学Delphi,我在前面的博客中说过我很喜欢在做一个项目中学习,于是决定把ArcanBook2000改成Delphi版。装好Delphi,什么都没看,直接打开,开始编程。不过第一条测试语句就出了问题,我前面也说过,我一般学做的第一个程序都是更改按钮文本为ok,但在Delphi中写上button1.caption='ok';提示我错误。后来看了一下帮助中的示例,原来要用“:=”,还真是有意思。知道了这一点,那剩下的就简单了,编程序么,无法就是几个运算符然后一堆变量,整呗。很快第一个Delphi程序就做出来了,不是完全的VB复刻版,功能要多一些。当时唯一觉得不满意的地方就是About窗口,那时候我不会显示主窗口以外的窗口,大家不要笑,刚开始用Delphi,真不会。我后面又做了字拼字和字拼图,也都是学习目的,而且也不会用子窗口,用Delphi做的第四个软件ArcanBook2才算是使用了子窗口做About窗口。
  Arcanboo2的功能也没多什么,就是在Arcanbook基础上修改了一些小的细节,与VB版的相比增加了自动识别文件的内码,自动识别是否是html文档,自动识别当前的操作系统——因为windows98和windows200以及windows XP默认行间距是不一样的,必须得根据不同的操作系统进行不同的分页计算。
  先说说转码吧,当年很多小说都是BIG5码的,所以那时候南极星之类的转码工具很流行。我做这个软件必须要支持BIG5码才行,不然就弱暴了。但是怎么转码呢?反正我是不知道哪有这个控件,于是,自己做。首先从windows文件夹下面找到gbk.txt这个文件,然后用一个转码的工具将其转换成BIG5码。当时我尝试了几个转码工具,都不能完全正确(排除那些完全无法对应的),好像“你”都给转换成了“乃”,除此外还有至少几十个错误,后来我就自己一点一点的修正,并且在使用过程中发现有转码错误的就立刻反馈到我的代码中,最后做出了一个相对比较正确的码表。转码实现的方式也比较笨拙,比如要BIG5转GB,那么读取一个汉字,然后在BIG5的字符串中搜索,找到位置后,直接用GB字符串中对应的汉字替换过去,效率应该很低,不过使用起来好像感觉不明显。如果现在做,估计会好好优化一下算法,至少不会用搜索的方式了,应该会直接根据编码来找对应汉字。
  Delphi版本中支持了自动判断文件名和编号,因为大部分文件都是类似于下面这种:xqj001.txt,xqj002.txt……只要打开一个文件后,我的软件会自动找出共有的xqj和.txt,然后会判断数字是三位固定并且顺序递增。现在再想实现这个算法应该简单的很,当时还真是动了一番脑筋,因为当时所知的Delphi函数非常少,毕竟是第一个程序么。
  还有自动判断内码功能的实现,怎么判断呢,那就先提取整篇文章的前50到100字,然后看这些字到底是在BIG5码表中的多还是在GB码表中多,哪个多就算哪种编码。不知道大家有什么好办法,整个软件由于当时刚用Delphi,很多功能的实现方式都比较土。比如书本中间的阴影效果以及边上的书页效果,如果直接用绘图的方式画出来会更好,但是当时不会,所以用的是一堆TShape控件,然后根据窗口大小摆到不同的位置。
  还有就是最关键的分页代码,当时也是花了一番功夫的,不过我现在有了更好的想法,但我不确定我现在的想法是不是真的能行,因为当年我理论上也应该能想到现在的方法,但是当时并没有采用,也许是经过尝试确实不行也有可能是受当时的技术所限无法实现,也许什么时候做ArcanBook3的时候再尝试一下。由于当时采用的是折半查找的思想,不断地尝试向富文本框中填入不同长度的字符,直到正好填充到指定的行数,所以效率上应该会有一些差。还好总体上实现出来速度还可以接受。
  其实整个ArcanBook没有任何高级的技术,毕竟是第一个用Delphi做的程序,每一个功能说穿了其实都很简单,都是用Delphi提供的最基础的功能实现的,每一个用Delphi的人都应该可以做得出来。当我决定要做一个软件的时候,心里很快就会有一个方案,每个功能应该用我现在掌握的什么技术来实现,如果无法实现,那么我应该去查阅哪方面的内容,实际上在去查找的过程中你会了解到更多的知识。所以有时候觉得现在Google、百度的流行反倒让一些人的知识积累变得更难了,有问题了直接搜索一下,直接找到了答案,然后就用了。而以前,你可能要找好几本书,好多相关的资料,找到答案后实际上你获得了远远超过你想要的知识。忽然的感受,大家不要太较真,谷歌百度还是相当好的,让人获取知识的速度和范围大幅增加。其实这也看人,有的人直接搜到答案就不思考了,有的人搜到答案也会主动扩展阅读。
  关于用Delphi的感受,下一篇会从我自己的角度来做一个Delphi和VB的对比。
  
  下面是ArcanBook2的截图,下面附了下载地址,有兴趣的可以看看俺十年前的作品——好像这十年我没什么进步,还是这个水平,呵呵。简单说一下:鼠标移动到顶部会出现工具条,鼠标在书的左右两侧点击可以翻页,直接拖动右下角的十字图标可以调整窗口大小,鼠标中键窗口最小化。

这是默认的颜色配色,以前我更喜欢用windows2000的桌面背景颜色。还用过很长一段时间的Word的蓝底白字配色方案,都还挺好的,都比较适合长时间阅读。

 

下载地址:http://arcansoft.sinaapp.com/rar/arcanbook2.rar

 

 

posted on 2012-07-06 09:31  java课程设计例子  阅读(163)  评论(0编辑  收藏  举报