Можно как-то закрыть приложение Terrasoft командой из модального окна? Например есть задача - запускается Terrasoft и открывает в модальном режиме окно с которым будет работать пользователь, должно быть только две кнопки - Сохранить и Закрыть, по нажатию на кнопку Закрыть всё приложение должно закрыться.
Нравится
Создайте обработчик события OnClose в Вашем окне, и вставьте в него такой текст:
var MainWindow = Connector.Attributes('MainWindow'); MainWindow.Close();
Если Ваше окно наследуется от какого-либо базового окна, для которого этот обработчик уже определён, необходимо перед этими строками вызвать базовый обработчик. Например:
function wnd_ContactEditOnClose(Window) { wnd_BaseDBEditOnClose(Window); var MainWindow = Connector.Attributes('MainWindow'); MainWindow.Close(); }
В скрипте scr_Main, в функции
1 function CloseMainForm() { 2 wndWorkspace.Window = System.EmptyValue; 3 var Keys = (new VBArray(Main.Workspaces.Keys()).toArray()); 4 for (var i in Keys) { 5 var Key = Keys[i]; 6 Services.SerializeItemToProfile(Main.Workspaces(Key), EmptyStr); 7 } 8 ClearTemporaryFiles(); 9}
на 6-й строке выдает сообщение "Ошибка выполнения Microsoft JScript: Несоответствие типа"
При этом Key содержит строковое значение, которое является названием окна одного из разделов.
Попробуйте закрыть программу, очистить профиль и проверить снова. При реализации у меня такой проблемы не возникало.
В строке "Выполнить" меня "Пуск" впишите %appdata%, войдите в директорию Terrasoft/версия и удалите папку Profile и Cache.
Удалить всё из папки Profile (обычно хранится в каталоге ..\Application Data\Terrasoft\ текущего пользователя, если профиль не хранится в базе) или всё, что касается текущего пользователя из таблицы tbl_ProfileData, если профиль хранится в базе данных.
не помогло...
попробую описать работу функции CloseMainForm(), так как мне смутно кажется эта работа подозрительной:
первая строка - wndWorkspace.Window = System.EmptyValue;
здесь wndWorkspace.Window = wnd_Workspace_1
строка два - var Keys = (new VBArray(Main.Workspaces.Keys()).toArray());
здесь Keys получает два элемента массива - [0] = wnd_Workspace_1 и [1] = wnd_Workspace_2
строка шесть - Services.SerializeItemToProfile(Main.Workspaces(Key), EmptyStr);
когда Key имеет значение wnd_Workspace_1 всё проходит нормально, когда Key получает значение wnd_Workspace_2 вылетает описанная выше ошибка...
Получается объекту wnd_Workspace_1 присвоено значение null, т.е. объект уничтожен, а объекту wnd_Workspace_2 значение null не присваивалось...
Прокомментируйте, пожалуйста, следующее:
"SSV" написал:здесь wndWorkspace.Window = wnd_Workspace_1
wnd_Workspace_1 - это объект, или строка? Насколько я понимаю, в последующем тексте Вы упоминаете wnd_Workspace_1 и wnd_Workspace_2 как строковые значения, а не объекты.
Данные разделы являются базовыми, или созданы Вами? Для них определены события OnProfileSerialize и OnProfileDeserialize?
Возможно, поможет переписать функцию следующим образом:
function CloseMainForm() { wndWorkspace.Window = System.EmptyValue; var Keys = (new VBArray(Main.Workspaces.Keys()).toArray()); for (var i in Keys) { var Key = Keys[i]; var Workspace = Main.Workspaces(Key); if (Workspace) { Services.SerializeItemToProfile(Workspace, EmptyStr); } } ClearTemporaryFiles(); }