英文原版请参见http://blogs.law.harvard.edu/tech/rss RSS是 Really Simple Syndication的缩写(对rss2.0而言,是这三个词的缩写,对rss1.0而言则是RDF Site Summary的缩写,1.0与2.0走的是两个体系)
RSS 基于XML,所有的 RSS 必须遵循w3c网站上公布的XML 1.0 规范。
在一个RSS文档中,根元素是<rss>,带有一个必备属性version,用以指明该文档遵循的rss规范,如果rss文档遵循本规范,则version值必须是2.0。
<rss>元素只有一个子元素,包含关于频道的一些信息。频道(channel)是整个blog,项(item)指一篇文章或日志(也有称这为post)。
RSS2.0元素channel的子元素列表
元素(Element)
描述(Description)
值域
重要性
举例(Example)
title
频道名称
必备
GoUpstate.com News Headlines
link
频道的URL
必备
http://www.goupstate.com/
Description
频道的描述
必备
The latest news from GoUpstate.com, a Spartanburg Herald-Journal Web site.
language
频道文章所用语言,
可用netscape或w3c推荐的列表
可选
en-us
copyright
频道内容的版权说明
可选
Copyright 2002, Spartanburg Herald-Journal
managingEditor
责任编辑的email
可选
geo@herald.com (George Matesky)
webMaster
负责频道技术事务的网站管理员email
可选
betty@herald.com (Betty Guernsey)
pubDate
频道内容发布日期,格式遵循RFC822格式(年份可为2们或4位)
可选
Sat, 07 Sep 2002 00:00:01 GMT
lastBuildDate
频道内容最后的修改日期
可选
Sat, 07 Sep 2002 09:42:31 GMT
category
指定频道所属的一个或几个类别
可选
<category>Newspapers</category>
generator
生成该频道的程序名
可选
MightyInHouse Content System v2.3
docs
指向该RSS文件所用格式说明的URL
可选
http://blogs.law.harvard.edu/tech/rss
cloud
Allows processes to register with a cloud to be notified of updates to the channel, implementing a lightweight publish-subscribe protocol for RSS feeds. More info here.
可选
<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/>
ttl
有效期,用以指明该频道可被缓存的最长时间
分钟为单位
可选
<ttl>60</ttl>
image
指定一个 GIF或JPEG或PNG图片,用以与频道一起显示
可选
rating
这个频道的分级(主要指成人、限制、儿童等)
可选
textInput
指定一个text输入框供用户输入,具体信息及功能未定。
可选
skipHours
提示新闻聚合器,那些小时时段它可以跳过。
可选
skipDays
提示新闻聚合器,那些天它可以跳过。
可选
RSS2.0元素channel的子元素image的子元素列表
元素(Element)
描述(Description)
值域
重要性
举例(Example)
url
图片的url
必备
title
图片的标题,用于http的alt属性
必备
link
网站的url(实际中常以频道的url代替)
必备
width
图片的宽度(象素为单位)
最大144,默认88
可选
height
图片的高度(象素为单位)
最大400,默认31
可选
description
用于link的title属性
可选
RSS2.0元素channel的子元素cloud的子元素列表
元素(Element)
描述(Description)
值域
重要性
举例(Example)
domain
Cloud程序所在机器的域名或IP地址
radio.xmlstoragesystem.com
port
访问clound程序所通过的端口
80
path
程序所在路径(不一定是真实路径)
/RPC2
registerProcedure
注册的可提供的服务或过程
xmlStorageSystem.rssPleaseNotify
protocol
协议
xml-rpc, soap , http-post 之一
xml-rpc
RSS2.0元素channel的子元素textInput的子元素列表
元素(Element)
描述(Description)
值域
重要性
举例(Example)
title
Submit按钮的标签
必备
description
解释text输入区
必备
name
Text area对象的名字
必备
link
处理提交的请求的cgi程序
必备
Recently in Program Category
6.在Eclipse中使用CVS
版本控制在团队开发中是必不可少的。CVS是优秀的开源版本控制软件,Eclipse本身就内置了对CVS的支持,只需简单配置,即可使用CVS。
首先我们要正确安装并配置好CVS服务器,通常Linux Server都自带CVS服务,不过命令行操作比较繁琐。Windows下也有简单易用的CVS服务器,这里我们推荐CVSNT,可以下载CVSNT

然后切换到Repositories面板,添加一个Repository,命名为/cvs-java,CVSNT会提示是否初始化这个Repository,选择是:
然后在Advanced面板上选中“Pretend to be a Unix CVS version”:
然后,在Windows账户中为每一个开发人员添加用户名和口令。
现在,CVSNT的安装配置已经完成,下一步,启动Eclipse,我们可以使用原有的Hello工程,或者新建一个Project,然后选择菜单Window->Show View->Other,打开CVS->CVS Repositories:

然后点击按钮
,添加一个Repository:

注意用户名和口令直接填Windows的用户名和口令,然后选中“Validate Connection on Finish”,点击Finish完成:
首先,我们要将一个现有的工程放到CVS服务器中,切换到Package Explorer,选中Hello工程,右键点击,选择Team->Share Project…:

使用刚才我们添加的Repository,继续,并将所有文件都添加到CVS中,最后Eclipse提示Commit:

填入一个简单的注释,确定,然后Eclipse会把整个工程提交到CVS服务器,可以在Package Explorer中看到图标发生了变化,Hello.java文件后面会有版本号1.1。在CVS Repositories面板中刷新,可以看到刚添加进来的工程:

在团队开发中,当创建了一个基本的工程并提交到CVS后,别的开发人员首先要Check Out这个工程到各自的本地计算机上,这里为了演示,首先我们在Package Explorer中删除Hello工程,然后打开CVS Repositories(如果没有看到Repository就按照上面的方法添加Repository),选择Hello工程,右键点击,选择Check Out As…:

作为一个Project签出,就可以在Package Explorer中看到签出的工程。
当对某些源文件作了修改后,需要提交更改到CVS服务器。选中更改的文件或工程,右键点击,选择Team->Commit…:

然后填入简单的注释,就可以提交到CVS服务器上了,可以看到源文件的版本号变成了1.2。
以上简单介绍了如何搭建CVS服务器以及在Eclipse中如何使用CVS,可以参考CVS手册以便了解Branch、Merge等更多功能的使用。
5. 在Eclipse中使用Ant
Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率。如果你现在还没有开始使用Ant,那就要赶快开始学习使用,使自己的开发水平上一个新台阶。
Eclipse中已经集成了Ant,我们可以直接在Eclipse中运行Ant。
以前面建立的Hello工程为例,创建以下目录结构:

新建一个build.xml,放在工程根目录下。build.xml定义了Ant要执行的批处理命令。虽然Ant也可以使用其它文件名,但是遵循标准能更使开发更规范,同时易于与别人交流。
通常,src存放Java源文件,classes存放编译后的class文件,lib存放编译和运行用到的所有jar文件,web存放JSP等web文件,dist存放打包后的jar文件,doc存放API文档。
然后在根目录下创建build.xml文件,输入以下内容:
<?xml version="1.0"?>
<project name="Hello world" default="doc">
<!-- properies -->
<property name="src.dir" value="src" />
<property name="report.dir" value="report" />
<property name="classes.dir" value="classes" />
<property name="lib.dir" value="lib" />
<property name="dist.dir" value="dist" />
<property name="doc.dir" value="doc"/>
<!-- 定义classpath -->
<path id="master-classpath">
<fileset file="${lib.dir}/*.jar" />
<pathelement path="${classes.dir}"/>
</path>
<!-- 初始化任务 -->
<target name="init">
</target>
<!-- 编译 -->
<target name="compile" depends="init" description="compile the source files">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" target="1.4">
<classpath refid="master-classpath"/>
</javac>
</target>
<!-- 测试 -->
<target name="test" depends="compile" description="run junit test">
<mkdir dir="${report.dir}"/>
<junit printsummary="on"
haltonfailure="false"
failureproperty="tests.failed"
showoutput="true">
<classpath refid="master-classpath" />
<formatter type="plain"/>
<batchtest todir="${report.dir}">
<fileset dir="${classes.dir}">
<include name="**/*Test.*"/>
</fileset>
</batchtest>
</junit>
<fail if="tests.failed">
***********************************************************
**** One or more tests failed! Check the output ... ****
***********************************************************
</fail>
</target>
<!-- 打包成jar -->
<target name="pack" depends="test" description="make .jar file">
<mkdir dir="${dist.dir}" />
<jar destfile="${dist.dir}/hello.jar" basedir="${classes.dir}">
<exclude name="**/*Test.*" />
<exclude name="**/Test*.*" />
</jar>
</target>
<!-- 输出api文档 -->
<target name="doc" depends="pack" description="create api doc">
<mkdir dir="${doc.dir}" />
<javadoc destdir="${doc.dir}"
author="true"
version="true"
use="true"
windowtitle="Test API">
<packageset dir="${src.dir}" defaultexcludes="yes">
<include name="example/**" />
</packageset>
<doctitle><![CDATA[<h1>Hello, test</h1>]]></doctitle>
<bottom><![CDATA[<i>All Rights Reserved.</i>]]></bottom>
<tag name="todo" scope="all" description="To do:" />
</javadoc>
</target>
</project>
以上xml依次定义了init(初始化),compile(编译),test(测试),doc(生成文档),pack(打包)任务,可以作为模板。
选中Hello工程,然后选择“Project”,“Properties”,“Builders”,“New…”,选择“Ant Build”:

填入Name:Ant_Builder;Buildfile:build.xml;Base Directory:${workspace_loc:/Hello}(按“Browse Workspace”选择工程根目录),由于用到了junit.jar包,搜索Eclipse目录,找到junit.jar,把它复制到Hello/lib目录下,并添加到Ant的Classpath中:

然后在Builder面板中钩上Ant_Build,去掉Java Builder:

再次编译,即可在控制台看到Ant的输出:
Buildfile: F:\eclipse-projects\Hello\build.xml
init:
compile:
[mkdir] Created dir: F:\eclipse-projects\Hello\classes
[javac] Compiling 2 source files to F:\eclipse-projects\Hello\classes
test:
[mkdir] Created dir: F:\eclipse-projects\Hello\report
[junit] Running example.HelloTest
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.02 sec
pack:
[mkdir] Created dir: F:\eclipse-projects\Hello\dist
[jar] Building jar: F:\eclipse-projects\Hello\dist\hello.jar
doc:
[mkdir] Created dir: F:\eclipse-projects\Hello\doc
[javadoc] Generating Javadoc
[javadoc] Javadoc execution
[javadoc] Loading source files for package example...
[javadoc] Constructing Javadoc information...
[javadoc] Standard Doclet version 1.4.2_04
[javadoc] Building tree for all the packages and classes...
[javadoc] Building index for all the packages and classes...
[javadoc] Building index for all classes...
[javadoc] Generating F:\eclipse-projects\Hello\doc\stylesheet.css...
[javadoc] Note: Custom tags that could override future standard tags: @todo. To avoid potential overrides, use at least one period character (.) in custom tag names.
[javadoc] Note: Custom tags that were not seen: @todo
BUILD SUCCESSFUL
Total time: 11 seconds
Ant依次执行初始化,编译,测试,打包,生成API文档一系列任务,极大地提高了开发效率。将来开发J2EE项目时,还可加入部署等任务。并且,即使脱离了Eclipse环境,只要正确安装了Ant,配置好环境变量ANT_HOME=<Ant解压目录>,Path=…;%ANT_HOME%\bin,在命令行提示符下切换到Hello目录,简单地键入ant即可。
4. 在Eclipse中使用JUnit
测试对于保证软件开发质量有着非常重要的作用,单元测试更是必不可少,JUnit是一个非常强大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试任务自动化。Eclipse同样集成了JUnit,可以非常方便地编写TestCase。
我们创建一个Java工程,添加一个example.Hello类,首先我们给Hello类添加一个abs()方法,作用是返回绝对值:
下一步,我们准备对这个方法进行测试,确保功能正常。选中Hello.java,右键点击,选择New->JUnit Test Case:
Eclipse会询问是否添加junit.jar包,确定后新建一个HelloTest类,用来测试Hello类。
选中setUp()和tearDown(),然后点击“Next”:
选择要测试的方法,我们选中abs(int)方法,完成后在HelloTest.java中输入:
JUnit会以以下顺序执行测试:(大致的代码)
try {
HelloTest test = new HelloTest(); // 建立测试类实例
test.setUp(); // 初始化测试环境
test.testAbs(); // 测试某个方法
test.tearDown(); // 清理资源
}
catch…
setUp()是建立测试环境,这里创建一个Hello类的实例;tearDown()用于清理资源,如释放打开的文件等等。以test开头的方法被认为是测试方法,JUnit会依次执行testXxx()方法。在testAbs()方法中,我们对abs()的测试分别选择正数,负数和0,如果方法返回值与期待结果相同,则assertEquals不会产生异常。
如果有多个testXxx方法,JUnit会创建多个XxxTest实例,每次运行一个testXxx方法,setUp()和tearDown()会在testXxx前后被调用,因此,不要在一个testA()中依赖testB()。
直接运行Run->Run As->JUnit Test,就可以看到JUnit测试结果:
绿色表示测试通过,只要有1个测试未通过,就会显示红色并列出未通过测试的方法。可以试图改变abs()的代码,故意返回错误的结果(比如return n+1;),然后再运行JUnit就会报告错误。
如果没有JUnit面板,选择Window->Show View->Other,打开JUnit的View:
JUnit通过单元测试,能在开发阶段就找出许多Bug,并且,多个Test Case可以组合成Test Suite,让整个测试自动完成,尤其适合于XP方法。每增加一个小的新功能或者对代码进行了小的修改,就立刻运行一遍Test Suite,确保新增和修改的代码不会破坏原有的功能,大大增强软件的可维护性,避免代码逐渐“腐烂”。
Eclipse是一款非常优秀的开源IDE,非常适合Java开发,由于支持插件技术,受到了越来越多的开发者的欢迎。最新的Eclipse 3.0不但界面作了很大的增强,而且增加了代码折叠等众多优秀功能,速度也有明显的提升。配合众多令人眼花缭乱的插件,完全可以满足从企业级Java应用到手机终端Java游戏的开发。本文将带您手把手步入Eclipse的广阔天地,详细介绍在Eclipse下如何开发普通Java程序,Web应用,J2EE应用,手机Java程序,以及如何进行单元测试,重构,配置CVS等详细内容。
我的开发环境是JDK1.4.2+Eclipse3.0+Windows XP SP2,如果你在其他平台上遇到任何问题,欢迎来信交流。
1. 安装JDK1.4
Eclipse是一个基于Java平台的开发环境,它本身也要运行在Java虚拟机上,还要使用JDK的编译器,因此我们必须首先安装JDK。JDK1.4是目前最稳定的版本,同时也是Eclipse运行的必须条件。先从SUN的官方站点http://java.sun.com下载JDK1.4 Windows版,目前最新的是1.4.2_06,然后运行j2sdk-1_4_2_06-windows-i586-p.exe安装,你可以自行设定安装目录,我把它安装到D:\software\j2sdk1.4目录下。
接下来要配置环境变量,以便Java程序能找到已安装的JDK和其他配置信息。右键点击“我的电脑”,选择“属性”,在弹出的对话框中选择“高级”,“环境变量”,就可以看到环境变量对话框:
上面是用户变量,只对当前用户有效,下面是系统变量,对所有用户都有效。如果你希望所有用户都能使用,就在系统变量下点击“新建”,填入:
JAVA_HOME是JDK的安装目录,许多依赖JDK的开发环境都靠它来定位JDK,所以必须保证正确无误。
下一步,找到系统变量Path,点击“编辑”,在最后添上JDK的可执行文件的所在目录,即%JAVA_HOME%\bin,我的对应目录便是D:\software\j2sdk1.4\bin,附加到Path中即可,注意要以分号“;”隔开:
注意:如果系统安装了多个Java虚拟机(比如安装了Oracle 9i就有自带的JDK1.3),必须把JDK1.4的路径放在其他JVM的前面,否则Eclipse启动将报错。
最后一个系统变量是CLASSPATH,Java虚拟机会根据CLASSPATH的设定来搜索class文件所在目录,但这不是必需的,可以在运行Java程序时指定CLASSPATH,比如在Eclipse中运行写好的Java程序时,它会自动设定CLASSPATH,但是为了在控制台能方便地运行Java程序,我建议最好还是设置一个CLASSPATH,把它的值设为“.”,注意是一个点“.”代表当前目录。用惯了Windows的用户可能会以为Java虚拟机在搜索时会搜索当前目录,其实不会,这是UNIX中的习惯,出于安全考虑。许多初学Java的朋友兴匆匆地照着书上写好了Hello,world程序,一运行却弹出java.lang.NoClassDefFoundError,其实就是没有设置好CLASSPATH,只要添加一个当前目录“.”就可以了。
2. 安装Eclipse 3.0
配置好JDK后,下一步便是安装Eclipse 3.0,可以从Eclipse的官方站点http://www.eclipse.org上下载,你会看到如下版本:
● Eclipse SDK
● RCP Runtime Binary
● RCP SDK
● Platform Runtime Binary
● Platform SDK
● JDT Runtime Binary
Eclipse SDK包括了Eclipse开发环境,Java开发环境,Plug-in开发环境,所有源代码和文档,如果你需要所有的功能,可以下载这个版本。
如果你和我一样,只是用Eclipse开发Java应用,而不是开发Eclipse插件或者研究Eclipse代码,那么下载一个Platform Runtime Binary再加上JDT Runtime Binary是最好的选择。
下载eclipse-platform-3.0-win32.zip和eclipse-JDT-3.0.zip后,将它们解压到同一个目录,勿需安装,直接找到目录下的eclipse.exe运行,出现启动画面:
稍等片刻,Eclipse界面就出来了。
如果遇到错误,启动失败,可以检查Eclipse目录下的log文件,我曾经遇到过XmlParser异常,仔细检查发现原来Path中还有一个Oracle的Java1.3版本的虚拟机,将它从Path中去掉后Eclipse启动正常。
3. 第一个Java程序
运行Eclipse,选择菜单“File”,“New”,“Project”,新建一个Java Project,我把它命名为HelloWorld,然后新建一个Java Class:
我把它命名为HelloWorld,并且填上Package为example,钩上“public static void main(String[] args)”,点击“Finish”,Eclipse自动生成了代码框架,我们只需在main方法中填入:
默认设置下,Eclipse会自动在后台编译,我们只需保存,然后选择“Run”,“Run As”,“Java Application”,即可在Eclipse的控制台看到输出。
要调试Java程序也非常简单,Run菜单里包含了标准的调试命令,可以非常方便地在IDE环境下调试应用程序。
1.4版本支持:
选择菜单“Window”,“Preferences”,在对话框中找到“Java”,“Compiler”,“Compliance and Classfiles”,将编译选项改成1.4,就可以使用JDK1.4版的assert(断言)语法,使得测试更加方便:
Eclipse使用技巧
1.在源代码中快速跳转
eclipse中的跳转甚至比VS.Net还方便,方法是按住Ctrl键,然后鼠标指向变量名,方法名,类名,就会出现链接,点击就可跳到定义处。
2.实时语法检查
编辑区右侧如果有红色小方块,直接点击就可跳到有错的行;黄色小方块是警告,可以忽略,但最好检查一下;如果某个函数尚未完成,要提醒自己注意怎么办?加上注释// TODO,右侧就会有蓝色小方块,提示你此处尚未完成。当一个源码的右侧没有任何提示时,说明这个文件已经完成了。
3.自动生成getter/setter方法
只需要申明protected,private类成员变量,然后在Package Explore中找到该类,右键点击,选择“Source”“Generate Getters and Setters”。
4.更改类名/变量名
如果涉及到多处修改,不要直接在源码中更改,在Package Explore中找到要改名的类或变量,右键点击,选择“Refactor”“Rename”,eclipse会自动搜索所有相关代码并替换,确保不会遗漏或改错。
注:我用的版本是Eclipse 3.0
如何编写测试代码肯定是开发人员最头疼的。JUnit是一个非常强大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试任务自动化。
本文简单介绍如何在eclipse中使用JUnit创建一个TestCase来测试一个简单的类。
我们写一个要测试的类Simple如下:
package jexi.test;
public class Simple {
private int n;
public Simple(int n) {
this.n = n;
}
// 返回绝对值:
public int foo() {
return n>0 ? n : (-n);
}
}
foo()方法返回绝对值,下一步,我们准备用JUnit对这个foo()方法进行全面测试。
首先,在eclipse中,创建一个java工程,把plugins\org.junit_3.8.1\junit.jar包含进去:
然后写好Simple.java,为它创建一个JUnit Test Case:

在弹出的对话框中填入测试类的名字:SimpleTest,勾上setUp():

编写测试代码:
package jexi.test;
import junit.framework.TestCase;
public class SimpleTest extends TestCase {
private Simple s1, s2;
protected void setUp() throws Exception {
super.setUp();
s1 = new Simple(10);
s2 = new Simple(-7);
}
public void testFoo() {
assertTrue(s1.foo()==10);
assertTrue(s2.foo()==7);
}
}
其中setUp()方法是构造初始化环境,我们在setUp中创建两个Simple的实例,testFoo()是用来测试foo()的测试方法,总是以test+方法名构成,然后在测试方法中测试:s1.foo()==10,如果返回值与期待的结果10相等,assertTrue()就执行成功,我们现在可以运行Run->Run As...->JUnit Test,左侧会显示测试结果:

如果我们把Simple的foo()方法改成:
public int foo() {
return n;
}
再次运行JUnit Test,现在assertTrue(s2.foo()==7);测试结果就不正确了,JUnit会报告哪一行结果不正确:

双击就可以快速定位到测试失败的方法调用上。
总结:
JUnit功能非常强大,是代码质量的可靠保证。精心设计的TestCase可以反复使用,将来对某个类进行了更改,只需要运行一遍TestCase就知道改动对客户端有无影响。若干个TestCase还可以组合成TestSuit,结合Ant使得编译,测试,运行整个过程自动化,只需要查看测试结果就可以知道哪些代码出了问题。
所有 ODBC 数据源名都存放在 Windows 注册表下的:HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources(系统 DSN)和 HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources(用户DSN)键值中。
Word的“文件”菜单最下面列出了最近使用过的文件名及路径,文件名及路径会随着用户的使用不断地发生变化,这符合统计学中“最近使用”最大可能是“经常使用”的原则,方便了用户,提高了效率。它的实现方法有很多,我举一例,供大家参考。
一、在工作目录下创建一个LastFile.ini文件,其中第一行为历史文件的总数,以下行是历史文件的全路径。当然您也可以使用数据表存储,那样编程时也许更方便一些。
LastFile.ini文件内容如:4
"D:\程序实例\slzj\slzj源代码\2004.11.18水利造价\示例.mdb"
"C:\WINDOWS\Desktop\111\111.mdb"
"D:\程序实例\slzj\slzj源代码\2004.11.18水利造价\示例.mdb"
"D:\程序实例\slzj\slzj源代码\2004.11.3\2004.11.3\2004.11.3\2004.11.3\示例(审查).mdb"
二、在Form_Load中编写如下代码,达到在文件菜单中显示历史文件的效果
'**************显示以往打开的文件记录***************************
'对配置文件不存在的情况下,作出操作。
If Dir(App.Path & "\lastfile.ini") = "" Then
Open App.Path & "\lastfile.ini" For Output As #1
Write #1, 0
Close #1
End If
'打开lastfile.ini文件
Open App.Path & "\lastfile.ini" For Input As #1
Dim strLastfile2 As String
'获取历史文件的数目
Line Input #1, strLastfile2
iMaxLastfile = Int(strLastfile2)
Dim i As Integer
'添加历史文件到ActiveBar菜单,先在ActiveBar中预设4各Command和一个分割线。并把他们的Visible=False
For i = 1 To iMaxLastfile
Line Input #1, strLastfile2
strLastfile(i - 1) = Mid(strLastfile2, 2, Len(strLastfile2) - 2)‘去引号
AABar.Bands("MenuFile").Tools.item(i + 10).Caption = strLastfile(i - 1)
AABar.Bands("MenuFile").Tools.item(i + 10).Visible = True
Next
'关闭文件
Close #1
'设置分隔条
If iMaxLastfile <> 0 Then
AABar.Bands("MenuFile").Tools.item(15).Visible = True
End If
三、在Form_Unload中添加如下代码,将打开文件记录写入配置文件。
Open App.Path & "\LastFile.ini" For Output As #1
Dim i As Integer
Write #1, iMaxLastfile‘写入历史文件总数
For i = 0 To iMaxLastfile - 1
Write #1, strLastfile(i)‘写入历史文件路径
Next
Close #1
四、在需要更新菜单中文件历史记录的地方使用下面函数(如:打开一个文件,新建并打开一个文件等)
Private Sub UpdateLastFile(ByVal strPath As String)
On Error GoTo SaveErr:
Dim strDuan As String
strDuan = strPath
'判断要添加的文件是否时列表中的第一个文件
If strDuan <> AABar.Bands("MenuFile").Tools.item(11).Caption Then
'将列表中的文件依次下移一位,空出第一位
Dim i As Integer
For i = 3 To 1 Step -1
strLastfile(i) = strLastfile(i - 1)
AABar.Bands("MenuFile").Tools.item(11 + i).Caption = AABar.Bands("MenuFile").Tools.item(10 + i).Caption
Next
'将头一位设置为当前操作的文件路径
strLastfile(0) = strDuan
AABar.Bands("MenuFile").Tools.item(11).Caption = strDuan
'如果列表文件数小于最大文件数则加一
If iMaxLastfile < 4 Then
iMaxLastfile = iMaxLastfile + 1
End If
'设置新移动的列表项可见
AABar.Bands("MenuFile").Tools.item(iMaxLastfile + 10).Visible = True
End If
'如果列表不为空则下方的分隔条可见
If iMaxLastfile <> 0 Then
AABar.Bands("MenuFile").Tools.item(15).Visible = True
Else
AABar.Bands("MenuFile").Tools.item(15).Visible = False
End If
Exit Sub
SaveErr:
dbEncrypt.SaveError "MDIForm1-UpdateLastFile"
End Sub
五、单击文件历史记录时调用如下函数。
Private Sub MenuLastfile(ByVal strName As String, Index As Integer)
On Error GoTo SaveErr:
'如果文件已不存在则提示
If Dir(strName) = "" Then
MsgBox "文件不存在,请确认后再次打开!", vbOKOnly + vbInformation, "打开文件"
Exit Sub
End If
'设置当前打开文件为列表中的选择文件
strConnection = strName
'**************重新设置历史文件列表顺序*****************
Dim i As Integer
For i = Index To 12 Step –1 '把列表中选择文件的位置之上的文件依次下移
strLastfile(i - 11) = strLastfile(i - 12)
AABar.Bands("MenuFile").Tools.item(i).Caption= AABar.Bands("MenuFile").Tools.item(i - 1).Caption
Next
strLastfile(0) = strName
'将选择的文件的放在列表中的首位
AABar.Bands("MenuFile").Tools.item(11).Caption = strConnection
CloseWnd‘自定义过程,用于关闭系统中打开的除MDI窗口外的所有窗口
strConnection = strName
Me.Caption = "水利造价管理系统" & "-" & strConnection
ShowMenu
Exit Sub
SaveErr:
dbEncrypt.SaveError "MDIForm1-MenuLastFile"
End Sub
Private Sub CloseWnd()
On Error GoTo SaveErr:
Dim i As Integer
For i = Forms.count - 1 To 1 Step -1
If Forms(i).Name <> "FrmDaoHang1" And Forms(i).Name <> "FrmDaoHang2" And Forms(i).Name <> "FrmToolSearch" Then
Unload Forms(i) '关闭到倒数第二个窗体
End If
Next
Exit Sub
SaveErr:
dbEncrypt.SaveError "MDIForm1-CloseWnd"
End Sub
'压缩文件函数,dataS为源文件,dataz为目标文件,传出为一个布尔值
Private Function DataZip(ByVal Datas As String, ByVal Dataz As String) As Boolean
On Error GoTo Compact_Error
Dim JRO As JRO.JetEngine
Set JRO = New JRO.JetEngine
Dim fso As New FileSystemObject
If fso.FileExists(Dataz) = True Then
If MsgBox("此压缩文件已存在是否将其覆盖?", vbYesNo + vbQuestion, "压缩工程数据文件") = vbYes Then
Kill Dataz
Else
Exit Function
End If
End If
'压缩工程文件
JRO.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Datas, _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Dataz & ";Jet OLEDB:Engine Type=5"
DataZip = True
MsgBox "工程数据压缩成功!", vbInformation + vbOKOnly, "压缩数据文件"
Exit Function
Compact_Error:
DataZip = False
If Err.Number = -2147467259 Then
MsgBox "数据压缩失败!(可能你的数据库正被其他程序使用,请将重新运行系统!)", vbOKOnly + vbInformation, "错误"
Exit Function
End If
dbEncrypt.SaveError "MDIForm1-DataZip"
End Function
'解压缩函数,datas未压缩文件,dataz为已压缩文件
Private Function Zipext(ByVal Dataz As String, ByVal Datas As String) As Boolean
On Error GoTo Compact_Error
Dim JRO As JRO.JetEngine
Set JRO = New JRO.JetEngine
Dim fso As New FileSystemObject
If fso.FileExists(Datas) = True Then
If MsgBox("此工程文件已存在是否将其覆盖?", vbYesNo + vbQuestion, "解压缩工程数据文件") = vbYes Then
Kill Datas
Else
Exit Function
End If
End If
'解压缩工程文件
JRO.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Dataz, _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Datas & ";Jet OLEDB:Engine Type=5"
Zipext = True
MsgBox "工程数据解压缩成功!", vbOKOnly + vbInformation, "解压缩数据文件"
Exit Function
Compact_Error:
Zipext = False
If Err.Number = -2147467259 Then
MsgBox "数据压缩失败!(可能你的数据库正被其他程序使用,请将重新运行系统!)", vbOKOnly + vbInformation, "错误"
Exit Function
End If
dbEncrypt.SaveError "MDIForm1-DataZip"
End Function
