Default property и fsTree

отредактировано 01:28 Раздел: FastScript
Добавляю в скрипт возможность обращения к frVariables (от FastReport)


with fsGlobalUnit.AddClass(TfrVariables, 'TObject') do
begin
{property Variable[const Name: String]: Variant
read GetVariable write SetVariable; default;}
AddDefaultProperty('Variable', 'String', 'Variant',
ClassCallMethod);
end;

fsGlobalUnit.AddObject('frVariables', frVariables);


После этого скрипте я использую:

ShowMessage(frVariables) все работает

а

ShowMessage(frVariables.Variable) не работает, при этом программа
входит в обработчик метода класса не 1 раз как должен а три раза и в третьем
входе выдает ошибку преобразования null в строку.

Так задумано или это ошибка?

В дереве объектов прорисовано TfrVariable.Variable и нет ни слова о том,
что это свойство default.
в дереве описание выгдядит так:

property Variable(p0: String): Variant

p0 это тоже не здорово, в описании параметров функций можно же задавать
имена параметров, почему здесь нельзя?
В этом примере описание вида: property Variable(Name: String):Variant
смотрелось бы гораздо лучше.

Вообще, идея с деревом вроде бы хороша но не додумана:

Нужно видеть не только описание классов (это дело Help) а описания
зарегистрированных объектов
их свойства и что не менее важно методы. Что бы можно было конечному
пользователю посмотреть что же там наколбасил программер, какие объекты из
основноцй программы он сделал доступными из скриптов. Именно это и нужно,
так как использование Интерпретатора это шаг к разделению труда - программер
пишет саму программу, исполняющую скрипты а внедренец ваяет офигительные по
сложности скрипты. Именно внедренец, потому что программер может и этот код
скрипта включить в саму программу. Поэтому и нужно показывать
зарегистрированные и доступные объекты.





Комментарии

  • отредактировано 01:28
    В 1.3 все работает, проверено только что.
    Имена параметров в описаниях индексных св-в отсутствуют, так задумано и менять уже поздно.
    Дерево легко доделать самому, чтобы оно отображало и объекты, и типы. Ключевой метод - GenerateXMLContents, который возвращает все зарегистрированные элементы в виде XML.
  • отредактировано 01:28
    Ну и я работаю с версией 1.3. А при компиляции все равно выдается ошибка,
    отображенная на рисункe Error.gif

    А есть описание структуры, возвращаемой GenerateXMLContents?
  • отредактировано 01:28
    Ну, скорее всего FS тут не виноват. Просто frVariables[...] содержит Null, который не может быть конвертирован в строку.

    Структуру легче всего посмотреть так:
    uses fs_xml, fs_itools;
    var
    x: TfsXMLDocument;

    x := TfsXMLDocument.Create;
    GenerateXMLContents(fsGlobalUnit, x.Root);
    x.AutoIndent := True;
    x.SaveToFile('1.xml');

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.