Как я показываю сообщение об ошибке с помощью Управляемых Пользовательских действий с Windows Installer

Этот ответ полностью на Python, поэтому вы можете преобразовать его в MEL, если вы настаиваете на его использовании.

Задания сценария могут запускаться различными способами при возникновении события. Это могут быть такие вещи, как, когда время изменилось, пользователь отменяет действие, или в вашем случае, когда выбор изменился.

Вы можете получить полный список названий этих событий, выполнив следующее:

cmds.scriptJob(listEvents=True)

То, что вы ищете, это "SelectionChanged".

Чтобы это сработало, вам нужно определить функцию, которая будет вызываться при запуске задания скрипта (при изменении выбора). Вот простой пример этого.

import maya.cmds as cmds


# Create a function that will be called from the script job whenever there's a change to the selection.
def func():
    print "The selection has changed!"

# Create a new script job and save the result to a variable. The result is the script job's id number.
script_job_id = cmds.scriptJob(event=["SelectionChanged", func])

# When it's no longer needed, pass the script job's id with the kill parameter to remove it.
#cmds.scriptJob(kill=script_job_id)

Таким образом, в вашем случае, когда вы запускаете функцию, она может проверить, выбран ли объект, и в зависимости от того, есть он или нет, вы можете заставить его закрасить кнопку.

Когда ваш инструмент закрывается, вы можете удалить задание сценария, используя его параметр kill, чтобы он больше не работал, когда он вам не нужен.

И в качестве примечания, что вы написали Хагги, если у вас нет веских причин, я бы просто придерживался Python вместо MEL. Синтаксис намного проще, он имеет безумное количество библиотек, и он просто более силен для выполнения простых вещей, таких как манипулирование строками. Плюс Python используется во многих других программах, MEL - нет. Это правда, что есть некоторые команды, которые могут быть выполнены только в MEL, но вы можете легко оценить строку MEL с помощью Python.

9
задан Eddie 1 March 2009 в 04:10
поделиться

2 ответа

MSI может сделать это, но вам нужно ИЛИ в некоторых дополнительных значениях для аргумента messageType.

Например,

Record record = new Record();
record.FormatString = string.Format("Something has gone wrong!");

session.Message(
    InstallMessage.Error | (InstallMessage) ( MessageBoxIcon.Error ) |
    (InstallMessage) MessageBoxButtons.OK,
    record );

См. этот поток из wix-. список рассылки пользователей для более подробной информации.

15
ответ дан 4 December 2019 в 14:32
поделиться

Если Вы хотите, чтобы диалоговое окно обнаружилось, который содержит сообщение, необходимо сделать это сами.

Вот некоторый код, который я использую, чтобы сделать обработку ошибок в управляемых пользовательских действиях, которые выполняют SQL. Это показывает messagebox, если установка работает с полным UI. Это находится в c#, но надо надеяться Вы получите идею.

    private void _handleSqlException(SqlException ex)
    {
        StringBuilder errorMessage = new StringBuilder();
        errorMessage.Append("A SQL error has occurred.");
        for (int i = 0; i < ex.Errors.Count; i++)
        {
            errorMessage.Append("Index #" + i + "\n" +
                "Message: " + ex.Errors[i].Message + "\n" +
                "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                "Source: " + ex.Errors[i].Source + "\n" +
                "Procedure: " + ex.Errors[i].Procedure + "\n");
        }
        session.Log(errorMessage);
        if (session["UILevel"] == "5")
        {
            MessageBox.Show(errorMessage);
        }
    }
-3
ответ дан 4 December 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: