1、创建一个临时的定时器刷新界面,注意执行OnTimer的时候把自己free掉。
另,OnTimer传进来的Sender就是Timer自己。
2、SHFOLDER.DLL .....(外壳文件夹服务). 若要正常打开系统属性, 例如我的文档,需要保留此文件。例如Ares中利用此函数获得我的文档的地址。
3、ufrmhint:提示窗口,(最具特色的UI之一)。其中对于透明窗体的应用很是典型,MSDNd的Using Layered Windows中有基本的一些操作。
4、没有使用delphi的TStrings而是以TMyStrings代替。还没有具体分辨他们的差别。
5、SystemParametersInfo(SPI_GETWORKAREA, 0, @r, 0); r: trect;
获得主显示器的工作区域。
6、将Application的OnException、OnRestore 、OnMinimize 、OnMessage 都自己做了处理
7、几个BOOL变量的区别A Boolean variable occupies one byte of memory, a ByteBool variable also occupies one byte, a WordBool variable occupies two bytes (one word), and a LongBool variable occupies four bytes (two words).
Boolean | ByteBool, WordBool, LongBool
|
False < True Ord(False) = 0 Ord(True) = 1 Succ(False) = True Pred(True) = False | False <> True Ord(False) = 0 Ord(True) <> 0 Succ(False) = True Pred(False) = True |
8、IsMultiThread 多线程的时候加上。在BeginThread的时候会被置True。具体好处Delphi的帮助也没说,我也不知道。反正加上吧,听名字就是个该被加上的玩意。
9、使用互斥器防止程序两次运行。以前总怕程序非法退出,而导致不重新启动机器,程序没法第二次运行(对自己的程序没信心~~)。今天发现Ares也使用的互斥器,仔细查了MSDN,发现这么一句话。《The system closes the handle automatically when the process terminates. The mutex object is destroyed when its last handle has been closed》这样看来程序就是非法退出,应该互斥器也会被释放的。试验了一下,果然如此。又一次犯了想当然的错误。
下面是Ares的部分代码。。
10、 helper_diskio在处理Ansi、和Unicode的方法很典型,在编写需要在9x和NT都运行的软件上,很有借鉴意义。
hGlobalMutex : = OpenMutex(SYNCHRONIZE, FALSE, pchar(ARES_GLOBAL_MUTEX_NAME));
if (hGlobalMutex <> 0 ) then begin
end
else begin
hGlobalMutex : = CreateMutex(nil, TRUE, pchar(ARES_GLOBAL_MUTEX_NAME));
try
application.Initialize;
application.Title : = ' Ares ' ;
application.ShowMainForm : = false ;
Application.CreateForm(Tares_frmmain, ares_frmmain);
application.run;
except
end;
ReleaseMutex(hGlobalMutex);
CloseHandle(hGlobalMutex);
ARES_GLOBAL_MUTEX_NAME : = '' ;
end;
文件处理的API方面,作为入门教材也很不错
11、helper_unicode处理字符转换上很仔细,很可惜没做过这方面的软件,只能看懂个大概。
12、StrToIntdef与StrToInt的区别就是前者不报异常,好!
13、synchronize在线程里VCL,最好使用procedure Synchronize(Method: TThreadMethod);的方法。
14、helper_datetime时间的转换,有一些Unix系统与Delphi ,以及Windows时间转换函数。
15、vars_localiz本地化,对于需要适应多语言环境的程序有借鉴意义,一般软件都是这么处理的
里面有获取不同语言的API使用
16、uxpfirewall,一个打开XP防火墙端口的方法,不会有是否允许提示(不过XP也太简单了。这样就可以了?那防火墙还有啥用)
17、msnNowPlaying中有给msn发消息,使MSN显示当前播放的文件功能。
18、使用obj文件,{$L aaa.OBJ}link aaa.obj
不过需要注意的是,编译器不同,生成的OBJ文件也不一样.Microsoft的编译器生成的OBJ文件是COFF格式,而Borland的C++Builder生成的是OMF格式.因为我们需要在Delphi中链接,所以必须使用CBC,或者Borland官方站点带的免费编译工具.