123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- unit Setup.SelectLanguageForm;
- {
- Inno Setup
- Copyright (C) 1997-2025 Jordan Russell
- Portions by Martijn Laan
- For conditions of distribution and use, see LICENSE.TXT.
- "Select Language" form
- }
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Setup.SetupForm, StdCtrls, ExtCtrls, NewStaticText, BitmapImage, BidiCtrls;
- type
- TSelectLanguageForm = class(TSetupForm)
- SelectLabel: TNewStaticText;
- LangCombo: TNewComboBox;
- OKButton: TNewButton;
- CancelButton: TNewButton;
- IconBitmapImage: TBitmapImage;
- MainPanel: TPanel;
- Bevel: TBevel;
- public
- constructor Create(AOwner: TComponent); override;
- end;
- function AskForLanguage: Boolean;
- implementation
- uses
- Shared.Struct, SetupLdrAndSetup.Messages, Shared.SetupMessageIDs,
- Setup.MainFunc, Shared.CommonFunc.Vcl;
- {$R *.DFM}
- function AskForLanguage: Boolean;
- { Creates and shows the "Select Language" dialog. Returns True and activates
- the selected language if the user clicks OK, or False otherwise. }
- var
- LangForm: TSelectLanguageForm;
- I, J: Integer;
- LangEntry: PSetupLanguageEntry;
- begin
- LangForm := AppCreateForm(TSelectLanguageForm) as TSelectLanguageForm;
- try
- for I := 0 to Entries[seLanguage].Count-1 do begin
- LangEntry := Entries[seLanguage][I];
- J := LangForm.LangCombo.Items.Add(LangEntry.LanguageName);
- LangForm.LangCombo.Items.Objects[J] := TObject(I);
- end;
- { If there's multiple languages, select the previous language, if available }
- if (shUsePreviousLanguage in SetupHeader.Options) and
- (LangForm.LangCombo.Items.Count > 1) then begin
- { Note: if UsePreviousLanguage is set to "yes" then the compiler does not
- allow AppId to include constants but we should still call ExpandConst
- to handle any '{{'. }
- I := GetPreviousLanguage(ExpandConst(SetupHeader.AppId));
- if I <> -1 then
- LangForm.LangCombo.ItemIndex := LangForm.LangCombo.Items.IndexOfObject(TObject(I));
- end;
- { Select the active language if no previous language was selected }
- if LangForm.LangCombo.ItemIndex = -1 then
- LangForm.LangCombo.ItemIndex := LangForm.LangCombo.Items.IndexOfObject(TObject(ActiveLanguage));
- if LangForm.LangCombo.Items.Count > 1 then begin
- Result := (LangForm.ShowModal = mrOK);
- if Result then begin
- I := LangForm.LangCombo.ItemIndex;
- if I >= 0 then
- SetActiveLanguage(Integer(LangForm.LangCombo.Items.Objects[I]));
- end;
- end
- else begin
- { Don't show language dialog if there aren't multiple languages to choose
- from, which can happen if only one language matches the user's code
- page. }
- Result := True;
- end;
- finally
- LangForm.Free;
- end;
- end;
- { TSelectLanguageForm }
- constructor TSelectLanguageForm.Create(AOwner: TComponent);
- begin
- inherited;
- MainPanel.ParentBackground := False;
- InitializeFont;
- Caption := SetupMessages[msgSelectLanguageTitle];
- SelectLabel.Caption := SetupMessages[msgSelectLanguageLabel];
- OKButton.Caption := SetupMessages[msgButtonOK];
- CancelButton.Caption := SetupMessages[msgButtonCancel];
- IconBitmapImage.InitializeFromIcon(HInstance, 'MAINICON', MainPanel.Color, [32, 48, 64]);
- KeepSizeY := True;
- end;
- end.
|