|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 3] |
|
Скрипты Inno Setup. Помощь и советы [часть 3]
|
Ветеран Сообщения: 1133 |
Профиль | Отправить PM | Цитировать
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Inno Setup [все вопросы] часть 1 Inno Setup [все вопросы] часть 2 |
|
------- Отправлено: 00:28, 04-11-2010 |
Новый участник Сообщения: 47
|
Профиль | Отправить PM | Цитировать insombia у меня на инстляторе во время распаковки ARC архива прогресс не наполняется что сделать надо не знаешь
|
Отправлено: 00:15, 30-08-2011 | #2951 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 398
|
Профиль | Отправить PM | Цитировать |
Отправлено: 01:10, 30-08-2011 | #2952 |
Ветеран Сообщения: 1270
|
Профиль | Отправить PM | Цитировать Цитата Raf-9600:
|
|
Отправлено: 09:20, 30-08-2011 | #2953 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать El Sanchez, я бы добавил на конце waituntilterminated и WorkingDir
|
------- Последний раз редактировалось R.i.m.s.k.y., 30-08-2011 в 09:50. Отправлено: 09:43, 30-08-2011 | #2954 |
Старожил Сообщения: 242
|
Профиль | Отправить PM | Цитировать Raf-9600, есть такой код от Shegorat может пригодится
|
Отправлено: 09:51, 30-08-2011 | #2955 |
Новый участник Сообщения: 30
|
Профиль | Отправить PM | Цитировать El Sanchez, как сделать чтобы событие наступало сразу после первого клика?
если так, то только после второго procedure TaskOnClick(Sender: TObject); var i:integer; begin if IsTaskSelected('nomer1') or IsTaskSelected('nomer0') then begin for i:=2 to WizardForm.TasksList.Items.Count-1 do begin WizardForm.TasksList.ItemEnabled[i]:= False; end; end; end; procedure InitializeWizard(); begin WizardForm.TasksList.OnClick := @TaskOnClick; end; procedure CurPageChanged(CurPageID: Integer); var i: integer; begin if CurPageID = wpSelectTasks then begin if IsTaskSelected('nomer1') or IsTaskSelected('nomer0') then begin for i:=2 to WizardForm.TasksList.Items.Count-1 do begin WizardForm.TasksList.ItemEnabled[i]:= False; end; end; end; end; |
Отправлено: 11:06, 30-08-2011 | #2956 |
Старожил Сообщения: 398
|
Профиль | Отправить PM | Цитировать Ктонить может объединить код конвертирования OGG
[C0de] var Files: Array of String; S: String; n: Integer; Function StringToArray(Text, Cut: String): array of String; var i, k: Integer; Begin SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк Repeat k:= Pos(Cut,Text); if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE end; SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1; if k = 0 then Result[i]:=Text else begin Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut)); end; Until Length(Text) * k = 0; End; procedure FindFiles(FromDir: String; Mask: String); var FSR, DSR: TFindRec; FindResult: Boolean; begin FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR) while FindResult do begin if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin S:= S + AddBackslash(fromDir) + FSR.Name +'|'; end; FindResult:= FindNext(FSR); end; FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR) while FindResult do begin if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask) end; FindResult:= FindNext(DSR); end; FindClose(FSR); FindClose(DSR) end; procedure RecodeOgg; var ResultCode: integer; CurFile: String; begin FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке Files:= StringToArray(S, '|') //Переводим в массив WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов WizardForm.ProgressGauge.Position:=0 for n:=(GetArrayLength(Files)-1) downto 0 do begin CurFile:= Files[n] StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '') Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер DeleteFile(Files[n]) //Удаляем ненужный файл WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1; end; DeleteFile(ExpandConstant('{app}\oggdec.exe')) end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssPostInstall then RecodeOgg; end; #define TIME_FOR_VIEW 10 [C0de] procedure ChangeCaption(str: string); begin WizardForm.StatusLabel.Caption:= str; end; function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall'; function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall'; var Info: TNewStaticText; InfoCaption: TNewStaticText; InfoPanel: TPanel; NeedSize:Integer; FreeMB, TotalMB: Cardinal; NeedSpaceLabel: TLabel; n: Integer; VolumeName, FileSystemName: String; VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint; ListBox: TListBox; StartMenuTreeView: TStartMenuFolderTreeView; procedure GetFreeSpaceCaption(Sender: TObject); var Path: String; begin Path := ExtractFileDrive(WizardForm.DirEdit.Text); GetSpaceOnDisk(Path, True, FreeMB, TotalMB); if FreeMB < NeedSize then WizardForm.NextButton.Enabled := False else WizardForm.NextButton.Enabled := True; end; procedure GetNeedSpaceCaption; begin if NeedSize > 1024 then NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end; const oneMB= 1024*1024; function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall'; function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall'; function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall'; function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall'; Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)} Begin if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб' StringChange(Result, ',', '.') End; Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов } Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End; Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов} Begin if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength) else Result:= String; End; Procedure GetDiskInfo(Disk: String); Begin FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256); GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31); FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки'; End; Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin ListBox.Items.Clear for n:= 1 to 31 do // диск 'А' пропустить if (GetLogicalDrives and (1 shl n)) > 0 then if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':'); for n:= 0 to ListBox.Items.Count -1 do begin Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление } if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path); if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10); if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String; ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end; End; Procedure ObjectOnClick(Sender: TObject); Begin Case TObject(Sender) of ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text)) StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}' WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end; end; End; procedure InitializeWizard1(); begin with WizardForm do begin with MainPanel do Height := Height - 1; with WizardSmallBitmapImage do begin Left := 0; Top := 0; Height := 58; //Размер рисунка Width := 497; // end; with PageNameLabel do begin Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст Left := Left + 497; // end; with PageDescriptionLabel do begin Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст Left := Left + 497; // end; end; end; procedure InitializeWizard2(); begin NeedSize := 2500; //Здесь указывается место для приложения WizardForm.DiskSpaceLabel.Hide; NeedSpaceLabel := TLabel.Create(WizardForm); with NeedSpaceLabel do begin Parent := WizardForm.SelectDirPage; Left := ScaleX(0); Top := ScaleY(220); Width := ScaleX(209); Height := ScaleY(13); end; ListBox:= TListBox.Create(WizardForm) ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12)) ListBox.Font.Size:= 9 ListBox.Font.Style:= [] ListBox.Font.Name:= 'Courier New'; ListBox.OnClick:= @ObjectOnClick; ListBox.Parent:= WizardForm.SelectDirPage; WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption; WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0; end; procedure CurPageChanged1(CurPageID: Integer); begin if CurPageID=wpSelectDir then begin GetNeedSpaceCaption; if FreeMB < NeedSize then WizardForm.NextButton.Enabled:=False ListBoxRefresh end; end; procedure InitializeWizard3(); begin WizardForm.TYPESCOMBO.Visible:= false; WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top; WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top; WizardForm.ComponentsList.Width := ScaleX(200); InfoPanel := TPanel.Create(WizardForm); InfoPanel.Parent := WizardForm.SelectComponentsPage; InfoPanel.Caption := ''; InfoPanel.Top := WizardForm.ComponentsList.Top; InfoPanel.Left := ScaleX(216); InfoPanel.Width := ScaleX(200); InfoPanel.Height := WizardForm.ComponentsList.Height; InfoPanel.BevelInner := bvRaised; InfoPanel.BevelOuter := bvLowered; InfoCaption := TNewStaticText.Create(WizardForm); InfoCaption.Parent := WizardForm.SelectComponentsPage; InfoCaption.Caption := 'Описание'; InfoCaption.Left := ScaleX(224); InfoCaption.Top := InfoPanel.Top - ScaleY(5); InfoCaption.Font.Color := clActiveCaption; Info := TNewStaticText.Create(WizardForm); Info.Parent := InfoPanel; Info.AutoSize := False; Info.Left := ScaleX(6); Info.Width := ScaleX(188); Info.Top := ScaleY(12); Info.Height := WizardForm.ComponentsList.Height - ScaleY(18); Info.Caption := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.'; Info.WordWrap := true; //Впишыте описание компонентов enabledesc(WizardForm.ComponentsList.Handle,Info.Handle, 'Выберите язык внутриигрового текста;'+ //Text 'Немецкий текст;'+ 'Испанский текст;'+ 'Французский текст;'+ 'Итальянский текст;'+ 'Польский текст;'+ 'Выберите этот пункт, если вы хотите установить внутриигровую музыку. Учтите, что её можно отключить даже после инсталляции, в меню опций игры.;' // Music ); end; function ShouldSkipPage(CurPage: Integer): Boolean; begin if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then case CurPage of wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectProgramGroup, wpInfoAfter: Result := True; end; end; const WM_LBUTTONDOWN = 513; WM_LBUTTONUP = 514; procedure InitializeWizard4(); begin if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then begin PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0); PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0); end; end; procedure CurPageChanged2(CurPageID: Integer); begin if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and (CurPageID = wpSelectComponents) then WizardForm.BackButton.Visible := False; end; //Проверка на оставшыеся файлы procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); var Res: Integer; begin case CurUninstallStep of usPostUninstall: begin if DirExists(ExpandConstant('{app}')) then if ExpandConstant('{language}') = 'ua' then case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 + '"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 + '"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 + '"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of IDYES: if not DelTree(ExpandConstant('{app}'), True, True, True) then MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK); IDNO: if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK); IDCANCEL:; end else if ExpandConstant('{language}') = 'ru' then case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 + '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 + '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 + '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of IDYES: if not DelTree(ExpandConstant('{app}'), True, True, True) then MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK); IDNO: if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK); IDCANCEL:; end else case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 + '"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 + '"No" to open the directory with explorer to delete the files manually.'#13#13 + '"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of IDYES: if not DelTree(ExpandConstant('{app}'), True, True, True) then MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK); IDNO: if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK); IDCANCEL:; end end end end; const n1=28; //количество слайдов type TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord); TRandNumbers = array[1..N1] of byte; function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:InnoCallback.dll stdcall'; 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 get_unique_random_number(X:byte):TRandNumbers; var A,b,c: string; i,j,k:byte; begin For i:=1 to X do A:=A+chr(i); B:=''; For i:=1 to X do begin j:=Random(Length(A)-1)+1; C:=''; B:=B + A[j]; for k:=1 to Length(A) do if k<>j then C:=C+A[k]; A:=C; end; for i:=1 to X do Result[i]:=ord(B[i]); end; var TimerID: LongWord; currTime: Integer; SplashImage: TBitmapImage; StatusMessages: TNewStaticText; bmp: TRandNumbers; z:byte; procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord); begin currTime := currTime + 1; if (currTime mod {#TIME_FOR_VIEW} = 0) then begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp')); if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0; end; end; procedure InitializeWizard5; begin bmp:=get_unique_random_number(N1); ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp'); currTime := 0; WizardForm.ProgressGauge.Parent := WizardForm; WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12); WizardForm.ProgressGauge.Left := ScaleX(10); WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20); WizardForm.ProgressGauge.Height := 16; WizardForm.ProgressGauge.Hide; WizardForm.StatusLabel.Parent := WizardForm; WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18); WizardForm.StatusLabel.Left := ScaleX(10); WizardForm.StatusLabel.Width := ScaleX(397); WizardForm.StatusLabel.Hide; SplashImage := TBitmapImage.Create(WizardForm); SplashImage.Top := 0; SplashImage.Left := 0; SplashImage.Width := WizardForm.MainPanel.Width; SplashImage.Height := WizardForm.Bevel.Top; SplashImage.Parent := WizardForm.InnerPage; SplashImage.Stretch := True; SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp')); SplashImage.Hide; end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssInstall then begin WizardForm.StatusLabel.Caption := 'Распаковка слайдов...'; for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp'); end; end; procedure CurPageChanged3(CurPageID: Integer); var pfunc: LongWord; begin if (CurPageID = wpInstalling) then begin pfunc := WrapTimerProc(@OnTimer, 5); TimerID := SetTimer(0, 0, 1000, pfunc); WizardForm.PageNameLabel.Visible := False; WizardForm.PageDescriptionLabel.Visible := False; WizardForm.InnerNotebook.Hide; WizardForm.Bevel1.Hide; WizardForm.MainPanel.Hide; WizardForm.PageNameLabel.Hide; WizardForm.PageDescriptionLabel.Hide; WizardForm.ProgressGauge.Show; WizardForm.StatusLabel.Show; SplashImage.Show; WizardForm.CancelButton.Enabled := True; WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100); end else begin WizardForm.ProgressGauge.Hide; SplashImage.Hide; WizardForm.FileNameLabel.Hide; WizardForm.StatusLabel.Hide; if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then begin WizardForm.InnerNotebook.Show; WizardForm.Bevel1.Show; WizardForm.MainPanel.Show; WizardForm.PageNameLabel.Show; WizardForm.PageDescriptionLabel.Show; end; If CurPageID = wpFinished then end; end; procedure CurPageChanged4(CurPageID: Integer); begin if CurPageID = wpInstalling then WizardForm.BeveledLabel.hide; if CurPageID = wpInfoAfter then WizardForm.BeveledLabel.show; end; procedure InitializeWizard; begin InitializeWizard1(); InitializeWizard2(); InitializeWizard3(); InitializeWizard4(); InitializeWizard5(); end; procedure CurPageChanged(CurPageID: Integer); begin CurPageChanged1(CurPageID); CurPageChanged2(CurPageID); CurPageChanged3(CurPageID); CurPageChanged4(CurPageID); end; procedure DeinitializeSetup(); begin disabledesc(); KillTimer(0, TimerID); end; И ещё три просьбы, касательно кода для конвертирования OGG: 1. Можно ли сделать чтоб он запускался только если выбран компонент VoiceD2 или VoiceLoD? 2. Можно ли сделать чтоб во время его выполнения, отображалась определённая надпись в StatusLabel? 3. Ктонить способен модифицировать его так, чтобы он запускался ДО начала выполнения секции [Run]? |
Последний раз редактировалось Raf-9600, 30-08-2011 в 16:08. Отправлено: 15:08, 30-08-2011 | #2957 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Raf-9600,
1. используй функцию IsComponentSelected('VoiceD2 ') 2. да можно, делай. вызывай откуда хочешь эту процедуру примерно так: ChangeCaption('Будь мужиком, прочти справку!') 3. я способен, читай в справке procedure CurStepChanged(CurStep: TSetupStep); Called with CurStep=ssInstall just before the actual installation starts, with CurStep=ssPostInstall just after the actual installation finishes, and with CurStep=ssDone just before Setup terminates after a successful install. procedure CurPageChanged(CurPageID: Integer); wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished |
------- Отправлено: 16:31, 30-08-2011 | #2958 |
Старожил Сообщения: 398
|
Профиль | Отправить PM | Цитировать Цитата R.i.m.s.k.y.:
Только я не догоняю, где именно? Цитата R.i.m.s.k.y.:
procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssPostInstall then RecodeOgg; begin WizardForm.StatusLabel.Caption := 'Конвертация ogg...'; end; end; Цитата R.i.m.s.k.y.:
|
|||
Отправлено: 16:54, 30-08-2011 | #2959 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать программирование надо чуток знать, оно упорядочивает мышление
вот ты чего хочешь? чтобы при выбранных компонентах запустилось перекодирование, значит пиши if (IsComponentSelected('VoiceD2') and IsComponentSelected('VoiceLoD') ) then RecodeOgg; а когда? когда CurStep = ssPostInstall но хорошо бы написать что нужно подождать, значит добавляем ChangeCaption('Конвертация ogg, иди покури'); но добавить надо перед перекодированием, а то перекодируем, потом напишем и никто не заметит, ведь все выполняется последовательно значит все вместе будет procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssPostInstall then begin if (IsComponentSelected('VoiceD2') and IsComponentSelected('VoiceLoD') ) then begin ChangeCaption('Конвертация ogg, иди покури'); RecodeOgg; end; //if IsComponentSelected end; //CurStep = ssPostInstall end;//CurStepChanged |
------- Отправлено: 17:04, 30-08-2011 | #2960 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Утилиты - [addon] Inno Setup | CrOsP | Наборы обновлений для Windows XP/2003/Windows 7 | 33 | 11-05-2011 16:03 | |
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] | Serega | Автоматическая установка приложений | 2651 | 08-11-2010 18:34 | |
Inno Setup 5.3.6 | OSZone Software | Новости программного обеспечения | 0 | 15-11-2009 17:30 | |
Скрипты Inno Setup Compiler | QAZAK | Автоматическая установка приложений | 7 | 15-01-2007 17:59 | |
Inno Setup | tradeukraine | Вебмастеру | 3 | 13-06-2006 20:39 |
|