2012-03-13 1 views
1

я прочитал этот абзац из Delphi Tools SiteСоздание макросов с помощью DWScript

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 

Есть ли способ, мы можем определить макросы в DWScript (кроме этих функций) точно так же как люди определяют macors в Excel (с использованием VBScript) в простой способ, где имя скрипта будет именем функции, которая будет использоваться позже, без добавления {$Include XXX} в исполняемый скрипт?

N.B .: Я знаю, что это можно сделать, управляя написанным сценарием для сохранения в определенном файле с именем функции для ex. затем сохраните добавленную функцию с ее именем, которое будет использоваться (Add), затем пользователь напишет Add (1,2), чтобы получить результат; но мой босс на работе хочет, чтобы он был чем-то вроде vbscript в excel.

+1

Я не вижу никаких сходств между макросами Office и теми, которые были изложены выше. – OnTheFly

+1

из того, что я знаю, это невозможно из коробки, но эй, у тебя есть источник, посмотреть, как это делается, изменить его в соответствии с вашими потребностями. – ComputerSaysNo

+0

@Dorin, спасибо, мне нравится иметь код ... – Zeina

ответ

4

Я не уверен, чтобы понять этот вопрос, так что я буду перечислять различные ответы на различные возможные интерпретации ...

  • Если вы хотите, чтобы объявить функции, которые неявно поддерживаемых сценариев без при необходимости использовать «{$ include}» или «использовать», вы можете объявить их через компонент TdwsUnit и прикрепить его к компоненту скрипта. Если у вас нет опции «coExplicitUses», они будут доступны автоматически, и вы получите поддержку времени разработки в среде IDE.

  • Если вы хотите добавить внутренние функции (которые всегда есть), используйте одну из перегрузок RegisterInternalFunction, вы можете проверить любые единицы «dwsXxxxFunctions.pas» для примеров. Это потенциально более эффективно, но и более громоздко.

  • Если вы хотите предварительно настроить пользовательские макросы исходного кода в исходном коде (макросы ala C), вы можете использовать функциональные возможности фильтров (проверьте фильтры HTML или JS в качестве примера того, как фильтр может быть реализован) ,

  • Если вы хотите динамически реагировать на «неизвестные» имена, чтобы вы могли объявить их на месте или связать их с чем-то динамически, вы можете использовать TdwsLanguageExtension.FindUnknownName, так работает среда RTTI f.i. (см. TRTTIEnvironment в dwsRTTIConnector).

  • Если вы хотите, чтобы разобрать полностью настраиваемой области кода в полностью настраиваемого образом, вы можете использовать расширения языка тоже переопределить ReadInstr и проверить, как ASMLib & JSLibModule делают это, чтобы поддержать «ассемблер».

+0

Тот, который мне нужен, это «неизвестные имена» для работы динамически. Я проверю RTTIConnector и ответу в ближайшее время. Спасибо Эрик. – Zeina

 Смежные вопросы

  • Нет связанных вопросов^_^