Ares 代码心得1

 

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都运行的软件上,很有借鉴意义。

ARES_GLOBAL_MUTEX_NAME : =  STR_ARES_GLBMTX  +  GetUsrName;

  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官方站点带的免费编译工具.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值