请大家帮忙注释代码~~

shitianj 2004-09-08 11:35:29
{$I Compilers.Inc}

uses Dialogs, Forms, Classes, SysUtils,
{$ifdef DELPHI_4}
DsgnIntf,
{$endif DELPHI_4}

{$ifdef DELPHI_5}
DsgnIntf,
{$endif DELPHI_5}

{$ifdef DELPHI_6}
DesignIntf,DesignEditors,
{$endif DELPHI_6}

{$ifdef DELPHI_7}
DesignIntf,DesignEditors,
{$endif DELPHI_7}

{$ifdef CPPB_5}
DsgnIntf,
{$endif CPPB_5}

{$ifdef CPPB_6}
DesignIntf,DesignEditors,
{$endif CPPB_6}
...全文
140 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
shitianj 2004-09-08
  • 打赏
  • 举报
回复
能不能再详细一点儿说说{$I ...}表示什么意思??
{$ifdef ...}
...
{$endif ...}
又是什么含意??
谢谢!
iBear 2004-09-08
  • 打赏
  • 举报
回复
这些都是预编译指令,和C/C++类似,只不过没有宏替换

由于delphi不用版本在source上的一些改变,因此如果要编写一个在不同的delphi下都可以使用的组件,一般都要使用这些玩意来控制否则就会出现“XXX.dcu找不到”编译错误了
linzhengqun 2004-09-08
  • 打赏
  • 举报
回复
这是判断Delphi的版本的编译器指令

组件,属性编辑器
shitianj 2004-09-08
  • 打赏
  • 举报
回复
{$I ...}
表示什么意思??
{$ifdef ...}
...
{$endif ...}
是什么做含意??
谢谢!
shitianj 2004-09-08
  • 打赏
  • 举报
回复
这是个资源文件,怎么打开?好像不能打开吧?
  • 打赏
  • 举报
回复
Compilers.Inc的信息才重要呢,呵呵,你再看看
shitianj 2004-09-08
  • 打赏
  • 举报
回复
这些是在interface与implementation之间的代码~
是学习的~~
请大家帮忙
myling 2004-09-08
  • 打赏
  • 举报
回复
晕,晚了一步:(

结贴了:(
myling 2004-09-08
  • 打赏
  • 举报
回复
呵呵,好久没贴了,今天贴一个:)

=========================================================出自超级猛料

关于Delphi中的条件编译

Delphi支持类似于C++中条件编译的概念。其方法也很简单。不过,因为使用频率相对较少的缘故,有些人对它还是不太熟悉,而且Delphi和C++在条件编译的语法上也有一点小的差别,所以有必要简单提一下。

最简单的形式类似这样:

{$IFDEF DEBUG}

ShowMessage(‘Display a Debug Message!’);

{$ENDIF}

  在Delphi 6中,支持IFDEF的一个增强的形式:IF。IF不仅可以测试符号定义,而且允许测试常量(包括常量表达式,如SizeOf,Pred,Succ等),而且能够测试组合条件。下面是一个例子:

const

DebugControl = 3;

{IF Defined(DEBUG) and (DebugControl>=3)}

ShowMessage( ‘High Debug Level!’);

{$IFEND}

  熟悉C++的朋友应该注意,测试结束部分有两种形式,分别是ENDIF和IFEND,它们分别用于对应IFDEF(也包括IFNDEF)和IF,不可以混用,否则将得到一个出错信息,这是Object Pascal和C++的一个不同点。

更复杂一些的形式如下:

{$IFDEF ...}

...

{$ELSEIF ...}

...

{$ELSE}

...

{$IFEND}

  条件编译在Delphi 6中变得相对比较重要,因为Delphi 6分别支持VCL和CLX这两个不同的库。因而在VCL中和其他一些地方,你能够看到类似这样的语句:

{$IF Defined(CLX)}

...

{$IFEND}

Delphi中预定义了一些条件编译符号。下面列出其中比较重要的一些:

1.VER140

  这个定义暗示Delphi 6.0在Borland Pascal产品家族中的真正版本号是14.0。在Delphi 5中则定义了VER130。应用如下:

{$IFDEF VER140}

ShowMessage('Is Delphi 6!')

{$ENDIF}

{$IFDEF VER130}

ShowMessage('Is Delphi 5!')

{$ENDIF}

2.MSWINDOWS / LINUX / WIN32

  前面两个定义显然是为跨平台编程而准备的。至于WIN32,你也可以把它当作MSWINDOWS来用;不过,实际上它是为Delphi 1.0/2.0的兼容性而保留的,除非你有这两个版本的应用程序需要维护,否则一般不应该再使用它。当然了,在将来的64位平台上,还会出现WIN64的定义;如果你是个很前卫的程序员,你甚至可以现在就编写这样的代码:

{$IFDEF WIN64}

...

{$ENDIF}

这样做也并不是毫无意义的,因为Delphi目前对Int64类型已经提供了不错的支持。

3.CONSOLE

指示这是一个控制台(Console)应用程序。

4.BCB

如果需要在C++Builder中编译.Pas文件,某些情况下可能需要它。

5.ConditionalExpressions

在Delphi 5和以前版本中不支持$IF。不过,用下面这种方式,不论在Delphi 5还是Delphi 6中都可以毫无问题地通过编译:

{$IFDEF ConditionalExpressions}

{$IF Defined(Debug)}

ShowMessage('Debug!');

{$IFEND}

{$ENDIF}

《Mastering Delphi 6》的作者给了我们两条忠告:

  1.条件编译很有用,只要使用得当,它能够为程序提供相当的灵活性。但是,应该只在确实需要用它们的时候才用;否则,很容易让代码变得难于阅读,并且可能给调试器造成麻烦。

  2.当你改变了某些定义,编译器并不一定总是能够正确的区分哪些代码需要重新编译。如果你改变了这些定义后,程序的运行情况变得有点奇怪,那么请选择Build All。

  Delphi 6中引入了一个新的指示字(directive):platform。因为Delphi 6支持跨平台编程,但是,当你需要编写一些特定于平台的代码的时候,最好用platform来声明。

下面是例子:

var

WinInteger : integer=3000 platform;

procedure Test;platform;

begin

Beep;

end;

type

WinClass=class

x : integer;

end platform;

  其中class声明中platform出现的位置似乎有点奇怪,没关系,知道就行了,反正我们一般不太会用得到它(但是真有需要的时候,你也得有所了解才行)。如果你一定要寻根究底的话,《Mastering Delphi 6》的作者对此有一个简要的解释:

The position of semicolons for hint directives can be quite confusing at first. The rule is that a hint directive must appear before the semicolon following the symbol it modifies. But a proce-dure, function, or unit header declaration can be followed only by reserved words, so its hint directive can appear following the semicolon. A type, variable, or constant declaration can be followed by another identifier, so the hint directive must come before the semicolon closing its declaration. Part of the rationale behind this is that the hint directives are not reserved words, so they can be used as the name of an identifier.

关于deprecated指示字

  《Mastering Delphi 6》中关于deprecated的这一段说明似乎有点古怪,文字很浅显,可是我看了三遍也没有完全搞清楚到底是在说什么。先记录在这里,以后再看好了。 The deprecated directive works in a similar way to the platform directive;the only real differences are that it is used in a different context and produces a different compiler warning.The role of deprecated is to mark dentifiers that are still part of the system for compatibility reasons,but either are going to be removed in the future or expose you to risks of incompatibility.This symbol is used sparingly in the Delphi library.

  Delphi 6中另外一个相当有用的关键字是$MESSAGE。你可以用它来提醒你程序中任何值得注意的地方,比如说下面的例子:

{$MESSAGE ‘这里尚未完成,记住下次要改完!’}

  当然,用To-do List也可以完成类似的工作,而且To-do List在功能上更完善一些;不过,$MESSAGE比 To-do List优越的一个地方是,编译器每次编译程序的时候都会提醒你,所以不容易忘记;相对而言,不是每个程序员都会去经常察看To-do List。

  $MESSAGE也类似于Visual C++中的#pragma message。不过,在Delphi 6的Message窗口双击该行信息,就能够跳到源文件中相应定义的地方,而这一点在Visual C++中却办不到。
shitianj 2004-09-08
  • 打赏
  • 举报
回复
谢谢~
明白了
ly_liuyang 2004-09-08
  • 打赏
  • 举报
回复
条件编译
ifdef和endif是配套使用,elseif是可选

ifdef 条件
为真的时候编译
elseif
为假的时候编译
endif

看Help就明白的了
shitianj 2004-09-08
  • 打赏
  • 举报
回复
谢谢~!!我明白了~!
后面两个ifdef和endif呢?
RamjetZhang 2004-09-08
  • 打赏
  • 举报
回复
{$I Compilers.Inc}
有点类似#include Compiler.Inc,但是是直接将文件原封不动塞进代码中;
e.g.
MessageBox(handle, PChar({$I d:\f.txt}), '$i demo', MB_OK or MB_ICONINFORMATION);

//f.txt's content; 'Hello, mars!'
shitianj 2004-09-08
  • 打赏
  • 举报
回复
iBear(大熊 不要怀疑我的温柔) 谢谢~!

但还是不太明白~~
iBear 2004-09-08
  • 打赏
  • 举报
回复
这个和代码中的if语句类似

ifdef判断是否定义了一个标记,结果预处理后,符合条件的文本就留在source中了,比如如果当前用的delphi7,那么结果处理的source应该如下:

{$I Compilers.Inc}

uses Dialogs, Forms, Classes, SysUtils,
DesignIntf,DesignEditors, << DELPHI_7
......

其它的都被忽略了
shitianj 2004-09-08
  • 打赏
  • 举报
回复
请知道的朋友帮一下~~

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧