NightW0lf
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код: ; Интерфейс установки максимально приближенный к InstallShield(я так думаю)реализованный стандартными(почти)средствами Inno Setup.Для создания слйд - шоу используется библиотека IsXbb. ; Используется Splash - заставка. ; При запуске инсталлятора отсутствует "мозолящий" глаза синий фон и имя программы. ; Скачать IsXbb.dll можно с http: //www.istool.org или http://data.cod.ru/381517258. Размер - ~33 Кб. [Setup] LicenseFile=License.rtf InfoBeforeFile=Readme_rus.rtf ; Язык всех диалогов в инсталляторе: [Languages] Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" [Files] ; RTF файлы Source: "C:\License.rtf"; DestDir: {tmp}; Flags: dontcopy noencryption Source: "C:\Readme_rus.rtf"; DestDir: {tmp}; Flags: dontcopy noencryption ; Библиотека для возможности проигрывания.mp3 музыки Source: "C:\bass.dll"; DestDir: " {tmp} "; Flags: dontcopy noencryption nocompression ; .mp3 музыка Source: "C:\Human1.mp3"; DestDir: " {tmp} "; Flags: dontcopy noencryption nocompression ; Рисунок используемый для отображения на странице подготовки(увидете - поймёте) Source: "C:\Program Files\Inno Setup 5\WizModernSmallImage.bmp"; DestDir: {tmp}; Flags: dontcopy; ; Так же используется на странице подготовки как Splash - заставка Source: "C:\Splash.bmp"; DestDir: {tmp}; Flags: dontcopy; ; В качестве фона используется изоброжение в формате.bmp.Уменьшить размер файла(почти без видимых потерь)монжо в Adobe Photoshop(Image = > Mode = > Idexed Color = > Palette: Local(_ANY_)) Source: "C:\Image.bmp"; DestDir: {tmp}; Flags: dontcopy; ; Библиотека для создания слайд - сшоу Source: "C:\IsXbb.dll"; DestDir: {tmp}; Flags: dontcopy; ; Файлы для слайд - сшоу(их может быть и больше) Source: "C:\1.jpg"; DestDir: {tmp}; Flags: dontcopy; Source: "C:\2.jpg"; DestDir: {tmp}; Flags: dontcopy; Source: "C:\3.jpg"; DestDir: {tmp}; Flags: dontcopy; Source: "C:\4.jpg"; DestDir: {tmp}; Flags: dontcopy; Source: "C:\5.jpg"; DestDir: {tmp}; Flags: dontcopy; ; Файлы проекта ; Source: "Work\ * . * "; DestDir: " {app} "; Flags: overwritereadonly ignoreversion recursesubdirs createallsubdirs; [Code] const {"1,2,3,4" - в разных углах, "5" - по центру, "6" - растянуть изображения} BACKGROUND = 6; TIMER = 16; BASS_ACTIVE_STOPPED = 0; BASS_ACTIVE_PLAYING = 1; BASS_ACTIVE_STALLED = 2; BASS_ACTIVE_PAUSED = 3; BASS_SAMPLE_LOOP = 4; function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer; external 'isxbb_AddImage@files:isxbb.dll stdcall'; function isxbb_Init(hWnd: Integer): Integer; external 'isxbb_Init@files:isxbb.dll stdcall'; function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer; external 'isxbb_StartTimer@files:isxbb.dll stdcall'; function isxbb_KillTimer(Flags: Cardinal): Integer; external 'isxbb_KillTimer@files:isxbb.dll stdcall'; function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall'; function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload'; function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload'; function BASS_Start(): Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload'; function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload'; function BASS_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload'; function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload'; function BASS_Stop(): Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload'; function BASS_Pause(): Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload'; function BASS_Free(): Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload'; var mp3Handle: HWND; mp3Name: string; Splash: TSetupForm; function InitializeSetup(): Boolean; begin ExtractTemporaryFile('BASS.dll'); ExtractTemporaryFile('Human1.mp3'); mp3Name := ExpandConstant('{tmp}\Human1.mp3'); BASS_Init(-1, 44100, 0, 0, 0); mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP); BASS_Start(); BASS_ChannelPlay(mp3Handle, False); Result := True; end; procedure PlayButtonOnClick(Sender: TObject); begin case BASS_ChannelIsActive(mp3Handle) of BASS_ACTIVE_PAUSED: begin BASS_ChannelPlay(mp3Handle, False); end; BASS_ACTIVE_STOPPED: begin BASS_Init(-1, 44100, 0, 0, 0); mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP); BASS_Start(); BASS_ChannelPlay(mp3Handle, False); end; end; end; procedure PauseButtonOnClick(Sender: TObject); begin BASS_ChannelPause(mp3Handle); end; procedure StopButtonOnClick(Sender: TObject); begin BASS_Stop(); BASS_Free(); end; procedure InitializeWizard(); var BackgroundBitmapImage: TBitmapImage; s: string; Form: TSetupForm; Width, Height: Integer; ProgressBar: TNewProgressBar; CancelButton: TButton; StaticText: TNewStaticText; BitmapImage: TBitmapImage; BitmapImage1: TBitmapImage; BitmapFileName: string; License: string; Readmerus: string; i: Integer; Name1: string; PlayButton, PauseButton, StopButton: TButton; Text: TNewStaticText; Panel1: TPanel; begin WizardForm.Position := poScreenCenter; MainForm.BORDERSTYLE := bsNone; WizardForm.CancelButton.BringToFront; {****************************************** [Для корректного отображения "License.rtf"] *********************************} ExtractTemporaryFile('License.rtf'); LoadStringFromFile(ExpandConstant('{tmp}') + '\License.rtf', License) WizardForm.LicenseMemo.RTFText := License; {****************************************** [Для корректного отображения "License.rtf"] *********************************} {****************************************** [Для корректного отображения "Readme_rus.rtf"] ******************************} ExtractTemporaryFile('Readme_rus.rtf'); LoadStringFromFile(ExpandConstant('{tmp}') + '\Readme_rus.rtf', Readmerus) WizardForm.InfoBeforeMemo.RTFText := Readmerus; {****************************************** [Для корректного отображения "Readme_rus.rtf"] ******************************} Splash := CreateCustomForm; Splash.BorderStyle := bsNone; BitmapImage1 := TBitmapImage.Create(Splash); with BitmapImage1 do begin AutoSize := True; Align := alClient; Left := 0; Top := 0; Stretch := True; Parent := Splash; end; ExtractTemporaryFile('Splash.bmp'); BitmapImage1.Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\Splash.bmp'); Splash.Width := BitmapImage1.Width; Splash.Height := BitmapImage1.Height; Splash.Center; Splash.Show; BitmapImage1.Refresh; Form := CreateCustomForm(); try with Form do begin ClientWidth := ScaleX(380); ClientHeight := ScaleY(120); BorderStyle := bsDialog; Left := GetSystemMetrics(16) - ClientWidth - ScaleX(8); Top := GetSystemMetrics(17) - ClientHeight - ScaleY(8); end; BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp'); ExtractTemporaryFile(ExtractFileName(BitmapFileName)); BitmapImage := TBitmapImage.Create(Form); BitmapImage.Left := ScaleX(8); BitmapImage.Top := ScaleY(8); BitmapImage.AutoSize := True; BitmapImage.Bitmap.LoadFromFile(BitmapFileName); BitmapImage.Parent := Form; StaticText := TNewStaticText.Create(Form); StaticText.Top := BitmapImage.Top; StaticText.Left := BitmapImage.Left + BitmapImage.Width + ScaleX(8) {Надпись которая будет отображатся на странице поготовки} StaticText.Caption := ''#10#13'"______" now preparing to install...'; StaticText.AutoSize := True; StaticText.Parent := Form; CancelButton := TButton.Create(Form); CancelButton.Parent := Form; CancelButton.Width := ScaleX(75); CancelButton.Height := ScaleY(23); CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10); CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10); CancelButton.Caption := 'Cancel'; CancelButton.ModalResult := mrCancel; CancelButton.Cancel := True; Form.Caption := 'Prepering...'; ProgressBar := TNewProgressBar.Create(Form); with ProgressBar do begin Height := CancelButton.Height - ScaleY(8); Width := Form.Width - ScaleX(128); Top := CancelButton.Top; Left := BitmapImage.Left; Parent := Form; Min := 0; Max := 30; Position := 0; end; Form.ActiveControl := CancelButton; Form.Show(); for i := 0 to 30 do begin ProgressBar.Position := i; Form.Repaint; Sleep(400); i := i + 2; end; finally Form.Free(); Splash.Close; Width := GetSystemMetrics(0); Height := GetSystemMetrics(1); MainForm.Width := width; MainForm.Height := height; Width := MainForm.ClientWidth; Height := MainForm.ClientHeight; ExtractTemporaryFile('Image.bmp'); s := ExpandConstant('{tmp}') + '\Image.bmp'; BackgroundBitmapImage := TBitmapImage.Create(MainForm); BackgroundBitmapImage.Bitmap.LoadFromFile(s); BackgroundBitmapImage.Left := 0; BackgroundBitmapImage.Top := 0; BackgroundBitmapImage.Width := width; BackgroundBitmapImage.Height := height; BackgroundBitmapImage.Parent := MainForm; BackgroundBitmapImage.Stretch := True; {Не забудте прописать здесь и ниже правильные имена и количество файлов для слайд-шоу!} ExtractTemporaryFile('1.jpg'); ExtractTemporaryFile('2.jpg'); ExtractTemporaryFile('3.jpg'); ExtractTemporaryFile('4.jpg'); ExtractTemporaryFile('5.jpg'); MainForm.Visible := True; begin Panel1 := TPanel.Create(WizardForm); with Panel1 do begin Panel1.Parent := WizardForm; Panel1.Left := ScaleX(1); Panel1.Top := ScaleY(315); Panel1.Width := ScaleX(165); Panel1.Height := ScaleY(46); Panel1.TabOrder := 0; Panel1.Color := clWhite; Panel1.BevelInner := bvLowered; Panel1.BevelOuter := bvRaised; Panel1.BorderStyle := bsSingle; PlayButton := TButton.Create(WizardForm); PlayButton.Left := 5; PlayButton.Top := 335; PlayButton.Width := 50; PlayButton.Height := 20; PlayButton.Caption := 'play'; PlayButton.OnClick := @PlayButtonOnClick; PlayButton.Parent := WizardForm; PlayButton.Cursor := crHand; PauseButton := TButton.Create(WizardForm); PauseButton.Left := 58; PauseButton.Top := 335; PauseButton.Width := 50; PauseButton.Height := 20; PauseButton.Caption := 'pause'; PauseButton.OnClick := @PauseButtonOnClick; PauseButton.Parent := WizardForm; PauseButton.Cursor := crHand; StopButton := TButton.Create(WizardForm); StopButton.Left := 111; StopButton.Top := 335; StopButton.Width := 50; StopButton.Height := 20; StopButton.Caption := 'stop'; StopButton.OnClick := @StopButtonOnClick; StopButton.Parent := WizardForm; StopButton.Cursor := crHand; Text := TNewStaticText.Create(WizardForm); Text.Caption := 'music'; Text.Parent := WizardForm; Text.Font.Style := Text.Font.Style + [fsUnderline]; Text.Font.Color := clNavy; Text.Top := 319; Text.Left := 71; Text.Color := clWhite; end; end; end; end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssInstall then begin isxbb_AddImage(ExpandConstant('{tmp}') + '\1.jpg', BACKGROUND or TIMER); isxbb_AddImage(ExpandConstant('{tmp}') + '\2.jpg', BACKGROUND or TIMER); isxbb_AddImage(ExpandConstant('{tmp}') + '\3.jpg', BACKGROUND or TIMER); isxbb_AddImage(ExpandConstant('{tmp}') + '\4.jpg', BACKGROUND or TIMER); isxbb_AddImage(ExpandConstant('{tmp}') + '\5.jpg', BACKGROUND or TIMER); isxbb_Init(StrToInt(ExpandConstant('{hwnd}'))); {Указывается время отображения на экране каждого изображения} isxbb_StartTimer(8, BACKGROUND) end else if CurStep = ssPostInstall then isxbb_KillTimer(BACKGROUND); end; procedure CurPageChanged(CurPageID: Integer); var Width, Height: Integer; begin if CurPageID = wpInstalling then begin {Здесь размер окна установки уменьшается, с него убирается всё лишнее и оно смещается в нижний правый угол экрана (не зависит от разрешения)} WizardForm.CancelButton.BringToFront; WizardForm.MainPanel.Visible := False; WizardForm.Bevel1.Visible := False; {Размер получемого окна установки} Width := ScaleX(395); Height := ScaleY(150); WizardForm.Left := GetSystemMetrics(16) - Width - ScaleX(5); WizardForm.Top := GetSystemMetrics(17) - Height - ScaleY(-50); WizardForm.Width := ScaleX(395); WizardForm.Height := ScaleY(150); WizardForm.InnerNotebook.Left := ScaleX(10); WizardForm.InnerNotebook.Top := ScaleY(10); WizardForm.InnerNotebook.Width := ScaleX(370); WizardForm.StatusLabel.Left := ScaleX(0); WizardForm.StatusLabel.Top := ScaleY(0); WizardForm.StatusLabel.Width := WizardForm.InnerNotebook.Width; WizardForm.FileNameLabel.Left := ScaleX(0); WizardForm.FileNameLabel.Top := ScaleY(20); WizardForm.FileNameLabel.Width := WizardForm.InnerNotebook.Width; WizardForm.ProgressGauge.Top := ScaleY(40); WizardForm.ProgressGauge.Width := WizardForm.InnerNotebook.Width; WizardForm.CancelButton.Left := ScaleX(154); WizardForm.CancelButton.Top := ScaleY(80); end if CurPageID = wpFinished then begin {Окно установки принимает стандартный вид} WizardForm.Width := 502; WizardForm.Height := 392; WizardForm.Position := poScreenCenter; end end; procedure DeinitializeSetup(); begin BASS_Stop(); BASS_Free(); end; | | Всего записей: 479 | Зарегистр. 08-11-2006 | Отправлено: 21:56 02-02-2007 | Исправлено: NightW0lf, 21:58 02-02-2007 |
|