Вот как бы хотелось решить туже задачу с использование "шаблона типа":
1) делаем некий элемент с именем record(он является контейнером, но без возможности добавления точек)
2) делаем кучу элементов с именами FieldInteger, FieldString, FieldReal и т.д.
3) положим нам нужен тип данных, состоящий из одного целочисленного поля и двух строковых - делаем:
#sha
Add(MultiElementEx,13963480,105,196)
{
}
BEGIN_SDK
Add(EditMultiEx,8914275,21,21)
{
VarCount=#6:record|
}
Add(Memory,3004996,112,49)
{
Default=Integer(0)
}
Add(Memory,9579031,112,98)
{
Default=String()
}
Add(Memory,5139641,112,147)
{
Default=String()
}
END_SDK
тут Контейнер это наш гипотетический элемент Record, а элементы Memory внутри - это поля, указанные выше. Точка "record" это готовый шаблон структуры
4) далее создаем элемент с каким-нибудь названием TemplateArray
#sha
Add(MultiElementEx,5229834,105,245)
{
}
BEGIN_SDK
Add(EditMultiEx,9259894,21,21)
{
VarCount=#5:array|
DataCount=#4:type|
}
END_SDK
5) ну и наконец допишем наши элементики для работы с массивами так, чтобы они понимали не только простейшие данные(как сейчас), но и такие, которые пользователь сделал с использованием среды. Причем запись/чтение можно производить, например, через МТ
Вот и получаем нехитрую схемку, которая добавляет число и две строки в наш пользовательский массив:
code_9251.txt
расширяя идею дальше, можно вставлять в элемент record скажем элементы типа ToInteger, ToString и т.д., которые по событию onConvert переведут все поля структуры в требуемый тип данных и вернут результат методом doReturn, т.е. получим полноценный тип данных.
К сожалнию минус у подхода только один: как реализовать это на базе стандартного пакета большой и толстый вопрос. Скорей всего никак...
------------ Дoбавленo:
После реализации и опыта использования этой технологии думаю станет понятно, как из струкруры сделать класс и к полям прибавить методы. А потом уже занятся наследованиями и прочей аттрибутикой. Решать же такие задачи с наскока это очень смелая идея
------------ Дoбавленo:
глядя на схему подумалось, что связывать через точку шаблон с элементом, который по этому шаблону строит данные не совсем верно. Тут видимо правильнее связать их через data_element, чтобы дать пользователю наглядное понимание того, что шаблон не делает в схеме абсолютно ничего и работает только на этапе кодогенерации.
------------ Дoбавленo:
вот такой код должен при этом получиться:
#cpp
// элемент record
typedef struct {
int field1;
string field2;
string field3;
} TRecord1;
.....
// элемент TemplateArray
TRecord1 *arr;
.....
// элемент ArrayWrite
arr[0].field1 = mt1;
arr[0].field2 = mt2;
arr[0].field3 = mt3;
.....