Условно можно обозначить два варианта использования библиотеки.
Первый - это работа внутри приложения. Вы пишите код сценария на языке OneScript, запускаете сценарий на исполнение в окне терминала и при этом вся информация для пользователя может быть показана только средствами элементов интерфейса. Командная строка не видна, она закрыта приложением. При закрытии приложения закроется и окно терминала.
Второй вариант - вызов интерактивных диалогов или таблиц и другой информации как дополнительная возможность по ходу выполнения вашего основного сценария. Вы при этом остаетесь в командной строке и видите результат например метода Сообщить() непосредственно. При закрытии приложения окно терминала не закроется.
Вот как можно реализовать этот второй вариант в коде с помощью фонового задания.
Перем ТекПуть; Процедура ОткрытьДиалог(параметр1) Экспорт Контекст = Новый Структура(); Контекст.Вставить("МояСтруктура", параметр1); ЗагрузитьСценарий(ОбъединитьПути(ТекПуть,"ДиалогОткрытия.os"), Контекст); КонецПроцедуры ТекПуть = Новый Файл(ТекущийСценарий().Источник).Путь; МояСтруктура = Новый Структура("Результат", "Файл не выбран"); МассивПараметров = Новый Массив(1); МассивПараметров[0] = МояСтруктура; Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ОткрытьДиалог", МассивПараметров); Задание.ОжидатьЗавершения(); Сообщить("Результат = " + МояСтруктура.Результат); Приостановить(2000); Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ОткрытьДиалог", МассивПараметров); Задание.ОжидатьЗавершения(); Сообщить("Результат = " + МояСтруктура.Результат); Пока Истина Цикл Приостановить(1000); КонецЦикла;
Перем ТФ; Процедура ДиалогЗакрыт() Экспорт Если ТФ.АргументыСобытия.Файлы.Количество() > 0 Тогда МояСтруктура.Результат = ТФ.АргументыСобытия.Файлы.Получить(0); КонецЕсли; ТФ.Завершить(); КонецПроцедуры ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptTerminalGui\OneScriptTerminalGui\bin\Debug\OneScriptTerminalGui.dll"); ТФ = Новый ТерминалФормыДляОдноСкрипта(); ДиалогОткрытия1 = ТФ.Верхний.Добавить(ТФ.ДиалогОткрытия("Диалог открытия", "Сообщение")); ДиалогОткрытия1.ДиалогЗакрыт = ТФ.Действие(ЭтотОбъект, "ДиалогЗакрыт"); ДиалогОткрытия1.ПутьКаталога = "C:\"; ДиалогОткрытия1.ПоказатьДиалог(); ТФ.Запуск();
Вызов из основного сценария с помощью фонового задания имеет ряд ограничений, связанных с запуском фонового задания.
Рекомендую использовать упрощенный вариант - без запуска фонового задания. Вот пример.
Перем ТФ, РезультатВызова; Процедура ВызватьTUI() Экспорт ТФ = Новый ТерминалФормыДляОдноСкрипта(); ДиалогОткрытия1 = ТФ.Верхний.Добавить(ТФ.ДиалогОткрытия("Диалог открытия", "Сообщение")); ДиалогОткрытия1.ДиалогЗакрыт = ТФ.Действие(ЭтотОбъект, "ДиалогЗакрыт"); ДиалогОткрытия1.ПоказатьДиалог(); ТФ.Запуск(); КонецПроцедуры Процедура ДиалогЗакрыт() Экспорт РезультатВызова = Неопределено; Пока РезультатВызова = Неопределено Цикл Если ТФ.АргументыСобытия.РезультатДиалога = ТФ.РезультатДиалога.ОК Тогда Если ТФ.АргументыСобытия.Файлы.Количество() > 0 Тогда РезультатВызова = ТФ.АргументыСобытия.Файлы.Получить(0); КонецЕсли; Иначе РезультатВызова = ТФ.АргументыСобытия.РезультатДиалога; КонецЕсли; Приостановить(500); КонецЦикла; ТФ.Завершить(); КонецПроцедуры ПодключитьВнешнююКомпоненту("OneScriptTerminalGui.dll"); ВызватьTUI(); Сообщить("РезультатВызова = " + РезультатВызова); Приостановить(3000); ВызватьTUI(); Сообщить("РезультатВызова = " + РезультатВызова); Пока Истина Цикл Приостановить(1000); КонецЦикла;