CapsLosk
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору NightW0lf Спасибо - попробую. А вот такой вопрос: Вот скрипт: //Возвращение к первоначальному фону при помощи (procedure DeinitializeSetup();) #include "isxbb.iss" [Setup] AppName=Принц Персии - Пески времяни AppVerName=игру DefaultDirName=D:\Games\My Program DefaultGroupName=My Program AllowNoIcons=yes OutputBaseFilename=Setup SetupIconFile=PrinceOfPersia.ico Compression=none SolidCompression=true DiskSpanning=true DiskSliceSize=730000000 InternalCompressLevel=none WindowVisible=true BackColor=clBlack [Languages] Name: russian; MessagesFile: compiler:Languages\Russian.isl [Tasks] Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons} [Files] Source: Splash.exe; DestDir: {tmp}; Flags: dontcopy Source: BMP\My_Image.bmp; DestDir: {tmp}; Flags: dontcopy Source: GIF\2.gif; DestDir: {tmp}; Flags: dontcopy Source: GIF\3.gif; DestDir: {tmp}; Flags: dontcopy Source: GIF\4.gif; DestDir: {tmp}; Flags: dontcopy Source: GIF\5.gif; Flags: dontcopy Source: GIF\6.gif; DestDir: {tmp}; Flags: dontcopy Source: GIF\7.gif; DestDir: {tmp}; Flags: dontcopy Source: Audio\sound.wav; Flags: dontcopy Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy Source: BMP\pic1.BMP; DestDir: {tmp}; Flags: dontcopy Source: BMP\pic2.BMP; DestDir: {tmp}; Flags: dontcopy Source: BMP\pic3.BMP; DestDir: {tmp}; Flags: dontcopy Source: {sys}\*.dll; DestDir: {tmp}; Flags: external ;для демонстпации [Icons] Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe} Name: {userdesktop}\My Program; Filename: {app}\My Program.EXE; Tasks: desktopicon [Run] Filename: {app}\PrinceOfPersia.EXE; Description: {cm:LaunchProgram,Принц Персии - Пески времяни}; Flags: nowait postinstall skipifsilent [Code] type TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord); var BackgroundBitmapImage: TBitmapImage; TimerID: LongWord; function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall'; function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall'; function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer; external 'sndPlaySoundA@winmm.dll stdcall'; function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall'; function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall'; function InitializeSetup(): Boolean; var sLocation: String; iShowCmd: Integer; iErrorCode: Integer; bRun: Boolean; Form: TSetupForm; ProgressBar: TNewProgressBar; begin Form := CreateCustomForm(); try Form.ClientWidth := ScaleX(250); //длина формы Form.ClientHeight := ScaleY(60); //высота формы Form.Caption := 'Подготовка к установке'; Form.Center; ProgressBar := TNewProgressBar.Create(Form); ProgressBar.Left := ScaleX(11); //отступ индикатора установки в форме, от левого края формы ProgressBar.Top := ScaleX(12); //отступ индикатора установки в форме, от верхнего края формы ProgressBar.Width := Form.Width - (2 * ProgressBar.Left)-7; //выщитывается длина индикатора установки (если расстояние между индикатором //и формой с обоих сторон не одинаково, то после скобки дописываем через (+) или (-) (взависимости от того куда мы хотим //сдвинуть индикатор, влево (-) или право(+)) цифру). НАПРИМЕР: ProgressBar.Width := Form.Width - (2 * ProgressBar.Left)-7; ProgressBar.Height := ScaleX(16); //высота индикатора установки ProgressBar.Parent := Form; ProgressBar.Min:= 0; //длина индикатора установки - от (0) ProgressBar.Max:= 30; //до (30) ProgressBar.Position := 0; Form.Show(); ExtractTemporaryFile('splash.exe'); //Извлечение "временной" программы. ProgressBar.Position:= ProgressBar.Position + 3; ExtractTemporaryFile('pic1.bmp'); //Извлечение "временной" программы. ProgressBar.Position:= ProgressBar.Position + 1; ExtractTemporaryFile('pic2.bmp'); //Извлечение "временной" программы. ProgressBar.Position:= ProgressBar.Position + 1; ExtractTemporaryFile('pic3.bmp'); //Извлечение "временной" программы. ProgressBar.Position:= ProgressBar.Position + 1; ExtractTemporaryFile('My_Image.bmp'); ProgressBar.Position:= ProgressBar.Position + 3; ExtractTemporaryFile('2.gif'); ProgressBar.Position:= ProgressBar.Position + 3; ExtractTemporaryFile('3.gif'); ProgressBar.Position:= ProgressBar.Position + 3; ExtractTemporaryFile('4.gif'); ProgressBar.Position:= ProgressBar.Position + 3; ExtractTemporaryFile('5.gif'); ProgressBar.Position:= ProgressBar.Position + 3; ExtractTemporaryFile('6.gif'); ProgressBar.Position:= ProgressBar.Position + 3; ExtractTemporaryFile('7.gif'); ProgressBar.Position:= ProgressBar.Position + 3; ExtractTemporaryFile(ExpandConstant('sound.wav')); //Извлекаем звуковой файл во временную папку ProgressBar.Position:= ProgressBar.Position + 3; finally Form.Free(); end; sLocation := ExpandConstant('{tmp}'); //bRun := Exec(sLocation + '\splash.exe', '', sLocation, SW_SHOW, ewWaitUntilTerminated, iErrorCode); //запуск "временной" программы. Result := True; end; procedure InitializeWizard(); var s:string; width, height:Integer; bitmap:TBitmap; begin WizardForm.CancelButton.BringToFront; end; procedure CurStepChanged(CurStep: TSetupStep); var res:Integer; s, ResultStr:string; begin if CurStep=ssInstall then begin sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001); //Проигрываем файл. Здесь указаны параметры для повторного //проигрывания. Если мы хотим проиграть файл единожды, удаляем параметр 'or $0008' isxbb_AddImage(ExpandConstant('{tmp}')+'\1.gif',BOTTOM or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\2.gif',BOTTOM or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\3.gif',BOTTOM or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\4.gif',BOTTOM or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\5.gif',BOTTOM or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\6.gif',BOTTOM or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\7.gif',BOTTOM or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\1.gif',TOP or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\2.gif',TOP or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\3.gif',TOP or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\4.gif',TOP or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\5.gif',TOP or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\6.gif',TOP or TIMER); isxbb_AddImage(ExpandConstant('{tmp}')+'\7.gif',TOP or TIMER); isxbb_Init(StrToInt(ExpandConstant('{hwnd}'))); isxbb_StartTimer(1,TOP) end; end; function PercentProgress(): Integer; begin with WizardForm.ProgressGauge do begin Result:= (Position-Min)/((Max - Min)/100) ; end; end; procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord); var percent: integer; begin percent:= PercentProgress; with BackgroundBitmapImage do begin if ((percent > 0) and (percent < 30) and (Tag <> 1)) then begin Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic1.bmp'); Visible := true; Tag:= 1; end else if ((percent > 31) and (percent < 51) and (Tag <> 2)) then begin Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic2.bmp'); Visible := true; Tag:= 2; end else if ((percent > 52) and (percent < 70) and (Tag <> 3)) then begin Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic3.bmp'); Visible := true; Tag:= 3; end; if (percent >= 98) then //на скольки процентах будет возвращение в исзодное состояние при помощи (procedure DeinitializeSetup();) //в конце скрипта begin Visible := False; end; end; end; procedure CurPageChanged(CurPageID: Integer); var pfunc: LongWord; begin if CurPageID=wpInstalling then begin WizardForm.MainPanel.Visible:=False; WizardForm.Bevel1.Visible:=False; WizardForm.Width:=ScaleX(226); //Длина переносимого главного окна индикатора установки. WizardForm.Height:=ScaleY(89); //Высота переносимого главного окна индикатора установки. //Здесь смещение страницы установки (в верхний левый угол) WizardForm.Left:=ScaleX(0); WizardForm.Top:=ScaleY(0); {Внимание! Нижеописанные способы смещения работают только когда вставлено фоновое изображение или WindowVisible=yes} {Выводит в правом верхнем углу экрана} //WizardForm.Left:=ScaleX(MainForm.Width-420); //WizardForm.Top:=ScaleY(MainForm.Left+20); {Выводит снизу по центру экрана} //WizardForm.Position:=poScreenCenter; //WizardForm.Top:=ScaleY(MainForm.Height-170); {Выводит в нижнем левом углу (как в Doom 3 Resurrection of Evil от 1C)} //WizardForm.Left:=ScaleX(MainForm.Left+20); //WizardForm.Top:=ScaleY(MainForm.Height-170); {Выводит в нижнем правом углу} //WizardForm.Left:=ScaleX(MainForm.Width-420); //WizardForm.Top:=ScaleY(MainForm.Height-170); WizardForm.InnerNotebook.Left:=ScaleX(6); //Отступ от левого края, в главном окне индикатора установки, самого индикатора установки. WizardForm.InnerNotebook.Top:=ScaleY(5); //Отступ от верхнего края, в главном окне индикатора установки, самого индикатора установки (Вместе с кнопкой //Отмена). WizardForm.InnerNotebook.Width:=ScaleX(122); //Длина индикатора установки 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(14); //Отступ сверху в главном окне, индикатора установки, пояснений: путь распаковки файлов (верхняя строка). WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width; WizardForm.ProgressGauge.Top:=ScaleY(29); //Отступ от верхнего края, в главном окне индикатора установки, самого индикатора установки. WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width; WizardForm.CancelButton.Left:=ScaleX(134); //Отступ слева кнопки: Отмена. WizardForm.CancelButton.Top:=ScaleY(33); //Отступ сверху кнопки: Отмена. pfunc:= WrapTimerProc(@OnTimer, 4); TimerID:= SetTimer(0, 0, 500, pfunc); BackgroundBitmapImage := TBitmapImage.Create(MainForm); with BackgroundBitmapImage do begin Left := 50; Top := 100; AutoSize := True; Center := True; Parent := MainForm; Visible := False; // все подготовили, но скрыли. Tag:= 0; end; end; if CurPageID=wpFinished then begin WizardForm.Width:=502; //Размер окна по горизонтали WizardForm.Height:=392; //Размер окна по вертикали WizardForm.Position:=poScreenCenter; //Возврат в исходное состояние end; end; //Возрат к фоновому окну procedure DeinitializeSetup(); begin KillTimer(0, TimerID); end; .////////////////////////////////////////////////////////////////////////////////////////////////////////// В этой части, как я понимаю, BackgroundBitmapImage := TBitmapImage.Create(MainForm); with BackgroundBitmapImage do begin Left := 50; Top := 100; AutoSize := True; Center := True; Parent := MainForm; Visible := False; // все подготовили, но скрыли. Tag:= 0; end; end; Указываются параметры показа дополнительных картинок, но они показываются почемуто не по центру!!! Что не так??? |