ZqLib1.1库的介绍
前不久,我整理了一下我以前写程序时经常用到的一些类似与例程性质的小程序,说大也不大,但许多程序经常都要用到,所以我就抽了一点时间将其整理了一下,放在这儿并美其名曰zqLib1.1。如果好好的利用它,的确可以减少许多的程序代码,我有过这样的经历。zqLib1.1是一个只适合与BCB的程序库,我在WinXP+BCB6中调试通过的,如果你对这个库该兴趣的话,不妨试试。zqLib库主要由许多函数构成,我将其按功能分类,没有按照类的方式分,我觉得单个的函数要比类更好使用,再加上这些功能也不好形成类。
下表就是zqLib库的分类 http://www.zccfamily.com/zqget/zqLib/zqLib.asp
单元名称
函数功能
zqStrings
字符串处理相关函数,弥补AnsiString对象的不足
zqWindows
与系统相关的函数,如:重建系统图标缓存,判当前系统是否为Win98等
zqFiles
与文件名,路径处理相关的函数
zqGraphics
与图像,颜色,字体相关函数
zqRegistrys
与注册表处理相关的函数
zqVCLCtrl
VCL控件的辅助函数
zqDate
与日期相关的函数,这是以类的方式提供的
zqStrings
int countWords(AnsiString Str,AnsiString Delimiters=" ");
计算字符串Str以分隔符Delimiters分割符的单词数,如countWords(“hello,world”,”,”)函数返回2,如果不指定Delimiters分割符,则默认分割符为空格。
AnsiString getSubStr(AnsiString Str,int Start,AnsiString Delimiter=" ");
该函数的功能是取其字符串Str按分隔符Delimiters分割后的第Start个子串,如getSubStr(“I am a boy!”,1)的返回值为am,注意数字是以0作为起始数字的。
AnsiString getFileNameWithoutExt(AnsiString fileName);
C++Builder6提供了许多以Extract开头的函数,这对于处理文件名,路径非常有用,但我始终没有发现如果取得不带扩展名的文件名,所以只要自己写了一个,其实根据函数的名称就可以看出它的功能。如:getFileNameWithoutExt(“C:\\test.txt”)函数的返回值为test。
AnsiString extDoWith(AnsiString fileName,AnsiString Ext);
在保存文件时通常需要处理用户输入的文件名是否带有扩展名,如用户输入fileName=”C:\test”,如果这个文件类型为TXT的话,这样调用函数extDoWith(fileName,”txt”)的返回值为C:\test.txt。
zqWindows
void ReBuildIconCache();
根据该函数的名字大概就可以看出该函数的功能,它的功能就是重建系统图标缓存,这个有什么用啊,也许有人会问?这用处可大着呢,当你的程序改变了系统的某些设置,如:系统颜色,当可能系统还来不及更新,于是需要用户按F5键刷新,但你的程序总不至于运行后还需要用户按F5键来看结果吧,这时ReBuildIconCache()函数就会帮你的大忙.
bool isWin98();
即使微软一直在宣称“统一的Win32平台“,但我感觉感觉它始终只是口号而已,因为我很少写出一套不需要针对不同Windows版本进行更正的软件,所以我提供的函数isWin98()用来判断是否为Win98系统,因为Win98与以后的Windows系统往往有很多地方不同,需要分别处理.
void Delay(DWORD msec);
Windows程序员大都用过Sleep函数,它的功能就是延迟时间,但它却有一个缺陷,那就是一旦调用了该函数,那么程序的线程就会一直等到Sleep函数的返回,也就是说在这段时间中,程序将无法处理窗口消息,于是不会对用户的操作作出相应,但有很多时候我们需要一个这样的函数,它既能起到延迟时间的作用,又能处理窗口消息,这是Delay函数就是一个选择。
zqFiles
//文件关联
AnsiString getAssociatedExec(AnsiString fileExt,AnsiString &fileDesc,AnsiString &MIMEType);
bool setAssociatedExec(AnsiString fileExt,AnsiString filetype,AnsiString FileDesc,AnsiString MIMEType,AnsiString execName);
文件关联在程序中起着很重要的角色,有很多的程序具有辨别文件类型的能力,如Flash认识SWF类型的文件,这是如何完成的呢,setAssociatedExec函数的功能就是完成文件与相应程序的关联, getAssociatedExec这个函数的作用是取得该文件类型相关联的应用程序。
AnsiString GetSystemPath();
AnsiString GetWindowsPath();
AnsiString GetTemporaryPath();
Win32 API中有类似的函数,而我为什么还要提供这些函数呢,很简单,就是调用这些函数比调用API函数更方便,从函数的名称就应该知道它的功能了。
//处理文件名及路径
AnsiString getShortFilenName(AnsiString fileName);
AnsiString getParentPath(AnsiString Path);
AnsiString getLastDirectoryName(AnsiString Path);
//这三个函数的作用分别时获取文件名的短文件名,获取路径Path的父路径,获取路径Path的最后一个目录名
getLastDirectoryName(“hello\\world”)返回world字符串
getParentPath(“Software\\ZQGet\\Hello\\World”)返回Software\ZQGet\Hello\字符串
getShortFileName(“E:\\Resource\\程序设计\\Utility\\新建 文本文档.txt”)返回E:\Resource\程序设计\Utility\新建问~1.txt字符串,这个函数的主要目的是为了兼容8.3格式的文件名
zqGraphics
AnsiString ColorToRGBString(TColor Color);
TColor RGBStringToColor(AnsiString strRGB);
应用程序很多时候需要存贮颜色信息,将颜色信息转换为字符串进行存储就是一个不错的办法,这儿的两个函数就能满足这种需要,ColorToRGBString的作用是将TColor类型的颜色转换为红绿蓝三原色十进制的字符串表示,如:函数ColorToRGBString(clRed)返回”255 0 0”,
RGBStringToColor(“0 255 0”)返回clGreen值。
void BMPToJPEG(AnsiString bmpFile, AnsiString jpegFile);
void JPEGToBMP(AnsiString jpegFile, AnsiString bmpFile);
从它们的名字都可以看出它们的功能,BMP与JPG类型的图片进行转换.
//设置桌布墙纸
void setWallPaper(AnsiString wallPaper,int wallPaperStyle);
该函数的作用是改变桌面的墙纸,它会根据wallPaperStyle墙纸样式设置墙纸
//Font对象与字符串的转换,这样的目的便于将目前的字体属性保存起来,以后要用到该字体属性的话可以在利用StringToFont将字体字符串转化为Tfont对像在程序中使用。注意FontToString(TFont * font)函数只保存字体对象的字体名(Name),大小(Size),样式(下划线,加粗,删除线,斜体),颜色属性,其它的字体属性将无法保存。
AnsiString FontToString(TFont * font)
void StringToFont(AnsiString fontStr,TFont * font);
//字体TLogFont结构与字符串的转化
AnsiString LogFontToString(TLogFont logFont);
void StringToLogFont(AnsiString fontStr,TLogFont * logFont);
上面有了Tfont对象与字符串的转换,而在Win32的程序中我们很多时候不是用的Tfont对象而是使用的TlogFont字体结构来表示字体,如果要保存这些信息的话就可以利用这两个函数来进行相互的转换
//将鼠标指针转化为图标
HICON CursorToIcon(HCURSOR hCursor);
zqRegistrys
AnsiString getKeyValue(AnsiString RegPath,AnsiString Key,bool isAllUsers);
void setKeyValue(AnsiString RegPath,AnsiString Key, AnsiString Value,bool isAllUsers);
这两个函数获取或设置RegPath路径下Key的字符串值
DWORD getDWORD(AnsiString RegPath,AnsiString Key,bool isAllUsers);
void setDWORD(AnsiString RegPath,AnsiString Key,DWORD Dword,bool isAllUsers);
这两个函数获取或设置RegPath路径下Key的DWORD值
void readSection(AnsiString Section,TStrings* Strings,bool isAllUsers);
读取Section下所有的Key值将其存入Strings中
void deleteKey(AnsiString Section,AnsiString Key,bool isAllUsers);
删除注册表中的键值Key
void deleteSection(AnsiString regPath,bool isAllUsers);
删除注册表中的regPath指定的项
int getSubKeyNum(AnsiString RegPath,bool isAllUsers);
获取注册表中regPath项的子项目数
int getValueNum(AnsiString RegPath,bool isAllUsers);
获取注册表中某一项中的键数
zqVCLCtrl
//设置VCL控件颜色
void setCtrlColor(TControl *Ctrl,TColor Color);
设置Ctrl控件的颜色为Color
void setCtrlChildsColor(TControl *Ctrl,TColor Color);
设置Ctrl控件包含所有控件的颜色为Color值,这个函数对于设置应用程序的界面非常有用。
void setClassCtrlColor(TControl *Ctrl,TColor Color);
设置Ctrl控件下包括Ctrl控件的颜色值
//设置VCL控件Enabled属性
void setCtrlEnable(TControl *Ctrl,bool Enable);
设置Ctrl包括所有Ctrl下的所有控件的Enabled属性为Enable
void setCtrlChildsEnable(TControl *Ctrl,bool Enable);
只设置Ctrl包含的所有控件的Enabled属性为Enable
zqDate
这个文件提供了一个称作zqDate的类,你可以通过该类获取目前系统的时间,该类提供了如下方法:
int getYear(); //获取系统当前日期的年份
int getMonth();//获取系统当前日期的月份
int getDay();//获取系统当前日期的日
int getHour();//获取系统当前时间的小时
int getMinute();//获取系统当前时间的分钟
int getSecond();//获取系统当前时间的秒
int getDayOfWeek();//获取系统当前的星期
int getMiliSecond();//获取系统当前时间的毫秒数
在使用时需要引入zqDate.h头文件,下面语句获取系统当前日期的年份
//获取系统当前日期的年份
int Year=zqDate().getYear();