Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何引用多个文件中的常量而不使用“uses”b?_Delphi - Fatal编程技术网

Delphi 如何引用多个文件中的常量而不使用“uses”b?

Delphi 如何引用多个文件中的常量而不使用“uses”b?,delphi,Delphi,我在unit uMainWindow中为广播消息定义了一些常量,例如: const UM_QUIT = WM_USER + 12; UM_PROCESS_MESSAGES = WM_USER + 13; 现在我需要更多的广播消息,但它们将被用在另一种形式上——让我们称之为uOtherWindow,而不是uMainWindow。我希望将所有广播消息放在一起,这样我就不会意外地重复使用消息编号。我不希望强制uOtherWindow和uMainWindow相互依赖,因此简单地将uMainW

我在unit uMainWindow中为广播消息定义了一些常量,例如:

const 
  UM_QUIT = WM_USER + 12;
  UM_PROCESS_MESSAGES = WM_USER + 13;
现在我需要更多的广播消息,但它们将被用在另一种形式上——让我们称之为uOtherWindow,而不是uMainWindow。我希望将所有广播消息放在一起,这样我就不会意外地重复使用消息编号。我不希望强制uOtherWindow和uMainWindow相互依赖,因此简单地将uMainWindow添加到uOtherWindow的使用列表是不可能的

我应该如何将这组常量包含到这两个类中

以下是到目前为止我提出的可行或不可行的想法:

一个新单元uConstants.pas,并将其放入两个类的uses语句中。 将它们放入一个包含文件(如broadcastconstants.inc),然后让每个类使用编译器指令{$include broadcastconstants.inc}包含该文件
如果将常量放在include文件中,那么最终将得到多个常量定义,每个$include指令一个。如果您将常量放在一个专用单元中,那么将有一个单独的声明。对于常量,这并不重要,但对于类型,这将是一个关键问题

除了这个问题,在IDE中使用单元比包含文件更容易


所以,总而言之,我建议你使用一个专门的装置

如果将常量放在include文件中,那么最终将得到多个常量定义,每个$include指令对应一个。如果您将常量放在一个专用单元中,那么将有一个单独的声明。对于常量,这并不重要,但对于类型,这将是一个关键问题

除了这个问题,在IDE中使用单元比包含文件更容易


所以,总而言之,我建议你使用一个专门的装置

去uConstants.pas!我同意你的看法。创建一个新单元,您可以将其命名为uConstants.pas,并将所有常量放在那里。然后在这两个单元的uses子句中加入uConstants。请不要广播这些消息。广播将消息发送到系统中的所有顶级窗口,包括来自其他程序的窗口。你不知道其他程序会对这些消息做出什么反应。广播时,您应该只使用RegisterWindowMessage在运行时保留的消息ID。有关详细信息,请参阅SendMessage上的文档。如果您不是在广播,而是在程序中将消息发送到windows,那么您仍然不需要担心ID重叠。程序中的每个窗体代表一个不同的类,每个窗口类都从wm_User开始获得自己的窗口消息集。您不应该将MainWindow消息发送到其他窗口,反之亦然,因此它们对给定消息ID的解释是否不同并不重要。如果你真的在向两个不同的窗口类发送相同的消息,那么你应该将它们改为基于wm_应用程序。转到uConstants.pas!我同意你的看法。创建一个新单元,您可以将其命名为uConstants.pas,并将所有常量放在那里。然后在这两个单元的uses子句中加入uConstants。请不要广播这些消息。广播将消息发送到系统中的所有顶级窗口,包括来自其他程序的窗口。你不知道其他程序会对这些消息做出什么反应。广播时,您应该只使用RegisterWindowMessage在运行时保留的消息ID。有关详细信息,请参阅SendMessage上的文档。如果您不是在广播,而是在程序中将消息发送到windows,那么您仍然不需要担心ID重叠。程序中的每个窗体代表一个不同的类,每个窗口类都从wm_User开始获得自己的窗口消息集。您不应该将MainWindow消息发送到其他窗口,反之亦然,因此它们对给定消息ID的解释是否不同并不重要。如果你真的在向两个不同的窗口类发送相同的消息,那么你应该改为基于wm_应用程序。