Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Krinkels
Дата сообщения: 14.05.2009 12:14
Sens0r
В руководстве от Kindly было что то похожее
Автор: spider91
Дата сообщения: 14.05.2009 13:20
почему инно не может запускать .msi файлы? через командную строку пишу файл.msi /quiet /passive /norestart и все идет а в инно постоянно ошибка

Добавлено:
ExpeditorR


что насчет новой версии is7z.dll?
Автор: Genri
Дата сообщения: 14.05.2009 15:15
spider91

Цитата:
почему инно не может запускать .msi файлы?
-- вероятно потому, что файл .msi представляет собой не исполняемый файл, а составной документ OLE (OLE compound document). Т.е. это контейнер, аналогичный файлам майкрософт офиса. А ты, судя по всему, пытаешься запустить его как исполняемый (через Exec). Попробуй через ShellExec. Например:
ShellExec('', ExpandConstant('{tmp}\файл.msi'),
'/quiet /passive /norestart', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode)
Автор: spider91
Дата сообщения: 14.05.2009 15:26
Genri

спасибо все идет
Автор: Genri
Дата сообщения: 14.05.2009 15:46
Sens0r

Цитата:
пользователь указывает в диалоге выбора папке как правило C:\Games\Game, в следствии чего программа устанавливается в D:\Games\Game\Game
-- с чего бы инсталлятору ставить программу на диск D:, если пользователь указал на диск C Я подозреваю, что это опечатка. В таком случае, посмотри в хелпе директиву AppendDefaultDirName - вероятно, это то, что тебе надо.
Так же, обрати внимание на директиву UsePreviousAppDir
Автор: DeKaNszn
Дата сообщения: 14.05.2009 16:09
boss911

смотри
Автор: Genri
Дата сообщения: 14.05.2009 16:23
spider91

Цитата:
как установить vcredist чтоб процеса установки вобще небыло видно?
-- вероятно никак (если в нем не предусмотрена такая установка). Но можешь попробовать переименовать его в vcredist.cab, распаковать файлы и установить их средствами инно
Автор: boss911
Дата сообщения: 14.05.2009 20:05
DeKaNszn

Ясно, спасибо, и за перевод тоже. Самое дикое, что я пробовал [more=это]
Код: Help|Compiler|ProductName=
Help|Compiler|ProductVersion=
Автор: Erazer
Дата сообщения: 14.05.2009 21:32
Господа, подскажите почему на некоторых вистах появляется сообщение :"---------------------------
Error
---------------------------
ShellExecuteEx failed; code 1155. No application is associated with the specified file for this operation.
---------------------------
OK
---------------------------"
Автор: msatmb
Дата сообщения: 14.05.2009 23:04
Подскажите, как вот эту штуку
Filename: "{tmp}\7za.exe"; Parameters: "a -tzip Data.zip Data\ -mx5"; WorkingDir: "{app}" запихать в секцию Code?

Пробую делать так
WizardForm.StatusLabel.Caption:='Упаковка файлов...';
ExtractTemporaryFile('7za.exe');
Exec(ExpandConstant('{tmp}\7za.exe'), 'a -tzip'+AddQuotes(ExpandConstant('{app}\Data2.zip'))+' -mx5'+AddQuotes(ExpandConstant('{app}\Data\')), '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);

Не идет упаковка...
Автор: clemenco
Дата сообщения: 14.05.2009 23:34
msatmb
Не вижу пробелов после параметров (без них вроде всё слитно получается). Попробуй добавить: в примере +' -mx5' надо +' -mx5 '
Например так:

Цитата:
Exec(ExpandConstant('{tmp}\7za.exe '), 'a -tzip '+AddQuotes(ExpandConstant('{app}\Data2.zip '))+' -mx5 '+AddQuotes(ExpandConstant('{app}\Data\')), '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
Автор: Genri
Дата сообщения: 14.05.2009 23:34
msatmb -- вероятно, после -tzip и после -mx5 нужны пробелы.

Добавлено:
раз уж меня опередили , дам еще совет - в подобных случаях, можно делать примерно так:
Код: [no]
...............
str:= 'a -tzip '+AddQuotes(ExpandConstant('{app}\Data2.zip'))+' -mx5 '+AddQuotes(ExpandConstant('{app}\Data\'));
MsgBox(str, mbInformation, MB_OK);
Exec(ExpandConstant('{tmp}\7za.exe'), str, '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
.............. [/no]
Автор: msatmb
Дата сообщения: 14.05.2009 23:57
clemenco
Genri
От блин...как оказывается все просто.... А я уже себе все глаза провыкалывал, не мог понять почему не пакуется Спасибо!!!!!
Автор: spider91
Дата сообщения: 15.05.2009 00:46
подскажите плиз как через code запустить строку чтоб в ней задавалось WorkingDir - директория в которой она работает.
Автор: GRom V
Дата сообщения: 15.05.2009 03:24
spider91

Цитата:
почему инно не может запускать .msi файлы?

А разве так не запустится???
ShellExec('', ExpandConstant('{tmp}\file.msi'),'/qn REBOOT=ReallySuppress', '', SW_SHOW, ewWaitUntilTerminated, iErrorCode);

Добавлено:
Сори.....уже ответили...
Автор: Krinkels
Дата сообщения: 15.05.2009 08:40
Друзья, намыл скрипт установки С.Т.А.Л.К.Е.Р. - Чистое Небо, может кому пригодится
[more]
[no]
[Setup]
AppName=С.Т.А.Л.К.Е.Р. - Чистое Небо
AppVerName=С.Т.А.Л.К.Е.Р. - Чистое Небо [v1.0007]
DefaultDirName={pf}\GSC World Publishing\С.Т.А.Л.К.Е.Р. - Чистое Небо
DefaultGroupName=GSC World Publishing\С.Т.А.Л.К.Е.Р. - Чистое Небо
DisableProgramGroupPage=false
OutputDir=.\
OutputBaseFilename=setup
SetupIconFile=.\embedded\Icon.ico
Compression=lzma/ultra
SolidCompression=true
InternalCompressLevel=ultra
UsePreviousGroup=true
ShowLanguageDialog=no
LanguageDetectionMethod=none
WizardImageFile=.\embedded\WizardImage.bmp
WizardSmallImageFile=.\embedded\WizardSmallImage.bmp
LicenseFile=.\embedded\License.txt
InfoAfterFile=.\embedded\InfoAfter.txt
VersionInfoDescription=С.Т.А.Л.К.Е.Р. - Чистое Небо Setup
Uninstallable=true
CreateUninstallRegKey=true
DirExistsWarning=no
VersionInfoCompany=GSC World Publishing
DiskSpanning=true
DiskSliceSize=1199464448
WindowVisible=false
WindowShowCaption=false
WindowResizable=false
AlwaysRestart=false
VersionInfoVersion=1.0007
VersionInfoTextVersion=1,0007
UninstallDisplayIcon={app}\stalker_cs.ico
UninstallDisplayName=С.Т.А.Л.К.Е.Р. - Чистое Небо [v1.0007]
AppVersion=1.0007
AppPublisher=GSC World Publishing

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Tasks]
Name: desktopicon; Description: Создать значок на &Рабочем столе; GroupDescription: Дополнительные значки:; Flags: unchecked
Name: quicklaunchicon; Description: Создать значок в &Панели быстрого запуска; GroupDescription: Дополнительные значки:; Flags: unchecked
Name: directx; Description: Обновить DirectX; GroupDescription: Системные задачи:

[Files]
Source: .\Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: .\CommonDocs\user.ltx; DestDir: {commondocs}\STALKER-STCS; Flags: overwritereadonly ignoreversion

[Icons]
Name: {group}\С.Т.А.Л.К.Е.Р. - Чистое Небо; Filename: {app}\bin\xrEngine.exe; WorkingDir: {app}; IconFilename: {app}\stalker_cs.ico; Comment: Запустить игру
Name: {group}\WEB сайт игры; Filename: {app}\gamesite.url; Comment: Зарегистрировать игру в интернете
Name: {group}\WEB сайт издателя; Filename: {app}\publisher.url; Comment: Посетить WEB сайт издателя
Name: {group}\Просмотреть ReadMe.txt; Filename: {app}\ReadMe.txt; Comment: Просмотреть ReadMe
Name: {group}\{cm:UninstallProgram,С.Т.А.Л.К.Е.Р. - Чистое Небо}; Filename: {uninstallexe}; IconFilename: {app}\uninstall.ico; Comment: Удалить игру
Name: {commondesktop}\С.Т.А.Л.К.Е.Р. - Чистое Небо; Filename: {app}\bin\xrEngine.exe; WorkingDir: {app}; IconFilename: {app}\stalker_cs.ico; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\С.Т.А.Л.К.Е.Р. - Чистое Небо; Filename: {app}\bin\xrEngine.exe; WorkingDir: {app}; IconFilename: {app}\stalker_cs.ico; Tasks: quicklaunchicon

[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; Parameters: /silent; WorkingDir: {src}\Redist\DirectX\; Tasks: directx; StatusMsg: Установить обновленную версию Microsoft DirectX; Flags: waituntilterminated
Filename: {app}\bin\xrEngine.exe; WorkingDir: {app}; Description: &{cm:LaunchProgram,С.Т.А.Л.К.Е.Р. - Чистое Небо}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; Subkey: Software\GSC Game World; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS; Flags: uninsdeletekey
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS; ValueName: InstallPath; ValueType: string; ValueData: {app}; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS; ValueName: InstallLang; ValueType: string; ValueData: {language}; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS; ValueName: InstallSource; ValueType: string; ValueData: stkcs-rus-pack-r; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS; ValueName: InstallVers; ValueType: string; ValueData: 1.0007; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS; ValueName: InstallCDKEY; ValueType: string; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS; ValueName: InstallUserName; ValueType: string; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS; ValueName: UnInstConfirm; ValueType: string; ValueData: Удалить сохраненные игры и профили?; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS; ValueName: InstallPatchID; ValueType: dword; ValueData: $594; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\GSC Game World\STALKER-STCS\Keys; Flags: uninsdeletevalue

[Messages]
BeveledLabel=GSC Game World

[Code]
const
NeedSize = 6;
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

var
ListBox: TListBox;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: string;
i: Integer;
begin
for i := 0 to ListBox.Items.Count - 1 do
begin
if ListBox.Selected[i] then
begin
NewLetter := Copy(ListBox.Items[i], 0, 1);
OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text := NewLetter + OldString;
end;
end;
end;

procedure InitializeWizard();
var
Name1: string;
i: Integer;
Text: TNewStaticText;
Path: string;
FreeMB, TotalMB: Cardinal;
drives: DWORD;
begin
Text := TNewStaticText.Create(WizardForm);
Text.Top := 102;
Text.Width := 205;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;

ListBox := TListBox.Create(WizardForm);
ListBox.Top := 120;
ListBox.Width := 205;
ListBox.Height := ScaleY(90);
ListBox.Parent := WizardForm.SelectDirPage;
ListBox.OnClick := @ListBoxOnClick;
ListBox.Font.Name := 'Courier New';
ListBox.Font.Size := 10;
ListBox.Font.Style := [fsBold];
ListBox.Color := clBtnFace;

drives := GetLogicalDrives();
for i := 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path := chr(ord('A') + i) + ':\';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB>1024 then ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
else ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + IntToStr(FreeMB) + ' MB');
end;
end;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
Path,s,z: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < (NeedSize*1024) then
begin
if FreeMB>1024 then
begin
s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
end
else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
MsgBox(s, mbCriticalError, MB_OK)
Result := False;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
S: String;
begin
If CurStep=ssPostInstall then
begin
S := ExpandConstant('{commondocs}\STALKER-STCS\')
StringChangeEx(S, ':\', ':\|', True);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$app_data_root$=true|false|' + S + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', ';abbreviation = recurs|notif| root| add| ext| description' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$arch_dir$ = false| false| $fs_root$' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_arch_mp$ = false| false| $fs_root$| mp\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$arch_dir_levels$ = false| false| $fs_root$| levels\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$arch_dir_resources$ = false| false| $fs_root$| resources\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$arch_dir_localization$ = false| false| $fs_root$| localization\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$arch_dir_patches$ = false| true| $fs_root$| patches\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_data$ = false| true| $fs_root$| gamedata\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_ai$ = true| false| $game_data$| ai\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_spawn$ = true| false| $game_data$| spawns\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_levels$ = true| false| $game_data$| levels\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_meshes$ = true| true| $game_data$| meshes\| *.ogf;*.omf| Game Object files' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_anims$ = true| true| $game_data$| anims\| *.anm;*.anms| Animation files' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_dm$ = true| true| $game_data$| meshes\| *.dm| Detail Model files' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_shaders$ = true| true| $game_data$| shaders\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_sounds$ = true| true| $game_data$| sounds\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_textures$ = true| true| $game_data$| textures\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_config$ = true| false| $game_data$| configs\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_weathers$ = true| false| $game_config$| environment\weathers' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_weather_effects$ = true| false| $game_config$| environment\weather_effects' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$textures$ = true| true| $game_data$| textures\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$level$ = false| false| $game_levels$' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_scripts$ = true| false| $game_data$| scripts\| *.script| Game script files' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$logs$ = true| false| $app_data_root$| logs\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$screenshots$ = true| false| $app_data_root$| screenshots\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_saves$ = true| false| $app_data_root$| savedgames\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$downloads$ = false| false| $app_data_root$' + #13, true);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usPostUninstall then
begin
If DirExists(ExpandConstant('{commondocs}')+'\STALKER-STCS')
then
case MsgBox('Удалить сохраненные игры и профили?'#13#13 +
'', mbInformation, MB_YESNO)
of IDYES:
begin
DelTree(ExpandConstant('{app}')+'', True, True, True)
DelTree(ExpandConstant('{commondocs}')+'\STALKER-STCS', True, True, True)
end;
end;
end;
end;
[/no]
[/more]
Автор: SotM
Дата сообщения: 15.05.2009 12:22
Krinkels
ыыыыы, а зачем лишнии подчеркивания?!?! типа ListBox.Items[_i], когда объявлена просто переменная i. Зачем такие сложности?!!
Обязательно кто-то найдется кто скажет, что это не компилируется.

Добавил:
Ну теперь код намного лучше выглядит.
Автор: Krinkels
Дата сообщения: 15.05.2009 12:45
SotM
Просто вместо [/more] в конце вылазило [/i], вот я и добавил подчеркивание
Может подскажешь как такое обходить?
Автор: Genri
Дата сообщения: 15.05.2009 13:01
Krinkels -- [no][no][/no] - Код который отменяет все коды. Пример: [no]ListBox.Items[i] [/no]
Автор: Krinkels
Дата сообщения: 15.05.2009 13:10
Genri
Большое спасибо буду знать
Автор: Vitalliano
Дата сообщения: 15.05.2009 13:42
Кому интерестно вот мой скрипт для С.Т.А.Л.К.Е.Р. - Чистое Небо.
Автор: Pantalone
Дата сообщения: 15.05.2009 17:28
Sig666

Цитата:
Возможно подойдет

Спасибо, попробую.
Автор: boss911
Дата сообщения: 15.05.2009 17:46
Забыл сообщить, что поправил ссылку на IS 5.3.1-beta [15.05.2009].

Плохо, что разработчик анпакера как всегда запаздывает с обновлением. Текущая версия анпакера (0.21) не берет дистрибутивы выше версии 5.2.4.
Автор: Krinkels
Дата сообщения: 15.05.2009 19:08
Друзья, есть скрипт ввода пароля [more][no][Code]
var
NewPage: TWizardPage;
TopText: TLabel;
Edit1,Edit2,Edit3,Edit4,Edit5: TEdit;

procedure SerialPage;
begin
NewPage:=CreateCustomPage(wpWelcome, 'Ввод кода', 'бла бла бла и т.д. ')

TopText:=TLabel.Create(NewPage)
TopText.Left:=0
TopText.Top:=0
TopText.Width:=417
TopText.Height:=28
TopText.AutoSize:=False
TopText.WordWrap:=True
TopText.Caption:='Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска.'
TopText.Parent:=NewPage.Surface

Edit1:=TEdit.Create(NewPage)
Edit1.Left:=0
Edit1.Top:=60
Edit1.Width:=60
Edit1.Height:=21
Edit1.AutoSize:=False
Edit1.MaxLength:=5 //максимальное количество символов
Edit1.Font.Size:=12
Edit1.Font.Style:=[fsBold]
Edit1.Font.Name:='Arial'
Edit1.Parent:=NewPage.Surface

Edit2:=TEdit.Create(NewPage)
Edit2.Left:=70
Edit2.Top:=60
Edit2.Width:=60
Edit2.Height:=21
Edit2.AutoSize:=False
Edit2.MaxLength:=5
Edit2.Font.Size:=12
Edit2.Font.Style:=[fsBold]
Edit2.Font.Name:='Arial'
Edit2.Parent:=NewPage.Surface

Edit3:=TEdit.Create(NewPage)
Edit3.Left:=140
Edit3.Top:=60
Edit3.Width:=60
Edit3.Height:=21
Edit3.AutoSize:=False
Edit3.MaxLength:=5
Edit3.Font.Size:=12
Edit3.Font.Style:=[fsBold]
Edit3.Font.Name:='Arial'
Edit3.Parent:=NewPage.Surface

Edit4:=TEdit.Create(NewPage)
Edit4.Left:=210
Edit4.Top:=60
Edit4.Width:=60
Edit4.Height:=21
Edit4.AutoSize:=False
Edit4.MaxLength:=5
Edit4.Font.Size:=12
Edit4.Font.Style:=[fsBold]
Edit4.Font.Name:='Arial'
Edit4.Parent:=NewPage.Surface

Edit5:=TEdit.Create(NewPage)
Edit5.Left:=280
Edit5.Top:=60
Edit5.Width:=60
Edit5.Height:=21
Edit5.AutoSize:=False
Edit5.MaxLength:=5
Edit5.Font.Size:=12
Edit5.Font.Style:=[fsBold]
Edit5.Font.Name:='Arial'
Edit5.Parent:=NewPage.Surface
end;

procedure InitializeWizard();
begin
SerialPage
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:=True
if CurPageID = NewPage.ID then
begin
Result:=Edit1.Text = '11111' //серийный номер
Result:=Edit2.Text = '22222'
Result:=Edit3.Text = '33333'
Result:=Edit4.Text = '44444'
Result:=Edit5.Text = '55555'
if not Result then
begin
MsgBox('Неверный серийный номер.', mbError, mb_Ok)
Result:=False
end
end
end;
[/no][/more] как сделать так чтоб после ввода чисел в одно поле курсор перескакивал в следующее поле?
Автор: juvaforza
Дата сообщения: 15.05.2009 22:03
boss911

Цитата:
Разработчик анпакера как всегда запаздывает с обновлением.

Гм, вы слишком-слишком требовательны Обновляются ведь бета-версии.

Цитата:
5.3.1-beta [15.05.2009] | 5.2.4 [01.04.2009]

Автор: Genri
Дата сообщения: 15.05.2009 22:55
Krinkels

Цитата:
как сделать так чтоб после ввода чисел в одно поле курсор перескакивал в следующее поле?
-- в процедуру SerialPage добавь строки :
Edit1.OnChange:=@EditChange;
Edit2.OnChange:=@EditChange;
..... и т.д. для всех полей и добавь соответствующую процедуру. Например:
procedure EditChange(Sender: TObject);
begin
if Length(TEdit(Sender).Text) = TEdit(Sender).MaxLength then
case TObject(Sender) of
Edit1: WizardForm.ActiveControl:= Edit2;
Edit2: WizardForm.ActiveControl:= Edit3;
Edit3: WizardForm.ActiveControl:= Edit4;
Edit4: WizardForm.ActiveControl:= Edit5;
Edit5: WizardForm.ActiveControl:= WizardForm.NextButton;
end;
end;

ЗЫ. Только зря это все. Ведь серийник у тебя всего пять символов, которые помещаются в одно поле. Так что остальные поля можно не заполнять
Автор: Krinkels
Дата сообщения: 15.05.2009 23:25
Genri
Огромное человеческое спасибо
Автор: msatmb
Дата сообщения: 16.05.2009 00:02
Помогите объединить два кода
[more=этот, установка обновления]
[Setup]
AppName=Tom Clancy's H.A.W.X патч
AppVerName=Tom Clancy''s H.A.W.X патч 1.02.
DefaultDirName={code:GetInstallDir}
OutputDir=D:\MyInno_Script\Tom Clancy's H.A.W.X\
OutputBaseFilename=putch102
DisableProgramGroupPage=True
DisableReadyPage=True
DirExistsWarning=false
EnableDirDoesntExistWarning=no
CreateUninstallRegKey=no
Uninstallable=no
DisableFinishedPage=True
SolidCompression=true
Compression=lzma/ultra64

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: "D:\MyInno_Script\Tom Clancy's H.A.W.X\putch102\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs

[Registry]
Root: HKLM; Subkey: SOFTWARE\Ubisoft\Tom Clancy's H.A.W.X\1.02.00000; ValueType: String
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{6E36A172-06FB-4BC8-B7FC-D30D219E6776}; ValueType: dword; ValueName: Version; ValueData: $01020000; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{6E36A172-06FB-4BC8-B7FC-D30D219E6776}; ValueType: dword; ValueName: Language; ValueData: $00000009; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{6E36A172-06FB-4BC8-B7FC-D30D219E6776}; ValueType: string; ValueName: DisplayVersion; ValueData: 1.02.00000; Flags: uninsdeletekey

[Code]
function GetInstallDir(Dir: string): string;
begin
Dir := '';
RegQueryStringValue(HKLM, 'SOFTWARE\Ubisoft\Tom Clancy''s H.A.W.X\GU_DX9\GameUpdate','installdir', Dir);
Result := Dir;
end;

function InitializeSetup(): Boolean;
var
S: String;
begin
Result := True;
S := ExpandConstant('{code:GetInstallDir}');
if S = '' then
begin
SuppressibleMsgBox('Игра Tom Clancy''s H.A.W.X не найдена!', mbCriticalError, MB_OK, MB_OK);
Result := False;
Exit;
end;

{
условия необходимые для определения обновлялась игра или нет,
размер или наличие новых файлов, запись в реестре,
наличие деинсталлятора патча,
в данном случае проверяется наличие деинсталлятора
--> проверка ... если условие выполняется Result := False
}

if MsgBox('Игра Tom Clancy''s H.A.W.X найдена, желаете установить ' + '{#SetupSetting("AppVerName")}' + '?', mbConfirmation, MB_YESNO) = IDNO then
Result := False;
Exit;
end;

procedure CurPageChanged(CurPageID: Integer);
var
S: String;
begin
if CurPageID = wpWelcome then
S := ExpandConstant('{code:GetInstallDir}');
if S <> '' then
WizardForm.NextButton.OnClick(WizardForm.NextButton);

if CurPageID = wpSelectDir then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
if CurStep = ssDone then
begin
RenameFile(ExpandConstant('{app}\Data\Sounds\PC\Russian\'), ExpandConstant('{app}\Data\Sounds\PC\English\'));
MsgBox('{#SetupSetting("AppVerName")}' + ' установлен!', mbInformation, MB_OK);
end;
end;

[/more]
с
[more=этим, преинсталляция]
[Code]
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeWizard();
var
SplashImage: TBitmapImage;
SplashForm: TForm;
SplashFileName: String;
Form: TSetupForm;
ProgressBar: TNewProgressBar;
CancelButton: TButton;
StaticText: TNewStaticText;
BitmapImage: TBitmapImage;
BitmapFileName: string;
I : Integer;
begin

SplashFileName := ExpandConstant('{tmp}\fon1.bmp');
ExtractTemporaryFile(ExtractFileName(SplashFileName));

SplashForm := TForm.create(nil);
with SplashForm do
begin
BorderStyle := bsNone;
Position := poScreenCenter;
// Указываем размеры показываемого изображения
ClientWidth := 800;
ClientHeight := 589;
end;

SplashImage := TBitmapImage.Create(SplashForm);
with SplashImage do
begin
Bitmap.LoadFromFile(SplashFileName);
Stretch := true;
Align := alClient;
Parent := SplashForm;
end;

with SplashForm do
begin
Show;
for I := 1 to 1 do
begin
Repaint;
// показ изображения в секундах (1000 – одна секунда, 2000 – две секунды и т.д.)
Sleep(100);
end;
// Close;
// Free;
end;
begin
Form := CreateCustomForm();
try
with Form do
begin
ClientWidth := ScaleX(375); //Ширина формы для ProgressBar
ClientHeight := ScaleY(120); //Высота формы для ProgressBar
BorderStyle := bsDialog;
Left := GetSystemMetrics(16) - ClientWidth - ScaleX(5);
Top := GetSystemMetrics(17) - ClientHeight - ScaleY(5);
Caption := 'Подготовка к установке...' //Заголовок мини ProgressBar'a
end;

BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Left := ScaleX(8);
BitmapImage.Top := ScaleY(8);
BitmapImage.Width := ScaleX(58);
BitmapImage.Height := ScaleY(58);
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 + 'Tom Clancy's H.A.W.X до версии 1.02.' + #10#13#10 + 'Пожалуйста подождите...'; //Текст самого мини ProgressBar'a
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 := 'Отменить';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;

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(500);
i := i + 1;
end;
finally
Form.Free();
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;
[/more]
Но так, чтобы преинсталляция была первой Наоборот у меня получилось, а вот первой что-то не догоняю как
Автор: Krinkels
Дата сообщения: 16.05.2009 00:29
msatmb
[more=Держи]
[no]
[Code]
var
S: String;

function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeWizard();
var
SplashImage: TBitmapImage;
SplashForm: TForm;
SplashFileName: String;
Form: TSetupForm;
ProgressBar: TNewProgressBar;
CancelButton: TButton;
StaticText: TNewStaticText;
BitmapImage: TBitmapImage;
BitmapFileName: string;
I : Integer;
begin

SplashFileName := ExpandConstant('{tmp}\Image_1.bmp');
ExtractTemporaryFile(ExtractFileName(SplashFileName));

SplashForm := TForm.create(nil);
with SplashForm do
begin
BorderStyle := bsNone;
Position := poScreenCenter;
// Указываем размеры показываемого изображения
ClientWidth := 800;
ClientHeight := 589;
end;

SplashImage := TBitmapImage.Create(SplashForm);
with SplashImage do
begin
Bitmap.LoadFromFile(SplashFileName);
Stretch := true;
Align := alClient;
Parent := SplashForm;
end;

with SplashForm do
begin
Show;
for I := 1 to 1 do
begin
Repaint;
// показ изображения в секундах (1000 – одна секунда, 2000 – две секунды и т.д.)
Sleep(100);
end;
// Close;
// Free;
end;
begin
Form := CreateCustomForm();
try
with Form do
begin
ClientWidth := ScaleX(375); //Ширина формы для ProgressBar
ClientHeight := ScaleY(120); //Высота формы для ProgressBar
BorderStyle := bsDialog;
Left := GetSystemMetrics(16) - ClientWidth - ScaleX(5);
Top := GetSystemMetrics(17) - ClientHeight - ScaleY(5);
Caption := 'Подготовка к установке...' //Заголовок мини ProgressBar'a
end;

BitmapFileName := ExpandConstant('{tmp}\Image_2.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Left := ScaleX(8);
BitmapImage.Top := ScaleY(8);
BitmapImage.Width := ScaleX(58);
BitmapImage.Height := ScaleY(58);
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 := 'Идет '; //Текст самого мини ProgressBar'a
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 := 'Отменить';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;

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(500);
i := i + 1;
end;
finally
Form.Free();
end;
end;
end;

function GetInstallDir(Dir: string): string;
begin
Dir := '';
RegQueryStringValue(HKLM, 'SOFTWARE\Electronic Arts\Electronic Arts\Red Alert 33','install dir', Dir);
Result := Dir;
end;

function InitializeSetup(): Boolean;
begin
Result := True;
S := ExpandConstant('{code:GetInstallDir}');
if S = '' then
begin
SuppressibleMsgBox('Игра Tom Clancy''s H.A.W.X не найдена!', mbCriticalError, MB_OK, MB_OK);
Result := False;
Exit;
end;

{
условия необходимые для определения обновлялась игра или нет,
размер или наличие новых файлов, запись в реестре,
наличие деинсталлятора патча,
в данном случае проверяется наличие деинсталлятора
--> проверка ... если условие выполняется Result := False
}

if MsgBox('Игра Tom Clancy''s H.A.W.X найдена, желаете установить ' + '{#SetupSetting("AppVerName")}' + '?', mbConfirmation, MB_YESNO) = IDNO then
Result := False;
Exit;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
S := ExpandConstant('{code:GetInstallDir}');
if S <> '' then
WizardForm.NextButton.OnClick(WizardForm.NextButton);

if CurPageID = wpSelectDir then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
if CurStep = ssDone then
begin
RenameFile(ExpandConstant('{app}\Data\Sounds\PC\Russian\'), ExpandConstant('{app}\Data\Sounds\PC\English\'));
MsgBox('{#SetupSetting("AppVerName")}' + ' установлен!', mbInformation, MB_OK);
end;
end;[/no]
[/more]
Автор: msatmb
Дата сообщения: 16.05.2009 00:45
Krinkels
не, так у меня у самого получалось В твоем случае (да и у меня также было) сначала появляется сообщение о том, что игра найдена и только потом запускается преинсталляция с последующим обновлением, а мне бы хотелось чтобы сначала была преинсталляция и лишь потом сообщение о том что игра найдена/не найдена.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.