Как инициализировать значение флажка в installshield
Как установить начальное значение флажка (Checked / NotChecked) в InstallShield 2010.
Я добавил флажок в форму, во время добавления пустил для создания пользовательского свойства (я назвал его ISCHECKED). Я установил значение 1, поэтому, когда checbox установлен, то это свойство имеет значение, равное 1.
Когда я запускаю установщик, флажок всегда установлен, и я хочу, чтобы он был снят, что я должен делать. Я попытался изменить это пользовательское свойство и установить значение для различных значений в свойстве менеджер, но без удачи. Я знаю, что когда я нажимаю на флажок, он изменяет это значение свойства (я включаю / отключаю другие элементы пользовательского интерфейса).
4 ответа:
Флажок устанавливается, когда его свойство установлено, и снимается, когда свойство пусто.
Чтобы снять флажок по умолчанию, убедитесь, что его свойство не инициализировано значением. Только свяжите свойство с вашим флажком, но не устанавливайте его значение в "1".
Я обошел это, создав CheckBoxGroup с двумя флажками. Одно " да "и одно" нет", где" да "имеет значение 1, А" нет " - значение 0.
Как я уже сказал в своем комментарии, это все еще проблема в InstallShield 2018. Вот обходной путь, который я придумал. Я создал два пользовательских сценария действий. Один для перевода с "0" и "1" на пустой "" и "1", а другой скрипт для перевода обратно на "0" и "1". Я создал пользовательские действия TranslateChkBoxesZeroToEmptyAction и Translatechkboxesemptyzeroaction, которые вызывают функции TranslateChkBoxesZeroToEmpty и Translatechkboxesemptyzero соответственно.
Я вызываю TranslateChkBoxesZeroToEmptyAction в поведение и логика:пользовательские действия и последовательности:последовательности:установка:пользовательский интерфейс сразу после SetupCompleteSuccess и до AppSearch. Я называю TranslateChkBoxesEmptyToZeroAction после MaintenanceWelcome и до SetupProgress.
Таким образом, аффект заключается в том, чтобы преобразовать строки" 0 "в пустые "" до открытия диалога и преобразовать пустые "" к "0" после закрытия диалога
===Настройка.rul= = = =
export prototype ForceEmptyToZero(HWND, STRING); export prototype ForceZeroToEmpty(HWND, STRING); export prototype TranslateChkBoxesEmptyToZero(HWND); export prototype TranslateChkBoxesZeroToEmpty(HWND); // ********************************************************************** // function ForceEmptyToZero -- Convert "" to "0" // // This function must be called on each CheckBox property after closing // the dialog that contains the checkbox. It converts empty "" string // to "0" in order to be compatible with InstallShield logic for checkboxes. // // 2018Aug02jdn Created by Jon D. Newbill / www.bitworkssystems.com // ********************************************************************** function ForceEmptyToZero(hMSI, propStr) STRING valStr; NUMBER strLen; begin strLen = 100; MsiGetProperty(hMSI, propStr, valStr, strLen); // If not "1" then assume false and force to "0" if (valStr != "1") then valStr = "0"; MsiSetProperty(hMSI, propStr, valStr); endif; end; // ********************************************************************** // function ForceZeroToEmpty- Convert "0" to "" // // This function must be called on each CheckBox property before opening // the dialog that contains the checkbox. It converts "0" string to // empty "" in order to be compatible with InstallShield logic for // checkboxes. // // 2018Aug02jdn Created by Jon D. Newbill / www.bitworkssystems.com // ********************************************************************** function ForceZeroToEmpty(hMSI, propStr) STRING valStr; NUMBER strLen; begin strLen = 100; MsiGetProperty(hMSI, propStr, valStr, strLen); // If not "1" then assume false and force to empty string "" if (valStr != "1") then valStr = ""; MsiSetProperty(hMSI, propStr, valStr); endif; end; // ********************************************************************** // function TranslateChkBoxesZeroToEmpty -- Convert "0" to "" // // This function must be called before the OptionSelection dialog is // run. This function converts all CheckBox properties from values of // "0" or "1" to empty string "" or "1" respectively. This is done to // deal with an anomaly in the way InstallShield handles CheckBoxes // assigned to properties. Checkboxes are unchecked only when // associated property is an empty string "" and checked for any other // non-empty string. // // https://stackoverflow.com/questions/6877011/how-to-initialize-checkbox-value-in-installshield // // So we must convert all "0" strings to "" empty string before the // OptionSelection dialog runs and then convert all "" to "0" after the // dialog closes. // // 2018Aug02jdn Created by Jon D. Newbill / www.bitworkssystems.com // ********************************************************************** function TranslateChkBoxesZeroToEmpty(hMSI) STRING valStr; NUMBER strLen; begin ForceZeroToEmpty(hMSI,"TIMESTAMP"); ForceZeroToEmpty(hMSI,"HIDECAPWIN"); ForceZeroToEmpty(hMSI,"FINDVCP"); ForceZeroToEmpty(hMSI,"LCDACCEPT"); ForceZeroToEmpty(hMSI,"SERNUM"); ForceZeroToEmpty(hMSI,"TOPWIN"); ForceZeroToEmpty(hMSI,"ZOOM"); ForceZeroToEmpty(hMSI,"ACCEPTCLOSE"); end; // ********************************************************************** // function TranslateChkBoxesEmptyToZero -- Convert "" to "0" // // This function must be called after the OptionSelection dialog closes. // This function converts all CheckBox properties from values of empty // string "" or "1" to "0" or "1" respectively. This is done to deal // with an anomaly in the way InstallShield handles CheckBoxes assigned // to properties. Checkboxes are unchecked only when associated // property is an empty string "" and checked for any other non-empty // string. // // https://stackoverflow.com/questions/6877011/how-to-initialize-checkbox-value-in-installshield // // So we must convert all "0" strings to "" empty string before the // OptionSelection dialog runs and then convert all "" to "0" after the // dialog closes. // // 2018Aug02jdn Created by Jon D. Newbill / www.bitworkssystems.com // ********************************************************************** function TranslateChkBoxesEmptyToZero(hMSI) STRING valStr; NUMBER strLen; begin ForceEmptyToZero(hMSI,"TIMESTAMP"); ForceEmptyToZero(hMSI,"HIDECAPWIN"); ForceEmptyToZero(hMSI,"FINDVCP"); ForceEmptyToZero(hMSI,"LCDACCEPT"); ForceEmptyToZero(hMSI,"SERNUM"); ForceEmptyToZero(hMSI,"TOPWIN"); ForceEmptyToZero(hMSI,"ZOOM"); ForceEmptyToZero(hMSI,"ACCEPTCLOSE"); end;
ИЗ MICROSOFT LINK :
"этот флажок CheckBox_control является флажком с двумя состояниями. Чтобы связать целочисленное или строковое свойство с этим элементом управления, введите имя свойства в столбец свойства таблицы элементов управления. Выбранное состояние поля задает свойству либо значение, указанное в столбце Value таблицы CheckBox, либо начальное значение свойства, указанного в свойстве стол. Если свойство не имеет начального значения, то состояние checked устанавливает его равным 1. Невыбранное состояние задает свойству значение null."
Терминология сбивает с толку. Что они подразумевают под"избранным состоянием"? Они имеют в виду"проверенное состояние"? А затем он говорит, что устанавливает либо столбец Value, либо начальное значение свойства [default]. Ну и что же это такое? Не может быть и того, и другого. По моему опыту проверенное состояние устанавливается в поле Значение таблицы свойств флажка и непроверенное состояние всегда устанавливает свойству пустую строку "". Приведенный выше текст также не описывает, как начальное состояние отображения флажка определяется из связанного свойства непустой строкой = CHECKED и пустой строкой = UNCHECKED. Он описывает только действие установки свойства при закрытии диалогового окна.