Как инициализировать значение флажка в installshield


Как установить начальное значение флажка (Checked / NotChecked) в InstallShield 2010.

Я добавил флажок в форму, во время добавления пустил для создания пользовательского свойства (я назвал его ISCHECKED). Я установил значение 1, поэтому, когда checbox установлен, то это свойство имеет значение, равное 1.

Когда я запускаю установщик, флажок всегда установлен, и я хочу, чтобы он был снят, что я должен делать. Я попытался изменить это пользовательское свойство и установить значение для различных значений в свойстве менеджер, но без удачи. Я знаю, что когда я нажимаю на флажок, он изменяет это значение свойства (я включаю / отключаю другие элементы пользовательского интерфейса).

4 5

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. Он описывает только действие установки свойства при закрытии диалогового окна.

  1. В списке представления в разделе поведение и логика щелкните диспетчер свойств.

  2. Установите значение 1, какое свойство вы хотите.