Attribute VB_Name = "z_UIMessages" ' Модуль вывода сообщений и взаимодействия с пользователем Option Private Module Option Explicit '# Коды сообщений Public Enum MsgCode MSG_OK = 0 EM_DOC_READONLY EM_RULE_FAILED EM_NO_OPEN_DOCS EM_PATH_EMPTY EM_MISSING_FILE IM_RULES_COMPLETE IM_STYLES_FIXED IM_FORMAT_CLEARED IM_UPDATE_BANNED_FAIL IM_UPDATE_BANNED_SUCCESS QM_SAVE_DOC QM_WARN_COMMENTS End Enum Private g_UI As API_UserInteraction Public Function UserInteraction() As API_UserInteraction If g_UI Is Nothing Then _ Set g_UI = New API_UserInteraction Set UserInteraction = g_UI End Function Public Function SetUserInteraction(newUI As API_UserInteraction) Set g_UI = newUI End Function Public Function ProcessErrorMessages(expectedErrors As Scripting.Dictionary) If Err.Number = 0 Then _ Exit Function Call Unload(CSE_ProgressBar) If Not expectedErrors.Exists(Err.Number) Then _ Call Err.Raise(Err.Number) Select Case Err.Number ' Case EM_LINK_NO_FILE: Call UserInteraction.ShowMessage(Err.Number, Err.Source) End Select End Function Public Function UIShowMessage(theCode As MsgCode, ParamArray params() As Variant) Dim unwrapped As Variant: unwrapped = params unwrapped = FixForwardedParams(unwrapped) Select Case theCode Case EM_DOC_READONLY Call MsgBox("Файл открыт в режиме чтения!" & vbNewLine & "Пожалуйста, сохраните файл в режиме редактирования", vbExclamation) Case EM_RULE_FAILED Call MsgBox(Fmt("Правило {1} было завершено с ошибкой! Пожалуйста, проинформируйте разработчика", unwrapped), vbExclamation) Case EM_NO_OPEN_DOCS: Call MsgBox("Отсутствуют открытые документы Word", vbExclamation) Case EM_PATH_EMPTY: Call MsgBox("Путь к файлу не указан!", vbExclamation) Case EM_MISSING_FILE: Call MsgBox(Fmt("Отсутствует доступ к файлу: {1}", unwrapped), vbExclamation) Case IM_RULES_COMPLETE Call MsgBox(Fmt("Время выполнения: {1} ms" & vbNewLine & vbNewLine & _ "Найдено ошибок: {2}" & vbNewLine & _ "Внесено правок: {3}", unwrapped), vbInformation) Case IM_STYLES_FIXED: Call MsgBox("Проверка стилей прошла успешно!", vbInformation) Case IM_FORMAT_CLEARED: Call MsgBox("Очистка завершена", vbInformation) Case IM_UPDATE_BANNED_SUCCESS: Call MsgBox("Обновление локального списка успешно", vbInformation) Case IM_UPDATE_BANNED_FAIL: Call MsgBox("Обновление не прошло. Проверьте подключение к \\fs1.concept.ru", vbInformation) Case Else Call MsgBox("Неверный код сообщения", vbCritical) End Select End Function Public Function UIAskQuestion(theCode As MsgCode, ParamArray params() As Variant) As Boolean Dim unwrapped As Variant: unwrapped = params unwrapped = FixForwardedParams(unwrapped) Dim answer As Long: answer = vbNo Select Case theCode Case QM_SAVE_DOC answer = MsgBox("Внимание!! При проверке документа в случае сбоя возможна потеря данных." & vbNewLine _ & "Вы хотите сохранить документ перед проверкой?", vbYesNo + vbQuestion) Case QM_WARN_COMMENTS answer = MsgBox("Внимание!! Обнаружены комментарии в документе. Это может привести к сбою программы." & vbNewLine _ & "Комментарии будут удалены, Вы хотите продолжить?", vbYesNo + vbQuestion, "Запуск проверки") Case Else Call MsgBox("Неверный код сообщения", vbCritical) End Select UIAskQuestion = answer = vbYes End Function