Вызов из основного сценария

Условно можно обозначить два варианта использования библиотеки.

Первый - это работа внутри приложения. Вы пишите код сценария на языке OneScript, запускаете сценарий на исполнение в окне терминала и при этом вся информация для пользователя может быть показана только средствами элементов интерфейса. Командная строка не видна, она закрыта приложением. При закрытии приложения закроется и окно терминала.

Второй вариант - вызов интерактивных диалогов или таблиц и другой информации как дополнительная возможность по ходу выполнения вашего основного сценария. Вы при этом остаетесь в командной строке и видите результат например метода Сообщить() непосредственно. При закрытии приложения окно терминала не закроется.

Вызов из основного сценария с помощью фонового задания

Вот как можно реализовать этот второй вариант в коде с помощью фонового задания.

Содержимое основного сценария ПримерGUI.os


Перем ТекПуть; Процедура ОткрытьДиалог(параметр1) Экспорт Контекст = Новый Структура(); Контекст.Вставить("МояСтруктура", параметр1); ЗагрузитьСценарий(ОбъединитьПути(ТекПуть,"ДиалогОткрытия.os"), Контекст); КонецПроцедуры ТекПуть = Новый Файл(ТекущийСценарий().Источник).Путь; МояСтруктура = Новый Структура("Результат", "Файл не выбран"); МассивПараметров = Новый Массив(1); МассивПараметров[0] = МояСтруктура; Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ОткрытьДиалог", МассивПараметров); Задание.ОжидатьЗавершения(); Сообщить("Результат = " + МояСтруктура.Результат); Приостановить(2000); Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ОткрытьДиалог", МассивПараметров); Задание.ОжидатьЗавершения(); Сообщить("Результат = " + МояСтруктура.Результат); Пока Истина Цикл Приостановить(1000); КонецЦикла;

Содержимое сценария для интерактивного выбора файла ДиалогОткрытия.os (должен лежать рядом с основным сценарием)


Перем ТФ; Процедура ДиалогЗакрыт() Экспорт Если ТФ.АргументыСобытия.Файлы.Количество() > 0 Тогда МояСтруктура.Результат = ТФ.АргументыСобытия.Файлы.Получить(0); КонецЕсли; ТФ.Завершить(); КонецПроцедуры ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptTerminalGui\OneScriptTerminalGui\bin\Debug\OneScriptTerminalGui.dll"); ТФ = Новый ТерминалФормыДляОдноСкрипта(); ДиалогОткрытия1 = ТФ.Верхний.Добавить(ТФ.ДиалогОткрытия("Диалог открытия", "Сообщение")); ДиалогОткрытия1.ДиалогЗакрыт = ТФ.Действие(ЭтотОбъект, "ДиалогЗакрыт"); ДиалогОткрытия1.ПутьКаталога = "C:\"; ДиалогОткрытия1.ПоказатьДиалог(); ТФ.Запуск();

Вызов из основного сценария - рекомендуемый способ

Вызов из основного сценария с помощью фонового задания имеет ряд ограничений, связанных с запуском фонового задания.

Рекомендую использовать упрощенный вариант - без запуска фонового задания. Вот пример.

Содержимое сценария ПримерGUI.os


Перем ТФ, РезультатВызова; Процедура ВызватьTUI() Экспорт ТФ = Новый ТерминалФормыДляОдноСкрипта(); ДиалогОткрытия1 = ТФ.Верхний.Добавить(ТФ.ДиалогОткрытия("Диалог открытия", "Сообщение")); ДиалогОткрытия1.ДиалогЗакрыт = ТФ.Действие(ЭтотОбъект, "ДиалогЗакрыт"); ДиалогОткрытия1.ПоказатьДиалог(); ТФ.Запуск(); КонецПроцедуры Процедура ДиалогЗакрыт() Экспорт РезультатВызова = Неопределено; Пока РезультатВызова = Неопределено Цикл Если ТФ.АргументыСобытия.РезультатДиалога = ТФ.РезультатДиалога.ОК Тогда Если ТФ.АргументыСобытия.Файлы.Количество() > 0 Тогда РезультатВызова = ТФ.АргументыСобытия.Файлы.Получить(0); КонецЕсли; Иначе РезультатВызова = ТФ.АргументыСобытия.РезультатДиалога; КонецЕсли; Приостановить(500); КонецЦикла; ТФ.Завершить(); КонецПроцедуры ПодключитьВнешнююКомпоненту("OneScriptTerminalGui.dll"); ВызватьTUI(); Сообщить("РезультатВызова = " + РезультатВызова); Приостановить(3000); ВызватьTUI(); Сообщить("РезультатВызова = " + РезультатВызова); Пока Истина Цикл Приостановить(1000); КонецЦикла;

Смотрите также

Библиотека OneScriptTerminalGui