|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
Ветеран Сообщения: 1269 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z |
|
Отправлено: 16:09, 04-04-2018 |
Старожил Сообщения: 291
|
Профиль | Отправить PM | Цитировать Вопрос к El Sanchez
В посте что выше вы реализовали доступ к SelectLanguageForm в стандартной версии Inno, так может у вас получится реализовать доступ к стандартному окну, что вызывается кнопкой Обзор на странице SelectDirPage, как я понимаю даже в расширенной версии к данному окну доступ закрыт. Интересует не кастомная форма, а хотелось бы знать как там правильно называется Edit и FolderTreeView. Очень нужно для реализации непосредственно на странице SelectDirPage. |
------- Отправлено: 18:56, 10-07-2024 | #1061 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Добрый вечер.
Форум живой? Интересует какая-то активность по Inno Setup. Есть много вопросов, по поисковику многое не нашёл... Но для начала, проинформирую, что в 2к24 данная ссылка на сообщение уже не актуальна, потому что зеркала и прочее уже слишком сильно, к сожалению, устарело. Речь об: "Скрипты инсталляторов для игр - скрипты инсталляторов для игр, (ссылка на сообщение);" Если вдруг у кого остались наработки, меня заинтересовал "Корона скин", тот, который первый. Если нету... то мне бы хоть что-нибудь посмотреть. |
Отправлено: 22:00, 10-07-2024 | #1062 |
Ветеран Сообщения: 1269
|
Профиль | Отправить PM | Цитировать Цитата ZVSRus:
|
|
Отправлено: 10:23, 11-07-2024 | #1063 |
![]() Пользователь Сообщения: 91
|
Профиль | Отправить PM | Цитировать Цитата Gobethron:
Но сейчас лучше использовать новую, современную библиотеку - FMXInno. Она предоставляет намного больше возможностей по кастомизации игровых инсталляторов. На этом же ресурсе вы найдете множество примеров с её использованием (один из них). P.S. Не сочтите за рекламу. |
|
Отправлено: 13:41, 11-07-2024 | #1064 |
Старожил Сообщения: 291
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
Открыв редактором ресурсов Setup.e32 на вкладке TSELECTFOLDERFORM видим object PathEdit: TEdit, подставляю данное имя PathEdit в строку получаю ошибку неизвестный идентификатор, сразу возникает вопрос, или доступа к данному окну нет, или неправильное имя, по этому и спросил как имена этих классов. Но суть вопроса заключалось не в этом. Создал диалоговое окно непосредственно на SelectDirPage, все пути выставляются правильно, все работает, но есть одно НО, заходим через кнопку Обзор, все пути установки по умолчанию правильные и в Edit и в DirTreeView C:\Program Files (x86)\My Application, выбираем путь в корень диска C: жмем ОК, при повторном заходе также пути верны C:\My Application но почему то директория C:\Program Files (x86) не сворачивается как в кастомных формах, В чем причина не пойму, или сделано на самой странице или в чем то другом, вот и спросил об стандартном окне. PS: В Оригинальном установщике R.G. Catalyst 2022-11-16 Ссылка также реализовано на странице SelectDirPage (на панелях) там установка в корень диска D:. меняешь путь в корень диска C:, пака на диске C: появляется но диск D: не сворачивается. Хотя это и не ошибка и не критично, но всё же хотелось отшлифовать до конца. Скрипт скинул в личку. |
|
------- Последний раз редактировалось ZVSRus, 11-07-2024 в 17:31. Отправлено: 16:27, 11-07-2024 | #1065 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Цитата Flix:
Цитата Flix:
К сожалению, скачать эти вещи я не могу - мне пишет, что недостаточно прав. Возможно ли как-то обойти эту проблему?.. ___ На самом деле, вопросов у меня очень много. Мы с командой доделываем масштабный проект, в определённых кругах. И как-то надоели классические скучные инсталляторы. Поэтому, взялись за поиски всяких фич. Начать можно с текущей проблемы... замены курсора. Да, я прошерстил, наверное, весь форум. Видел несколько штук проектов, как это можно сделать. К сожалению, ни один не подошёл под мои "запросики". Нужно чтобы кастомный (пользовательский) курсор менялся только в инсталляторе, ни на что больше не влияя. Причём, нужен именно .cur На данный момент я достиг того, что смог прикрепить кастомный курсор, при наведении на кнопки "далее". Также я смог реализовать кастомный курсор для "всего", то есть, работает и в инсталляторе, и вне его. А это неприемлемо. Почему мне не один из вариантов не подошёл? Ну, во-первых, я нуб в программировании. Во-вторых, сложилось впечатление, что в моём новом inno setup 6.0 не хватает каких-то функций. Пошёл искать "улучшенную версию Inno ISCmplr Setup 5.4.1 build 110214", но тоже, либо не могу скачать, либо на форумах не осталось следов. Каждый раз когда какой-то из старых кодов беру, то какая-то "мелочь" мешает. Компилятор выдаёт ошибку, не видит идентификаторов и т.д. (а переписал/украл я код достаточно хорошо)))) Чтобы не быть голословным, скину код и проблемные строки. Наиболее "перспективным" (вроде как) считаю первый код: #define A = (Defined UNICODE) ? "W" : "A" [Setup] AppName = My Program AppVersion = 1.5 DefaultDirName = {pf}\My Program DefaultGroupName = My Program [Files] Source: "Mycursor.cur"; Flags: dontcopy; [Code ] function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFile{#A}@user32 stdcall'; function DeleteObject(p1: Longword): BOOL; external 'DeleteObject@gdi32.dll stdcall'; const MyCursor = 101; RT_RCDATA = 10; var ResStream: TResourceStream; hcur: Cardinal; procedure InitializeWizard(); begin ResStream := TResourceStream.Create(HInstance, '_IS_MYCURSOR', RT_RCDATA); ResStream.SaveToFile(ExpandConstant('{tmp}\Mycursor.cur')); hcur := LoadCursorFromFile(ExpandConstant('{tmp}\Mycursor.cur')); Screen.Cursors[MyCursor] := hcur; // в других версиях эта строка является проблемной// WizardForm.BackButton.Cursor := MyCursor; WizardForm.DirBrowseButton.Cursor := MyCursor; WizardForm.GroupBrowseButton.Cursor := MyCursor; WizardForm.NextButton.Cursor := MyCursor; WizardForm.CancelButton.Cursor := MyCursor; end; procedure DeinitializeSetup(); begin DeleteObject(hcur); end; #ifdef UNICODE #define A "W" #else #define A "A" #endif [Setup] AppName=My Program AppVersion=1.5 DefaultDirName={pf}\My Program DefaultGroupName=My Program UninstallDisplayIcon={app}\MyProg.exe SolidCompression=yes Compression=lzma/ultra OutputDir=Output [Files] Source: cursor.ani; Flags: dontcopy [code ] function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFile{#A}@user32 stdcall'; function DeleteObject(p1: Longword): BOOL; external 'DeleteObject@gdi32.dll stdcall'; const MyCursor = 101; var hcur: Cardinal; function InitializeSetup:boolean; begin if not FileExists(ExpandConstant('{tmp}\cursor.ani')) then ExtractTemporaryFile('cursor.ani'); Result := True; end; procedure InitializeWizard(); begin with WizardForm do begin Cursor := MyCursor; end; hcur := LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani')); Screen.Cursors[MyCursor] := hcur; end; procedure DeinitializeSetup(); begin DeleteObject(hcur); end; И вот ещё: [Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application RawDataResource=MyCursor:cursor.ani [code ] function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFileA@user32 stdcall'; const MyCursor = 101; RT_RCDATA = 10; var hcur: Cardinal; ResStream: TResourceStream; procedure InitializeWizard; begin with WizardForm do begin ClientWidth:=ScaleX(650); ClientHeight:=ScaleY(400); Position:=poScreenCenter; OuterNotebook.Hide; InnerNotebook.Hide; Bevel.Hide; Cursor := MyCursor; end; ResStream := TResourceStream.Create(HInstance, '_IS_MYCURSOR', RT_RCDATA); try ResStream.SaveToFile(ExpandConstant('{tmp}\cursor.ani')); hcur := LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani')); Screen.Cursors[MyCursor] := hcur; finally ResStream.Free; end; with WizardForm.NextButton do begin SetBounds(ScaleX(400), ScaleY(300), ScaleX(81), ScaleY(30)); Cursor := MyCursor; end; with WizardForm.BackButton do begin SetBounds(ScaleX(300), ScaleY(300), ScaleX(81), ScaleY(30)); Cursor := MyCursor; end; with WizardForm.CancelButton do begin SetBounds(ScaleX(530), ScaleY(300), ScaleX(81), ScaleY(30)); Cursor := MyCursor; end; end; procedure DeinitializeSetup(); begin DeleteObject(hcur); end; Тут у меня есть и .cur и .ani , на самом деле, не сильно важно (предпочтительнее .cur). ________________ В общем, господа-товарищи, если есть современное решение проблемы (потому что я читал ответы аж с 2009 по 2015 гг), то будем с командой очень вам благодарны. |
||
Последний раз редактировалось Gobethron, 11-07-2024 в 21:13. Отправлено: 21:04, 11-07-2024 | #1066 |
![]() Пользователь Сообщения: 91
|
Профиль | Отправить PM | Цитировать Цитата Gobethron:
Она полностью адаптирована под современные системы и современный Inno Setup. Активно развивается и поддерживается. Озвученные вами проблемы в сценариях (RawDataResource, TResourceStream, Screen.Cursors) касаются только китайской неофициальной Inno Setup v5.5, развитие которой прекратилось в 2012 году. Никакими другими версиями Inno Setup прямо из "коробки" эти фишки не поддерживаются. Сейчас вам нужен курсор, потом что-то другое, потом третье. А все вместе это потянет за собой множество сторонних библиотек (botva, isdone и т.д. и т.п.), которые уже давно не развиваются. Добавьте к этому проблемы совместимости с современными операционными системами. Разбираться и помогать вам с устаревшими и потерявшими свою актуальность библиотеками и решениями уже вряд ли кто-то будет, разве что вы сделаете это самостоятельно. Но самое грустное в этой истории будет то, что вы потеряете время и ваш проект не будет нормально работать в разрешении 2K/4K на современных системах. Лучше уделите свое время на изучение всех особенностей одной единственной библиотека FMXInno. Поверьте, она с лихвой позволит реализовать любые ваши фантазии и фишки. Библиотека поставляется с множеством примеров различных аспектов оформления программ установок. Также на форуме представлены готовые решения под конкретные игры. Библиотека очень сложная и многосторонняя, поэтому просто не будет. Но если у вас команда, то справитесь. P.S. На krinkels, чтобы что-то скачать, изучите правила, они не сложные. На fileforums есть возможность скачивания после регистрации. |
|
Отправлено: 23:26, 11-07-2024 | #1067 |
Ветеран Сообщения: 1269
|
Профиль | Отправить PM | Цитировать Цитата ZVSRus:
|
|
Отправлено: 18:56, 13-07-2024 | #1068 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать Здравствуйте уважаемые форумчане!
Есть стандартное окно с выбором языков установки. При нажатии на Отмена или крестик выбивает ошибку: "Runtime Error (at 105:118) Could not call proc". Не критично, но напрягает. Кто-нибудь с таким сталкивался? И как это исправить? ![]() Скрипт
[Setup] SourceDir=. OutputDir=Setup AppName=Spyro the Dragon AppVersion=2.0 AppPublisher=EmuGames AppCopyright=by Ma2012ks © AppPublisherURL=www.emugames.do.am AppSupportURL=www.emugames.do.am AppUpdatesURL=www.emugames.do.am DefaultDirName={pf}\Insomniac Games\Spyro the Dragon™ DefaultGroupName=Insomniac Games\Spyro the Dragon™ AllowNoIcons=yes InfoBeforeFile=C:\Users\Maks\Desktop\InstalledImages\System requirements.txt InfoAfterFile=C:\Users\Maks\Desktop\InstalledImages\Thank you for the installation of the game.txt OutputBaseFilename=setup WizardImageFile=C:\Users\Maks\Desktop\InstalledImages\LeftImage.bmp WizardSmallImageFile=C:\Users\Maks\Desktop\InstalledImages\Icon-Up.bmp SetupIconFile=C:\Users\Maks\Desktop\InstalledImages\Icon.ico WindowVisible=no WindowShowCaption=no WindowResizable=no Compression=none DiskSpanning=yes DiskSliceSize=2100000000 SlicesPerDisk=1 RestartIfNeededByRun=no PrivilegesRequired=none ShowUndisplayableLanguages=yes [Languages] Name: english; MessagesFile: compiler:Languages\English.isl Name: french; MessagesFile: compiler:Languages\French.isl Name: german; MessagesFile: compiler:Languages\German.isl Name: spanish; MessagesFile: compiler:Languages\Spanish.isl Name: italian; MessagesFile: compiler:Languages\Italian.isl Name: russian; MessagesFile: compiler:Languages\Russian.isl [Messages] SelectLanguageTitle=Spyro the Dragon SelectLanguageLabel=Please select installation language. Âûáåðèòå ÿçûê óñòàíîâêè. [LangOptions] english.LanguageName=English french.LanguageName=French german.LanguageName=German spanish.LanguageName=Spanish italian.LanguageName=Italian russian.LanguageName=Russian [Types] Name: full; Description: Ïîëíàÿ óñòàíîâêà Name: custom; Description: Âûáîðî÷íàÿ óñòàíîâêà; Flags: iscustom [Tasks] Name: desktopicon; Description: Ñîçäàòü ÿðëûê íà ðàáî÷åì ñòîëå; GroupDescription: ßðëûêè: Name: pin; Description: Çàêðåïèòü ÿðëûê íà ïàíåëè çàäà÷; GroupDescription: ßðëûêè:; Flags: unchecked Name: DirectX; Description: Îáíîâèòü DirectX; GroupDescription: Äîïîëíèòåëüíîå ÏÎ:; Flags: checkablealone Name: Redist; Description: Óñòàíîâèòü Visual C++ 2010; GroupDescription: Äîïîëíèòåëüíîå ÏÎ:; Flags: checkablealone [Files] Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\0.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\1.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\2.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\3.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\4.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\5.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\6.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\7.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\8.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\9.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\10.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\Miniature.gif; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\Music-1.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\Music-2.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: D:\Max\NightLection Team\CurrentProject\Spyro-1\Pakovano\ENG\*; DestDir: {app}; Check: PortableCheck; AfterInstall: ExtLog(); Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension Source: D:\Max\NightLection Team\CurrentProject\Spyro-1\Pakovano\Vector\NEW\*; DestDir: {app}; Check: InstallerCheck; AfterInstall: ExtLog(); Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension [Icons] Name: "{group}\Spyro the Dragon"; Filename: "{app}\Spyro the Dragon.exe"; WorkingDir: "{app}"; Name: "{userdesktop}\Spyro the Dragon"; Filename: "{app}\Spyro the Dragon.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Name: "{group}\Spyro the Dragon (Vector)"; Filename: "{app}\Spyro the Dragon (Vector).exe"; WorkingDir: "{app}"; Name: "{userdesktop}\Spyro the Dragon (Vector)"; Filename: "{app}\Spyro the Dragon (Vector).exe"; WorkingDir: "{app}"; Tasks: desktopicon; Name: "{group}\Spyro the Dragon-Options"; Filename: "{app}\Spyro the Dragon-Options.exe"; WorkingDir: "{app}"; Name: "{userdesktop}\Spyro the Dragon-Options"; Filename: "{app}\Spyro the Dragon-Options.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Name: "{group}\{cm:UninstallProgram,Spyro the Dragon}"; Filename: "{uninstallexe}" [Run] Description: "{cm:LaunchProgram, Spyro the Dragon}"; Filename: "{app}\Spyro the Dragon.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent unchecked Description: "{cm:LaunchProgram, Spyro the Dragon-Options}"; Filename: "{app}\Spyro the Dragon-Options.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent unchecked [UninstallDelete] Type: filesandordirs; Name: {app} Type: filesandordirs; Name: "{localappdata}\Thinstall\Spyro™ the Dragon;" [code] var ComponentPage : TWizardPage; InstallGroupBox : TNewGroupBox; Installer : TNewRadioButton; Portable : TNewRadioButton; function InstallerCheck: Boolean; begin Result := Installer.Checked; end; function PortableCheck: Boolean; begin Result := Portable.Checked; end; var ProgressLabel: TLabel; procedure ExtLog(); begin SaveStringToFile(ExpandConstant('{tmp}\setup.log'), #13#10 + GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':') + ' - ' + ExpandConstant(CurrentFileName), True); with WizardForm.ProgressGauge do ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%'; end; const AW_BLEND = $00080000; AW_HIDE = $00010000; function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): Boolean; external 'AnimateWindow@user32 stdcall'; function NextButtonClick(CurPageID: Integer): Boolean; begin Result := True; if CurPageID=wpFinished then begin if WizardForm.RunList.Checked[0] then Result := True; end; end; procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_OKCANCEL) = IDOK then begin Confirm := False; AnimateWindow(WizardForm.Handle, 2500, AW_BLEND or AW_HIDE); Cancel := True; end else Cancel := False; end; const LOAD_LIBRARY_AS_DATAFILE = $2; #define A = (Defined UNICODE) ? "W" : "A" function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall'; function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall'; function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall'; function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean; var hInst: THandle; buf: array [0..255] of Char; i, res: Integer; strLnk, strVerb: String; objShell, colVerbs: Variant; begin Result := False; if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 } { String resources } if IsPin then begin if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then begin while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1); if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit; end; res := 5386; { Pin to Tas&kbar } end else res := 5387; { Unpin from Tas&kbar } { Load string resource } hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE); if hInst <> 0 then try for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1); try objShell := CreateOleObject('Shell.Application'); colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs; for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then begin colVerbs.Item[i].DoIt; Result := True; Break; end; except Exit; end; finally FreeDLL(hInst); end; end; type HSTREAM=DWORD; TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD); const Indent=25; var MP3List:TStringList; CurrentMP3:integer; hMP3:HWND; TimerID:LongWord; function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL; external 'AppendMenuA@user32.dll stdcall'; function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU; external 'GetSystemMenu@user32.dll stdcall'; function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload'; function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload'; procedure ShowMP3Panel(hMainFrm:HWND;StartVolume:integer;DefMP3Dir,BASSDir,MLabel:PChar;IsShowMP3Info,IsBkgFrm Visible:boolean;ShowTimeMP3Info:integer;dBottom:integer);external 'ShowMP3Panel@files:isgsg.dll stdcall'; procedure KillMP3Panel;external 'KillMP3Panel@files:isgsg.dll stdcall'; procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload'; procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload'; procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload'; procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload'; procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload'; procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload'; function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload'; function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT; external 'SetTimer@user32.dll stdcall delayload'; function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload'; function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall'; function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.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):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall'; function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall'; function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall'; function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall'; function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall'; function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload'; function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall'; procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall'; procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall'; function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall'; procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD); begin if BASS_ChannelIsActive(hMP3)=0 then begin BASS_Stop; BASS_StreamFree(hMP3); hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0); BASS_Start; if hMP3<>0 then if BASS_ChannelPlay(hMP3,True) then begin CurrentMP3:=CurrentMP3+1; if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0; end; end; end; procedure RunListClickCheck(Sender: TObject); var i:integer; begin if WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex] then begin for i:=0 to WizardForm.RunList.Items.Count-1 do WizardForm.RunList.Checked[i]:=False; WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex]:=True; end; end; function InitializeSetup:boolean; begin ExtractTemporaryFile('Music-1.mp3'); ExtractTemporaryFile('Music-2.mp3'); MP3List:=TStringList.Create; CurrentMP3:=0; ExtractTemporaryFile('steam.cjstyles'); LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', ''); Result:=True; end; procedure InitializeWizard; begin if not AppendMenu(GetSystemMenu(Wizardform.Handle, True), 200, 0, SetupMessage(msgAboutSetupMenuItem)) then WizardForm.Position:= poScreenCenter; begin ComponentPage := CreateCustomPage(wpInfoBefore, 'Please select game language (Rus/Multi)', 'Âûáåðèòå ÿçûê èãðû...'); { InstallGroupBox } InstallGroupBox := TNewGroupBox.Create(WizardForm); with InstallGroupBox do begin Parent := ComponentPage.Surface; SetBounds(ScaleX(0),ScaleY(0),ScaleX(240),ScaleY(70)); Caption := 'Ëîêàëèçàöèÿ / Game language:'; end; { Installer } Installer := TNewRadioButton.Create(WizardForm); with Installer do begin Parent := ComponentPage.Surface; SetBounds(ScaleX(9),ScaleY(43),ScaleX(145),ScaleY(17)); Caption := 'Ðóññêàÿ âåðñèÿ / Russian'; Checked := True; end; { Portable } Portable := TNewRadioButton.Create(WizardForm); with Portable do begin Parent := ComponentPage.Surface; SetBounds(ScaleX(9),ScaleY(19),ScaleX(230),ScaleY(17)); Caption := 'English / French / German / Spanish / Italian'; end; begin ProgressLabel := TLabel.Create(WizardForm); with WizardForm.ProgressGauge do begin ProgressLabel.Top := Top + Height + ScaleY(8); ProgressLabel.Left:= Left + Width/2 - ScaleX(8); ProgressLabel.Caption := '0%'; ProgressLabel.AutoSize := True; ProgressLabel.Parent := WizardForm.InstallingPage; end; WizardForm.RunList.OnClickCheck:=@RunListClickCheck; ExtractTemporaryFile('Miniature.gif'); ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Miniature.gif',7000,5000,4000,0,255,Fal se,$FFFFFF,10); ShowMP3Panel(WizardForm.Handle,80,ExpandConstant('{tmp}'),ExpandConstant('{tmp}'),'- Volume +',False,True,0,Indent); TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5)); BASS_Init(-1,44100,0,0,0); BASS_SetConfig(5,100); BASS_SetConfig(6,100); ssInitialize(GetWindowLong(MainForm.Handle,-8),18,True,1,$FF000000); ExtractTemporaryFile('0.bmp'); ssSetBkgImage(ExpandConstant('{tmp}')+'\0.bmp'); WizardForm.TypesCombo.ItemIndex:=0; WizardForm.BeveledLabel.Enabled:=True; end; end; end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep=ssInstall then begin ExtractTemporaryFile('1.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\1.bmp'); ExtractTemporaryFile('2.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\2.bmp'); ExtractTemporaryFile('3.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\3.bmp'); ExtractTemporaryFile('4.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\4.bmp'); ExtractTemporaryFile('5.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\5.bmp'); ExtractTemporaryFile('6.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\6.bmp'); ExtractTemporaryFile('7.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\7.bmp'); ExtractTemporaryFile('8.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\8.bmp'); ExtractTemporaryFile('9.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\9.bmp'); ExtractTemporaryFile('10.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\10.bmp'); ssStartShow; end; if CurStep=ssPostInstall then ssStopShow; end; procedure CurPageChanged(CurPageID: Integer); begin WizardForm.TypesCombo.Hide; begin case CurPageID of wpFinished: end if IsTaskSelected('Pin') then PinToTaskbar(ExpandConstant('{app}\Spyro the Dragon-Options.exe'), True); if CurPageID=wpInstalling then begin WizardForm.MainPanel.Visible:=False; WizardForm.Bevel1.Visible:=False; WizardForm.Width:=ScaleX(395); WizardForm.Height:=ScaleY(142); WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent); WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent); 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) or (CurPageID=wpInfoAfter) then begin WizardForm.RunList.Checked[0]:=True; if WizardForm.Width<>502 then begin WizardForm.Visible:=False; WizardForm.Width:=ScaleX(502); WizardForm.Height:=ScaleY(392); WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2; WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2; WizardForm.MainPanel.Visible:=True; WizardForm.Bevel1.Visible:=True; WizardForm.InnerNotebook.Left:=ScaleX(40); WizardForm.InnerNotebook.Top:=ScaleY(72); WizardForm.InnerNotebook.Width:=ScaleX(417); WizardForm.Visible:=True; end; end; end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin case CurUninstallStep of usUninstall: begin PinToTaskbar(ExpandConstant('{app}\Spyro the Dragon-Options.exe'), False); end; end; end; procedure DeinitializeSetup; begin KillMP3Panel; KillTimer(0,TimerID); BASS_Stop; BASS_Free; MP3List.Free; ShowWindow(WizardForm.Handle,0); UnloadSkin(); ssDeInitialize; end; function IsRegularUser(): Boolean; begin Result := not (IsAdminLoggedOn or IsPowerUserLoggedOn) end; function GetDefRoot(Param: String): String; begin if IsRegularUser then Result := ExpandConstant('{localappdata}') else Result := ExpandConstant('{pf}') end; |
Последний раз редактировалось OldGamer, 21-07-2024 в 19:45. Отправлено: 04:01, 18-07-2024 | #1069 |
![]() Пользователь Сообщения: 91
|
Профиль | Отправить PM | Цитировать Цитата OldGamer:
В функции AnimateWindow передается хендл окна мастера установки (WizardForm.Handle), которое ещё не создано. Не используйте процедуру CancelButtonClick или упростите её до вида: |
|
Отправлено: 10:39, 22-07-2024 | #1070 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты Inno Setup. Помощь и советы [часть 7] | El Sanchez | Автоматическая установка приложений | 2499 | 02-02-2015 08:59 | |
Скрипты Inno Setup. Помощь и советы [часть 6] | El Sanchez | Автоматическая установка приложений | 2494 | 10-03-2014 11:51 | |
Скрипты Inno Setup. Помощь и советы [часть 5] | El Sanchez | Автоматическая установка приложений | 1999 | 28-03-2013 19:09 | |
Скрипты Inno Setup. Помощь и советы [часть 4] | El Sanchez | Автоматическая установка приложений | 2099 | 22-05-2012 23:16 | |
Скрипты Inno Setup. Помощь и советы [часть 3] | Serega | Автоматическая установка приложений | 3755 | 26-10-2011 17:58 |
|