可以使用ISPP在Inno Setup中自动创建这些脚本行吗?

时间:2019-06-05 18:22:42

标签: inno-setup pascalscript

我有以下ISPP定义:

; Language combo index values
#define MDB_AFK_INDEX "0"
#define MDB_TWI_INDEX "1"
#define MDB_DAN_INDEX "2"
#define MDB_DEU_INDEX "3"
#define MDB_ENG_INDEX "4"
#define MDB_ESP_INDEX "5"
#define MDB_FRA_INDEX "6"
#define MDB_IND_INDEX "7"
#define MDB_ITA_INDEX "8"
#define MDB_SWK_INDEX "9"
#define MDB_NLD_INDEX "10"
#define MDB_PLK_INDEX "11"
#define MDB_PTB_INDEX "12"
#define MDB_RUS_INDEX "13"
#define MDB_SQI_INDEX "14"
#define MDB_FIN_INDEX "15"
#define MDB_SRN_INDEX "16"
#define MDB_SVE_INDEX "17"
#define MDB_FPO_INDEX "18"
#define MDB_TRK_INDEX "19"
#define MDB_CHS_INDEX "20"
#define MDB_BGR_INDEX "21"
#define MDB_ELL_INDEX "22"
#define MDB_UKR_INDEX "23"
#define MDB_KHM_INDEX "24"
#define MDB_ROM_INDEX "25"
#define MDB_SMO_INDEX "26"
#define MDB_VIT_INDEX "27"
#define MDB_ARA_INDEX "28"

我有这个Pascal Code Check函数:

{ Returns True if the user selected the same database language in the combo }
function CheckMDBLang(iMDBLangIndex: integer): boolean;
begin
  result := (cbDatabase.ItemIndex = iMDBLangIndex);
end;

这些是使用以上命令的当前脚本文件:

; default database
Source: "..\inno\Databases\English.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ENG_INDEX})
Source: "..\inno\Databases\Spanish.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ESP_INDEX})
Source: "..\inno\Databases\German.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_DEU_INDEX})
Source: "..\inno\Databases\Italian.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ITA_INDEX})
Source: "..\inno\Databases\Dutch.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_NLD_INDEX})
Source: "..\inno\Databases\Turkish.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_TRK_INDEX})
Source: "..\inno\Databases\Portuguese.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_PTB_INDEX})
Source: "..\inno\Databases\Swedish.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SVE_INDEX})
Source: "..\inno\Databases\Danish.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_DAN_INDEX})
Source: "..\inno\Databases\Russian.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_RUS_INDEX})
Source: "..\inno\Databases\Finnish.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_FIN_INDEX})
Source: "..\inno\Databases\Afrikaans.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_AFK_INDEX})
Source: "..\inno\Databases\Chinese Simplified.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_CHS_INDEX})
Source: "..\inno\Databases\Albanian.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SQI_INDEX})
Source: "..\inno\Databases\French.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_FRA_INDEX})
Source: "..\inno\Databases\Bulgarian.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_BGR_INDEX})
Source: "..\inno\Databases\Twi.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_TWI_INDEX})
Source: "..\inno\Databases\Tagalog.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_FPO_INDEX})
Source: "..\inno\Databases\Swahili.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SWK_INDEX})
Source: "..\inno\Databases\Greek.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ELL_INDEX})
Source: "..\inno\Databases\Ukrainian.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_UKR_INDEX})
Source: "..\inno\Databases\Cambodian.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_KHM_INDEX})
Source: "..\inno\Databases\Romanian.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ROM_INDEX})
Source: "..\inno\Databases\Samoan.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SMO_INDEX})
Source: "..\inno\Databases\Indonesian.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_IND_INDEX})
Source: "..\inno\Databases\Vietnamese.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_VIT_INDEX})
Source: "..\inno\Databases\Arabic.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ARA_INDEX})
Source: "..\inno\Databases\Polish.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_PLK_INDEX})
Source: "..\inno\Databases\Srnantongo.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SRN_INDEX})

; default database (ACCDB format)
Source: "..\inno\Databases\English.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ENG_INDEX})
Source: "..\inno\Databases\Spanish.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ESP_INDEX})
Source: "..\inno\Databases\German.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_DEU_INDEX})
Source: "..\inno\Databases\Italian.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ITA_INDEX})
Source: "..\inno\Databases\Dutch.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_NLD_INDEX})
Source: "..\inno\Databases\Turkish.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_TRK_INDEX})
Source: "..\inno\Databases\Portuguese.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_PTB_INDEX})
Source: "..\inno\Databases\Swedish.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SVE_INDEX})
Source: "..\inno\Databases\Danish.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_DAN_INDEX})
Source: "..\inno\Databases\Russian.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_RUS_INDEX})
Source: "..\inno\Databases\Finnish.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_FIN_INDEX})
Source: "..\inno\Databases\Afrikaans.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_AFK_INDEX})
Source: "..\inno\Databases\Chinese Simplified.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_CHS_INDEX})
Source: "..\inno\Databases\Albanian.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SQI_INDEX})
Source: "..\inno\Databases\French.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_FRA_INDEX})
Source: "..\inno\Databases\Bulgarian.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_BGR_INDEX})
Source: "..\inno\Databases\Twi.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_TWI_INDEX})
Source: "..\inno\Databases\Tagalog.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_FPO_INDEX})
Source: "..\inno\Databases\Swahili.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SWK_INDEX})
Source: "..\inno\Databases\Greek.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ELL_INDEX})
Source: "..\inno\Databases\Ukrainian.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_UKR_INDEX})
Source: "..\inno\Databases\Cambodian.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_KHM_INDEX})
Source: "..\inno\Databases\Romanian.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ROM_INDEX})
Source: "..\inno\Databases\Samoan.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SMO_INDEX})
Source: "..\inno\Databases\Indonesian.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_IND_INDEX})
Source: "..\inno\Databases\Vietnamese.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_VIT_INDEX})
Source: "..\inno\Databases\Arabic.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_ARA_INDEX})
Source: "..\inno\Databases\Polish.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_PLK_INDEX})
Source: "..\inno\Databases\Srnantongo.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang({#MDB_SRN_INDEX})

是否可以使用ISPP自动创建这些脚本行?


更新

根据评论,cbDatabase是自定义页面的一部分。这是我目前所拥有的:

function AppSettings_CreatePage(PreviousPageId: Integer): Integer;
var
    Page: TWizardPage;
    iUserValue: Cardinal;
    strPath: String;
begin
    Page := CreateCustomPage(
        PreviousPageId,
        ExpandConstant('{cm:ApplicationPreferences}'),
        ExpandConstant('{cm:DefaultSettings}')
    );

    { lblInfo }
    lblInfo := TLabel.Create(Page);
    with lblInfo do
    begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:SpecifyDefaultSettings}');
        Left := ScaleX(8);
        Top := ScaleY(8);
        Width := ScaleX(387);
        Height := ScaleY(29);
    end;

    { chkRememberLastCong }
    chkRememberLastCong := TCheckBox.Create(Page);
    with chkRememberLastCong do
    begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:UserRememberCongregation}');
        Left := ScaleX(8);
        Top := ScaleY(32);
        Width := ScaleX(385);
        Height := ScaleY(25);
        TabOrder := 0;

        { Set default value (for when registry value does not exist) }
        iUserValue := 1;
        { Get registry value }
        RegQueryDWordValue(HKLM,
                     'Software\Community Talks\Public Talks\Preferences',
                     'ReuseCong', iUserValue);
        { Update option on page. }
        Checked := iUserValue = 1;
    end;

    { chkDuplicates }
    chkDuplicates := TCheckBox.Create(Page);
    with chkDuplicates do
    begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:UserCheckDuplicates}');
        Left := ScaleX(8);
        Top := ScaleY(56);
        Width := ScaleX(393);
        Height := ScaleY(17);
        TabOrder := 1;

        { Set default value (for when registry value does not exist) }
        iUserValue := 0;    { Default }
        { Get registry value }
        RegQueryDWordValue(HKLM,
                     'Software\Community Talks\Public Talks\Preferences',
                     'Duplicate', iUserValue);
        { Update option on page. }
        Checked := iUserValue = 1;
    end;

    { lblDatabase }
    lblDatabase := TLabel.Create(Page);
    with lblDatabase do
    begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:DatabaseLanguage}');
        Left := ScaleX(8);
        Top := ScaleY(112);
        Width := ScaleX(385);
        Height := ScaleY(13);
    end;

    { cbDatabase }
    cbDatabase := TNewComboBox.Create(Page);
    with cbDatabase do
    begin
        Parent := Page.Surface;
        Left := ScaleX(8);
        Top := ScaleY(128);
        Width := ScaleX(177);
        Height := ScaleY(21);
        Style := csDropDownList;
        TabOrder := 3;

        { Languages }
        Items.Add({#LANG_AFK});
        Items.Add({#LANG_TWI});
        Items.Add({#LANG_DAN});
        Items.Add({#LANG_DEU});
        Items.Add({#LANG_ENG});
        Items.Add({#LANG_ESP});
        Items.Add({#LANG_FRA});
        Items.Add({#LANG_IND});
        Items.Add({#LANG_ITA});
        Items.Add({#LANG_SWK});
        Items.Add({#LANG_NLD});
        Items.Add({#LANG_PLK});
        Items.Add({#LANG_PTB});
        Items.Add({#LANG_RUS});
        Items.Add({#LANG_SQI});
        Items.Add({#LANG_FIN});
        Items.Add({#LANG_SRN});
        Items.Add({#LANG_SVE});
        Items.Add({#LANG_FPO});
        Items.Add({#LANG_TRK});
        Items.Add({#LANG_CHS});
        Items.Add({#LANG_BGR});
        Items.Add({#LANG_ELL});
        Items.Add({#LANG_UKR});
        Items.Add({#LANG_KHM});
        Items.Add({#LANG_ROM});
        Items.Add({#LANG_SMO});
        Items.Add({#LANG_VIT});
        Items.Add({#LANG_ARA});

        { Get path where the program was last install }
        strPath := GetPathInstalled('Public Talks');

        { Afrikaans has no dedicated language }
        { Chinese Simplified has no dedicated language }
        { Bulgarian has no dedicated language }
        { Twi has no dedicated language }
        { Swahili has no dedicated language }
        { Ukrainian has no dedicated language }
        { Cambodian has no dedicated language }
        { Samoan has no dedicated language }
        { Indonesian has no dedicated language }
        { Vietnamese has no dedicated language }
        { Arabic has no dedicated language }
        { Polish has no dedicated language }
        { Srnantongo has no dedicated language }
        if ActiveLanguage = 'English' then ItemIndex := {#MDB_ENG_INDEX};
        if ActiveLanguage = 'German' then ItemIndex := {#MDB_DEU_INDEX};
        if ActiveLanguage = 'Spanish' then ItemIndex := {#MDB_ESP_INDEX};
        if ActiveLanguage = 'Italian' then ItemIndex := {#MDB_ITA_INDEX};
        if ActiveLanguage = 'Dutch' then ItemIndex := {#MDB_NLD_INDEX};
        if ActiveLanguage = 'Turkish' then ItemIndex := {#MDB_TRK_INDEX};
        if ActiveLanguage = 'Portuguese' then ItemIndex := {#MDB_PTB_INDEX};
        if ActiveLanguage = 'Swedish' then ItemIndex := {#MDB_SVE_INDEX};
        if ActiveLanguage = 'Danish' then ItemIndex := {#MDB_DAN_INDEX};
        if ActiveLanguage = 'Russian' then ItemIndex := {#MDB_RUS_INDEX};
        if ActiveLanguage = 'Finnish' then ItemIndex := {#MDB_FIN_INDEX};
        if ActiveLanguage = 'Albanian' then ItemIndex := {#MDB_SQI_INDEX};
        if ActiveLanguage = 'French' then ItemIndex := {#MDB_FRA_INDEX};
        if ActiveLanguage = 'Greek' then ItemIndex := {#MDB_ELL_INDEX};
        if ActiveLanguage = 'Romanian' then ItemIndex := {#MDB_ROM_INDEX};

  end;

  Result := Page.ID;
end;

附录

上面的自定义页面需要这些定义:

; Language descriptions
#define LANG_ENG "'English'"
#define LANG_ESP "'Español'"
#define LANG_DEU "'Deutsch'"
#define LANG_ITA "'Italiano'"
#define LANG_NLD "'Nederlands'"
#define LANG_TRK "'Türkçe'"
#define LANG_PTB "'Português'"
#define LANG_SVE "'Svenska'"
#define LANG_DAN "'Dansk'"
#define LANG_RUS "'Русский'"
#define LANG_FIN "'Suomi'"
#define LANG_AFK "'Afrikaans'"
#define LANG_CHS "'汉语(简化字)'"
#define LANG_SQI "'Shqip'"
#define LANG_FRA "'Française'"
#define LANG_BGR "'Български'"
#define LANG_TWI "'Akan'"
#define LANG_FPO "'Tagalog'"
#define LANG_SWK "'Kiswahili'"
#define LANG_ELL "'Ελληνική'"
#define LANG_UKR "'Українська'"
#define LANG_KHM "'Cambodian'"
#define LANG_ROM "'Română'"
#define LANG_SMO "'Faa-Sāmoa'"
#define LANG_IND "'Indonesia'"
#define LANG_VIT "'Vietnamese'"
#define LANG_ARA "'العربية'"
#define LANG_PLK "'Polski'"
#define LANG_SRN "'Sranantongo'"

如果我们删除MDB_XXX_LANG常量

那么我们还需要考虑:

{ event called when the Ready page (summary) is about to be displayed }
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
    strText: String;
begin
  { Fill the 'Ready Memo' with the normal settings and the custom settings }
  strText := '';

  strText := strText + MemoDirInfo + NewLine + NewLine;
  strText := strText + MemoGroupInfo + NewLine + NewLine;
  strText := strText + MemoTasksInfo + NewLine + NewLine;

  if (not IsUpgrading) then
  begin
    strText := strText + ExpandConstant('{cm:Defaultsettings}') + NewLine;

    { We now test against user settings directly from the page. }
    { Memo text strings are expanding directly. }
    if chkRememberLastCong.Checked = True then
    begin
        strText := strText + Space;
        strText := strText + ExpandConstant('{cm:MemoRememberCongregation}');
        strText := strText + NewLine;
    end;

    if chkDuplicates.Checked = True then
    begin
        strText := strText + Space;
        strText := strText + ExpandConstant('{cm:MemoCheckDuplicates}');
        strText := strText + NewLine;
    end;

    { Database language }
    strText := strText + Space;
    strText := strText + ExpandConstant('{cm:DatabaseLanguage} ');
    if cbDatabase.ItemIndex = {#MDB_ENG_INDEX} then begin
        strText := strText + {#LANG_ENG};
    end else if cbDatabase.ItemIndex = {#MDB_DEU_INDEX} then begin
        strText := strText + {#LANG_DEU};
    end else if cbDatabase.ItemIndex = {#MDB_ESP_INDEX} then begin
        strText := strText + {#LANG_ESP};
    end else if cbDatabase.ItemIndex = {#MDB_ITA_INDEX} then begin
        strText := strText + {#LANG_ITA};
    end else if cbDatabase.ItemIndex = {#MDB_NLD_INDEX} then begin
        strText := strText + {#LANG_NLD};
    end else if cbDatabase.ItemIndex = {#MDB_TRK_INDEX} then begin
        strText := strText + {#LANG_TRK};
    end else if cbDatabase.ItemIndex = {#MDB_SVE_INDEX} then begin
        strText := strText + {#LANG_SVE};
    end else if cbDatabase.ItemIndex = {#MDB_PTB_INDEX} then begin
        strText := strText + {#LANG_PTB};
    end else if cbDatabase.ItemIndex = {#MDB_DAN_INDEX} then begin
        strText := strText + {#LANG_DAN};
    end else if cbDatabase.ItemIndex = {#MDB_RUS_INDEX} then begin
        strText := strText + {#LANG_RUS};
    end else if cbDatabase.ItemIndex = {#MDB_FIN_INDEX} then begin
        strText := strText + {#LANG_FIN};
    end else if cbDatabase.ItemIndex = {#MDB_AFK_INDEX} then begin
        strText := strText + {#LANG_AFK};
    end else if cbDatabase.ItemIndex = {#MDB_CHS_INDEX} then begin
        strText := strText + {#LANG_CHS};
    end else if cbDatabase.ItemIndex = {#MDB_SQI_INDEX} then begin
        strText := strText + {#LANG_SQI};
    end else if cbDatabase.ItemIndex = {#MDB_FRA_INDEX} then begin
        strText := strText + {#LANG_FRA};
    end else if cbDatabase.ItemIndex = {#MDB_BGR_INDEX} then begin
        strText := strText + {#LANG_BGR};
    end else if cbDatabase.ItemIndex = {#MDB_TWI_INDEX} then begin
        strText := strText + {#LANG_TWI};
    end else if cbDatabase.ItemIndex = {#MDB_FPO_INDEX} then begin
        strText := strText + {#LANG_FPO};
    end else if cbDatabase.ItemIndex = {#MDB_SWK_INDEX} then begin
        strText := strText + {#LANG_SWK};
    end else if cbDatabase.ItemIndex = {#MDB_ELL_INDEX} then begin
        strText := strText + {#LANG_ELL};
    end else if cbDatabase.ItemIndex = {#MDB_UKR_INDEX} then begin
        strText := strText + {#LANG_UKR};
    end else if cbDatabase.ItemIndex = {#MDB_KHM_INDEX} then begin
        strText := strText + {#LANG_KHM};
    end else if cbDatabase.ItemIndex = {#MDB_ROM_INDEX} then begin
        strText := strText + {#LANG_ROM};
    end else if cbDatabase.ItemIndex = {#MDB_SMO_INDEX} then begin
        strText := strText + {#LANG_SMO};
    end else if cbDatabase.ItemIndex = {#MDB_IND_INDEX} then begin
        strText := strText + {#LANG_IND};
    end else if cbDatabase.ItemIndex = {#MDB_VIT_INDEX} then begin
        strText := strText + {#LANG_VIT};
    end else if cbDatabase.ItemIndex = {#MDB_ARA_INDEX} then begin
        strText := strText + {#LANG_ARA};
    end else if cbDatabase.ItemIndex = {#MDB_PLK_INDEX} then begin
        strText := strText + {#LANG_PLK};
    end else if cbDatabase.ItemIndex = {#MDB_SRN_INDEX} then begin
        strText := strText + {#LANG_SRN};
    end;
    strText := strText + NewLine;
  end;

  Result := strText;
end;

1 个答案:

答案 0 :(得分:1)

使用此预处理程序代码:

[Code]
var
  cbDatabase: TNewListBox;

{ Returns True if the user selected the same database language in the combo }
function CheckMDBLang(LangText: string): boolean;
begin
  Result := (cbDatabase.Text = LangText);
end;

#define DatabaseFiles() \
    DatabaseFile('English', 'English') + \
    DatabaseFile('Spanish', 'Español')

[Files]
#define DatabaseFile(Name, Text) \
    'Source: "..\inno\Databases\' + Name + '.mdb"; DestDir: "{app}"; ' + \
    'DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; ' + \
    'Attribs: readonly; Check: CheckMDBLang(''' + Text + ''')' + NewLine + \
    'Source: "..\inno\Databases\' + Name + '.accdb"; DestDir: "{app}"; ' + \
    'DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; ' + \
    'Attribs: readonly; Check: CheckMDBLang(''' + Text + ''')' + NewLine

{#DatabaseFiles}

[Code]

function AppSettings_CreatePage(PreviousPageId: Integer): Integer;
begin
  cbDatabase := TNewComboBox.Create(Page);
  with cbDatabase do
  begin
    #define DatabaseFile(Name, Text) \
        'Items.Add(''' + Text + ''');' + NewLine + \
        'if ActiveLanguage = ''' + Name + ''' then ItemIndex := Items.Count - 1;' + NewLine

    {#DatabaseFiles}
  end;
end;

您将获得:

[Files]
Source: "..\inno\Databases\English.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang('English')
Source: "..\inno\Databases\English.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang('English')
Source: "..\inno\Databases\Spanish.mdb"; DestDir: "{app}"; DestName: "Default.mdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang('Spanish')
Source: "..\inno\Databases\Spanish.accdb"; DestDir: "{app}"; DestName: "Default.accdb"; Flags: overwritereadonly uninsremovereadonly; Attribs: readonly; Check: CheckMDBLang('Spanish')

[Code]

function AppSettings_CreatePage(PreviousPageId: Integer): Integer;
begin
  cbDatabase := TNewComboBox.Create(Page);
  with cbDatabase do
  begin
    Items.Add('English');
    if ActiveLanguage = 'English' then ItemIndex := Items.Count - 1;
    Items.Add('Español');
    if ActiveLanguage = 'Spanish' then ItemIndex := Items.Count - 1;
  end;
end;

您根本不需要定义所有这些索引。

(未经测试)

UpdateReadyMemo中,您可以将所有语言代码替换为一行:

strText := strText + cbDatabase.Text;