Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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 使用DWScript创建宏_Delphi_Macros_Dwscript - Fatal编程技术网

Delphi 使用DWScript创建宏

Delphi 使用DWScript创建宏,delphi,macros,dwscript,Delphi,Macros,Dwscript,我从报纸上读到这一段 有没有一种方法可以像人们在excel中定义Macor(使用VBscript)一样,在DWScript中定义宏(而不是这些函数),用一种简单的方法,脚本的名称就是以后要使用的函数的名称,而不必在执行的脚本中添加{$Include XXX} 注意:我知道这可以通过管理要保存在某个文件中的书面脚本来实现,该文件名为functions,用于ex。然后将添加的函数与其要使用的名称一起保存(Add),然后用户将编写Add(1,2)以获得结果;但是我的老板希望它看起来像excel中的vb

我从报纸上读到这一段

有没有一种方法可以像人们在excel中定义Macor(使用VBscript)一样,在DWScript中定义宏(而不是这些函数),用一种简单的方法,脚本的名称就是以后要使用的函数的名称,而不必在执行的脚本中添加
{$Include XXX}


注意:我知道这可以通过管理要保存在某个文件中的书面脚本来实现,该文件名为functions,用于ex。然后将添加的函数与其要使用的名称一起保存(Add),然后用户将编写Add(1,2)以获得结果;但是我的老板希望它看起来像excel中的vbscript。

我不确定是否理解这个问题,所以我将列出各种可能的解释的各种答案

  • 如果要声明脚本引擎隐式支持的函数而不必“{$include}”或“使用”它们,可以通过TdwsUnit组件声明它们,并将其附加到脚本组件。如果您没有设置“coexplications”选项,它们将自动可用,并且您可以在IDE中获得设计时支持

  • 如果要添加内部函数(始终存在),请使用RegisterInternalFunction重载之一,您可以检查任何“dwsxxxFunctions.pas”单元以获取示例。这可能更有效,但也更麻烦

  • 如果您想在源代码中预处理自定义源代码级宏(ala C的宏),可以使用过滤器功能(查看HTML或JS过滤器作为如何实现过滤器的示例)

  • 如果您希望对“未知”名称做出动态反应,以便可以当场声明它们或将它们动态绑定到某个对象,则可以使用TdwsLanguageExtension.FindUnknownName,这就是RTTI环境f.i.的工作方式(请参阅dwsRTTIConnector中的TRTTIEnvironment)

  • 如果您想以完全自定义的方式解析完全自定义的代码区域,那么也可以使用语言扩展,重写ReadInstr并检查asmLib&JSLibModule如何支持“asm”


    • 我不确定是否理解这个问题,因此我将列出各种可能解释的各种答案

      • 如果要声明脚本引擎隐式支持的函数而不必“{$include}”或“使用”它们,可以通过TdwsUnit组件声明它们,并将其附加到脚本组件。如果您没有设置“coexplications”选项,它们将自动可用,并且您可以在IDE中获得设计时支持

      • 如果要添加内部函数(始终存在),请使用RegisterInternalFunction重载之一,您可以检查任何“dwsxxxFunctions.pas”单元以获取示例。这可能更有效,但也更麻烦

      • 如果您想在源代码中预处理自定义源代码级宏(ala C的宏),可以使用过滤器功能(查看HTML或JS过滤器作为如何实现过滤器的示例)

      • 如果您希望对“未知”名称做出动态反应,以便可以当场声明它们或将它们动态绑定到某个对象,则可以使用TdwsLanguageExtension.FindUnknownName,这就是RTTI环境f.i.的工作方式(请参阅dwsRTTIConnector中的TRTTIEnvironment)

      • 如果您想以完全自定义的方式解析完全自定义的代码区域,那么也可以使用语言扩展,重写ReadInstr并检查asmLib&JSLibModule如何支持“asm”


      我看不出Office宏与上述宏之间有任何相似之处。据我所知,这是不可能的,但嘿,你已经找到了源代码,看看它是如何完成的,修改它以满足你的需要。@Dorin,谢谢,我喜欢有代码……我看不出Office宏和上面概述的宏之间有任何相似之处。据我所知,这是不可能的,但是,嘿,你有了源代码,看看它是如何完成的,修改它以满足你的需要。@Dorin,谢谢,我喜欢有代码……我需要的代码是“未知名称”,可以动态使用。我会检查RTT连接器并尽快回复。谢谢Eric。我需要的是“未知姓名”来动态处理。我会检查RTT连接器并尽快回复。谢谢你,埃里克。
      Changes since the last SVN update are:
        Added support for FreePascal-like compile-time $INCLUDE “macros”:
          %FILE% and %LINE% insert the current filename and line number into the source
          %FUNCTION% inserts the current function name, or class.method name into the source
          %DATE% and %TIME% allow inserting the compile date/time