Default property и fsTree
Добавляю в скрипт возможность обращения к 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) а описания
зарегистрированных объектов
их свойства и что не менее важно методы. Что бы можно было конечному
пользователю посмотреть что же там наколбасил программер, какие объекты из
основноцй программы он сделал доступными из скриптов. Именно это и нужно,
так как использование Интерпретатора это шаг к разделению труда - программер
пишет саму программу, исполняющую скрипты а внедренец ваяет офигительные по
сложности скрипты. Именно внедренец, потому что программер может и этот код
скрипта включить в саму программу. Поэтому и нужно показывать
зарегистрированные и доступные объекты.
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) а описания
зарегистрированных объектов
их свойства и что не менее важно методы. Что бы можно было конечному
пользователю посмотреть что же там наколбасил программер, какие объекты из
основноцй программы он сделал доступными из скриптов. Именно это и нужно,
так как использование Интерпретатора это шаг к разделению труда - программер
пишет саму программу, исполняющую скрипты а внедренец ваяет офигительные по
сложности скрипты. Именно внедренец, потому что программер может и этот код
скрипта включить в саму программу. Поэтому и нужно показывать
зарегистрированные и доступные объекты.
Комментарии
Имена параметров в описаниях индексных св-в отсутствуют, так задумано и менять уже поздно.
Дерево легко доделать самому, чтобы оно отображало и объекты, и типы. Ключевой метод - GenerateXMLContents, который возвращает все зарегистрированные элементы в виде XML.
отображенная на рисункe
А есть описание структуры, возвращаемой GenerateXMLContents?
Структуру легче всего посмотреть так:
uses fs_xml, fs_itools;
var
x: TfsXMLDocument;
x := TfsXMLDocument.Create;
GenerateXMLContents(fsGlobalUnit, x.Root);
x.AutoIndent := True;
x.SaveToFile('1.xml');