Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
developers:tutorial:sheets [2022/08/30 13:21] proxor |
developers:tutorial:sheets [2023/07/31 08:41] (текущий) yulia |
||
---|---|---|---|
Строка 17: | Строка 17: | ||
Если пользовательские настройки требуется сохранить, то так же следует перекрыть методы [[developers:references:topomatic.tables.sheets.templatesheet.loadfromstg|LoadFromStg()]] и [[developers:references:topomatic.tables.sheets.templatesheet.savetostg|SaveToStg()]]. Подробнее о процессах сохранение и загрузки можно узнать в разделе руководства Создание и сохранение модели. | Если пользовательские настройки требуется сохранить, то так же следует перекрыть методы [[developers:references:topomatic.tables.sheets.templatesheet.loadfromstg|LoadFromStg()]] и [[developers:references:topomatic.tables.sheets.templatesheet.savetostg|SaveToStg()]]. Подробнее о процессах сохранение и загрузки можно узнать в разделе руководства Создание и сохранение модели. | ||
- | Шаблон ведомости представляет из себя [[https://ru.wikipedia.org/wiki/XML|XML-файл]] определяющий внешний вид ведомости и расположение ячеек заголовков и данных. Корневой каталог шаблонов ведомостей расположен по пути "c:\ProgramData\Topomatic\Robur <Тип_продукта>\16.0\Sht\" (в зависимости от вашего типа [[https://new.topomatic.ru/products/|продукта]] программного комплекса [[https://new.topomatic.ru/|Топоматик Робур]], имя каталога будет разным). Далее шаблон располагается в подпапках, соответствующих типу ведомости. Например, ведомости подобъектов будут располагаться в каталоге Alg и т.д. Структура шаблона ведомости описана в разделе руководства [[road:commons_tasks:creating_and-editing_templates:start|Создание и редактирование шаблонов выходных ведомостей]]. | + | Шаблон ведомости представляет из себя [[https://ru.wikipedia.org/wiki/XML|XML-файл]] определяющий внешний вид ведомости и расположение ячеек заголовков и данных. Корневой каталог шаблонов ведомостей расположен по пути "**c:\ProgramData\Topomatic\Robur <Тип_продукта>\16.0\Sht\**" (в зависимости от вашего типа [[https://new.topomatic.ru/products/|продукта]] программного комплекса [[https://new.topomatic.ru/|Топоматик Робур]], имя каталога будет разным). Далее шаблон располагается в подпапках, соответствующих типу ведомости. Например, ведомости подобъектов будут располагаться в каталоге Alg и т.д. Структура шаблона ведомости описана в разделе руководства [[road:commons_tasks:archive_sections:creating_and-editing_templates:start|Создание и редактирование шаблонов выходных ведомостей]]. |
----- | ----- | ||
==== Подготовка модуля ==== | ==== Подготовка модуля ==== | ||
Строка 70: | Строка 70: | ||
Для возможности использования пользовательского фрейма настроек в мастере создания ведомостей, класс ведомости должен содержать уникальный объект-ключ (Moniker). Объект-ключ это пустой объект класса [[https://docs.microsoft.com/en-us/dotnet/api/system.object?view=net-6.0|Object]]. Этот объект должен создаваться при инициализации экземпляра класса ведомости и возвращаться вместе с объектами-ключами базового класса при вызове метода [[developers:references:topomatic.tables.sheets.templatesheet.getmonikers|GetMonikers()]]. Объект-ключ служит в качестве идентификатора нашего экземпляра класса ведомости и служит для определения типа пользовательского фрейма, соответствующего типу нашей ведомости. Пользовательский фрейм получается с помощью метода [[developers:references:topomatic.tables.sheets.templatesheet.getframe|GetFrame()]] принимающий объект-ключ в качестве аргумента. | Для возможности использования пользовательского фрейма настроек в мастере создания ведомостей, класс ведомости должен содержать уникальный объект-ключ (Moniker). Объект-ключ это пустой объект класса [[https://docs.microsoft.com/en-us/dotnet/api/system.object?view=net-6.0|Object]]. Этот объект должен создаваться при инициализации экземпляра класса ведомости и возвращаться вместе с объектами-ключами базового класса при вызове метода [[developers:references:topomatic.tables.sheets.templatesheet.getmonikers|GetMonikers()]]. Объект-ключ служит в качестве идентификатора нашего экземпляра класса ведомости и служит для определения типа пользовательского фрейма, соответствующего типу нашей ведомости. Пользовательский фрейм получается с помощью метода [[developers:references:topomatic.tables.sheets.templatesheet.getframe|GetFrame()]] принимающий объект-ключ в качестве аргумента. | ||
- | Методы [[developers:references:topomatic.tables.sheets.templatesheet.loadfromstg|LoadFromStg()]] и [[developers:references:topomatic.tables.sheets.templatesheet.savetostg|SaveToStg()]] содержат инструкции записи и чтения данных ведомости, а так же состояния пользовательских настроек. В текущем примере наша ведомость содержит только одно пользовательское свойство **UserSetting**. Оно не будет использоваться в расчётах и описано в справочных целях. Свойство **UserSetting** является типом [[https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/bool|bool]], поэтому для чтения и записи значения воспользуемся методом [[developers:references:topomatic.stg.stgcollection.getboolean_system.string_system.boolean|GetBoolean()]] класса [[developers:references:topomatic.stg.stgnode|StgNode]]. | + | Методы [[developers:references:topomatic.tables.sheets.templatesheet.loadfromstg|LoadFromStg()]] и [[developers:references:topomatic.tables.sheets.templatesheet.savetostg|SaveToStg()]] содержат инструкции записи и чтения данных ведомости, а так же состояния пользовательских настроек. В текущем примере наша ведомость содержит только одно пользовательское свойство **UserSetting**. Оно не будет использоваться в расчётах и описано в справочных целях. Свойство **UserSetting** является типом [[https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/bool|bool]], поэтому для чтения и записи значения воспользуемся методами [[developers:references:topomatic.stg.stgcollection.getboolean_system.string_system.boolean|GetBoolean()]] и [[developers:references:topomatic.stg.stgcollection.addboolean_system.string_system.boolean|AddBoolean()]] класса [[developers:references:topomatic.stg.stgnode|StgNode]]. |
Добавьте в программу новые классы со следующим содержанием: | Добавьте в программу новые классы со следующим содержанием: | ||
Строка 213: | Строка 213: | ||
{ | { | ||
base.SaveToStg(node); | base.SaveToStg(node); | ||
- | node.GetBoolean("UserSetting", UserSetting); | + | node.AddBoolean("UserSetting", UserSetting); |
} | } | ||
Строка 222: | Строка 222: | ||
=== Класс пользовательского фрейма === | === Класс пользовательского фрейма === | ||
- | Создадим класс пользовательского фрейма (TutorialSheetFrame) наследник от UserSheetWizardFrame. В нашем примере пользовательский фрейм будет содержать только один CheckBox. Добавим его в режиме конструктора Windows Forms. У нашего фрейма необходимо перекрыть методы OnInitialize() и OnFinallize(), где мы будем читать и изменять состояние нашей ведомости соответственно. Так же можно перекрыть свойство Title, используемое мастером создания ведомости для формирования заголовка окна мастера. | + | Создадим класс пользовательского фрейма (**TutorialSheetFrame**) наследник от [[developers:references:topomatic.tables.export.usersheetwizardframe|UserSheetWizardFrame]]. В нашем примере пользовательский фрейм будет содержать только один [[https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.checkbox?view=windowsdesktop-6.0|CheckBox]]. Добавим его в режиме [[https://docs.microsoft.com/ru-ru/visualstudio/designers/windows-forms-designer-overview?view=vs-2022|конструктора Windows Forms]]. У нашего фрейма необходимо перекрыть методы [[developers:references:topomatic.tables.export.usersheetwizardframe.oninitialize|OnInitialize()]] и [[developers:references:topomatic.tables.export.usersheetwizardframe.onfinalize|OnFinallize()]], где мы будем читать и изменять состояние нашей ведомости соответственно. Так же можно перекрыть свойство [[developers:references:topomatic.tables.export.usersheetwizardframe.title|Title]], используемое мастером создания ведомости для формирования заголовка окна мастера. |
Добавьте в программу новый класс со следующим содержанием: | Добавьте в программу новый класс со следующим содержанием: | ||
Строка 267: | Строка 267: | ||
=== Шаблон ведомости === | === Шаблон ведомости === | ||
- | Создайте новый текстовый файл TutorialSheet.xml и расположите его в каталоге "c:\ProgramData\Topomatic\Robur <Тип_продукта>\16.0\Sht\Alg\TutorialSheet\". Заполните его следующим образом: | + | Создайте новый текстовый файл **TutorialSheet.xml** и расположите его в каталоге "**c:\ProgramData\Topomatic\Robur <Тип_продукта>\16.0\Sht\Alg\TutorialSheet\**". Заполните его следующим образом: |
<code xml> | <code xml> | ||
<?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||
Строка 358: | Строка 358: | ||
Для создания пользовательской ведомости следует объявить две команды. Первая команда создаёт экземпляр класса ведомости и определяет его состояние. Вторая команда будет вызывать первую и для возвращённого экземпляра класса ведомости вызовет мастер создания ведомости. | Для создания пользовательской ведомости следует объявить две команды. Первая команда создаёт экземпляр класса ведомости и определяет его состояние. Вторая команда будет вызывать первую и для возвращённого экземпляра класса ведомости вызовет мастер создания ведомости. | ||
- | В теле программного модуля объявите команды, и декорируйте её атрибутом «cmd». Команда «generate_tutorial_sheet» создаст экземпляр класса ведомости, а команда «tutorial_sheet» вызовет для него мастер создания ведомости. | + | В теле программного модуля объявите команды, и декорируйте её атрибутом «**cmd**». Команда «**generate_tutorial_sheet**» создаст экземпляр класса ведомости, а команда «**tutorial_sheet**» вызовет для него мастер создания ведомости. |
<code csharp> | <code csharp> | ||
Строка 433: | Строка 433: | ||
</code> | </code> | ||
- | Результатом запуска проекта будет появление в главном меню пункта «Tutorial», с подпунктами, которые будут работать в соответствии с описанными выше алгоритмами. | + | Результатом запуска проекта будет появление в главном меню пункта «**Tutorial**», с подпунктами, которые будут работать в соответствии с описанными выше алгоритмами. |
{{ :developers:tutorial:sheets:tutsheetsmaster.png?nolink |}} | {{ :developers:tutorial:sheets:tutsheetsmaster.png?nolink |}} |