Люди.... кто знает, как после завершения компиляции скрипта запустить определенную программу с помощью inno setup preprocessor'a.
» Inno Setup (создание инсталяционных пакетов)
Tony Picekato
А какая тут вообще связь то?! Зачем нужно после компиляции запускать внешнюю программу с помощью Inno Setup Preprocessor'а!?
А какая тут вообще связь то?! Зачем нужно после компиляции запускать внешнюю программу с помощью Inno Setup Preprocessor'а!?
У меня вопрос когда еще существовал ФТО там присутствовали раздачи игр Assassin's Creed и Fallout 3 их опубликовывал некий T-Rax по моему его так звали и он к своим раздачам прикреплял скрипт написаный на Инно в этом скрипте присутствовало проверка оборудования и т.д. может у кого есть?!??!
Yoldosh
Что-то не вижу в картинке ничего такого, что может отличаться от "стандартных" скриптов. Что здесь такого необычного?
Что-то не вижу в картинке ничего такого, что может отличаться от "стандартных" скриптов. Что здесь такого необычного?
SotM
Тут белый фон затемнен!!!
Тут белый фон затемнен!!!
SotM
Ну мне просто нужно чтобы после того как был создан exe-файл инсталлятора он подписывался цифровой подписью с помощью этой "определенныой" проги. Т.к делать это нужно будет много раз хотелось бы автоматизировать. Кроме как вызывть ее с помощью препроцессора что-то ничего в голову не приходит. Можно конечно батник сделать,который запускал бы компиляцию и при завершении прогу эту ,но тогда все равно название инсталятора в батнике менять нужно будет т.к. они всегда разные. Если кто-то другой способ знает - раскажите, пожалуйста.
Ну мне просто нужно чтобы после того как был создан exe-файл инсталлятора он подписывался цифровой подписью с помощью этой "определенныой" проги. Т.к делать это нужно будет много раз хотелось бы автоматизировать. Кроме как вызывть ее с помощью препроцессора что-то ничего в голову не приходит. Можно конечно батник сделать,который запускал бы компиляцию и при завершении прогу эту ,но тогда все равно название инсталятора в батнике менять нужно будет т.к. они всегда разные. Если кто-то другой способ знает - раскажите, пожалуйста.
SotM
В картинке изменен цвет фона.если есть такой скрипт поделись пожалуйста!!!
Добавлено:
у кого нибудь есть такой скрипт???
В картинке изменен цвет фона.если есть такой скрипт поделись пожалуйста!!!
Добавлено:
у кого нибудь есть такой скрипт???
По моей просьбе ни кто не поможет???
skeptik_vdm
Держи к Ассасину. Правда картинок нет
[more]
#define TIME_FOR_VIEW 5
[Setup]
AppName=Assassin's Creed Director's Cut Edition®
AppVerName=Assassin's Creed Director's Cut Edition®
AppPublisher=Ubisoft
AppSupportURL=http://www.ubi.com
DefaultDirName={pf32}\Ubisoft
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
WizardSmallImageFile=D:\Project_AC\img\skins_img\small.bmp
;Small.bmp это картинка на верху продолговатая!
UserInfoPage=true
InternalCompressLevel=ultra64
DiskSpanning=true
DiskSliceSize=2000000000
UsePreviousAppDir=false
AllowUNCPath=false
OutputDir=D:\Project_AC
; Директория выхода инсталятора
ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64
DisableProgramGroupPage=false
UsePreviousGroup=false
DefaultGroupName=Ubisoft\Assassin's Creed
VersionInfoVersion=1.0.0.2
AppID={{88A43236-2FFC-49AB-9DEF-D2481E3C2F9F}
UninstallFilesDir={app}\Assassin's Creed
DirExistsWarning=no
DisableReadyPage=true
VersionInfoCompany=© T-ReX
AppCopyright=© T-ReX 2008
SetupIconFile=D:\Project_AC\icon.ico
AppPublisherURL=http://www.ubi.com
AppVersion=1.0.0.2
UninstallDisplayName=Assassin's Creed®
UsePreviousSetupType=false
UsePreviousUserInfo=false
PrivilegesRequired=none
RestartIfNeededByRun=false
LanguageDetectionMethod=locale
[Languages]
Name: rus; MessagesFile: compiler:\Languages\Russian.isl
[Tasks]
Name: desktopicon1; Description: Создать ярлык на Рабочем столе; GroupDescription: {cm:AdditionalIcons}
Name: directx9c; Description: DirectX9c; GroupDescription: Необходимые компоненты:
[Files]
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: img\skins_img\splash.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\skins_img\smallprogress.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\skins_img\welcome.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: dll\bass.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: sound\my.mp3; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: dll\get_hw_caps.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: dll\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_4.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_5.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_6.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_7.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_8.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_9.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_10.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\skins_img\finish.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
[Icons]
Name: {group}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx10.exe; WorkingDir: {app}\Assassin's Creed; Tasks:
Name: {group}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx9.exe; WorkingDir: {app}\Assassin's Creed; Tasks: ; OnlyBelowVersion: 0,6.0.6000
Name: {group}\Официальный сайт; Filename: http://www.assassinscreed.com
Name: {group}\Удалить игру; Filename: {uninstallexe}; WorkingDir: {app}\Assassin's Creed
Name: {commondesktop}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx10.exe; Tasks: desktopicon1; WorkingDir: {app}\Assassin's Creed
Name: {commondesktop}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx9.exe; Tasks: desktopicon1; WorkingDir: {app}\Assassin's Creed; OnlyBelowVersion: 0,6.0.6000
[Run]
Filename: {src}\Support\DirectX\DXSetup.exe; Parameters: /silent; WorkingDir: {src}\Support\DirectX\; Tasks: directx9c; StatusMsg: Установка DirectX подождите ...; Flags: waituntilterminated
[UninstallDelete]
Name: {app}\Assassin's Creed\*; Type: filesandordirs
[Registry]
Root: HKLM32; Subkey: SOFTWARE\Ubisoft; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed; ValueType: string; ValueName: InstallDir; ValueData: {app}\Assassin's Creed\; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed; ValueType: string; ValueName: Language; ValueData: Russian; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed\GameUpdate; ValueType: string; ValueName: execPath; ValueData: {app}\Assassin's Creed\AssassinsCreed_Game.exe; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed\GameUpdate; ValueType: string; ValueName: installdir; ValueData: {app}Assassin's Creed\; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed\GameUpdate; ValueType: string; ValueName: language; ValueData: us; Flags: uninsdeletekey
[Messages]
StatusExtractFiles=Установка файлов игры...
ChangeDiskTitle=Необходим следующий диск.
SelectDiskLabel2=Вставьте следующий диск и нажмите «OK».
[Code]
////////////////////////////////////////////////////
{Установка слайдшоу на окне инсталятора}
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
URLLabel: TNewStaticText;
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
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';
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
case currTime of
{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp')) end;
2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp')) end;
3*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_4.bmp')) end;
4*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_5.bmp')) end;
5*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_6.bmp')) end;
6*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp')) end;
7*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_8.bmp')) end;
8*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_9.bmp')) end;
9*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'))end;
end;
if CurrTime = 9*{#TIME_FOR_VIEW} then CurrTime := -1;
end;
///////////////////////////////////////////////////
const
BASS_SAMPLE_LOOP = 4; //повторение
type
HSTREAM = DWORD; //тип звукового потока
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 delayload';
function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
///////////////////////////////
var
state, soft: boolean;
Image1, Image2: TBitmapImage;
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';
function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';
function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';
function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer;
external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';
function GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';
function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';
function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';
function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';
function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';
function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';
function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';
function DelSp(const s: string): string; // функция удаления пробелов в начале строки
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;
for i := 1 to Length(st) do
begin
stt := copy(st, i, 1);
if (stt = ' ') and (c >= 1) then
begin
st1 := st1;
c := c + 1;
end
else if (stt = ' ') and (c = 0) then
begin
c := c + 1;
st1 := st1 + stt;
end
else if (stt <> ' ') then
begin
c := 0;
st1 := st1 + stt;
end
end;
Result := st1;
end;
procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://game-torrent.info', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
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
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('my.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\my.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end
end
///////////////////////////////////////////////////////////
{Изменение окна инсталятора с пермещение прогрессбара}
ExtractTemporaryFile('Image_1.bmp');
ExtractTemporaryFile('Image_2.bmp');
ExtractTemporaryFile('Image_3.bmp');
ExtractTemporaryFile('Image_4.bmp');
ExtractTemporaryFile('Image_5.bmp');
ExtractTemporaryFile('Image_6.bmp');
ExtractTemporaryFile('Image_7.bmp');
ExtractTemporaryFile('Image_8.bmp');
ExtractTemporaryFile('Image_9.bmp');
ExtractTemporaryFile('Image_10.bmp');
currTime := 0;
WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + 10;
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.Width - WizardForm.CancelButton.Width - ScaleX(40);
WizardForm.ProgressGauge.Height := 12;
WizardForm.ProgressGauge.Hide;
WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := WizardForm.ProgressGauge.Width;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
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_1.bmp'));
SplashImage.Hide;
///////////////////////////////////////////////////////////
URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'Special for Game-Torrent.info';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := 330;
URLLabel.Left := 30;
ExtractTemporaryFile('Welcome.bmp')
ExtractTemporaryFile('Finish.bmp')
WizardForm.WizardSmallBitmapImage.Top:=0
WizardForm.WizardSmallBitmapImage.Left:=0
WizardForm.WizardSmallBitmapImage.Width:=498
WizardForm.WizardSmallBitmapImage.Height:=58
WizardForm.PageNameLabel.Visible:=false
WizardForm.PageDescriptionLabel.Visible:=false
WizardForm.FinishedLabel.Visible:=False
WizardForm.FinishedHeadingLabel.Visible:=False
WizardForm.WelcomeLabel1.Visible:=False
WizardForm.WelcomeLabel2.Visible:=False
Text := TNewStaticText.Create(WizardForm);
Text.Top := 102;
Text.Width := 332;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;
ListBox := TListBox.Create(WizardForm);
ListBox.Top := 120;
ListBox.Width := 332;
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;
////////////////////////////////
begin
if CurPageID = wpUserInfo then
begin
Result:=true;
if not state
or not soft
then
begin
z:='Не все компоненты удовлетворяют требованиям игры.' #13+#13 'Вы действительно хотите продолжить установку?'
if MsgBox(z, mbInformation, MB_YESNO)=idNo
then Result:=false;
end
end
end
end;
procedure CurPageChanged(CurPageID: Integer);
var
Text: TNewStaticText;
Windows,WindowsName: TMemo;
Os,OS1,OS2,OS3,OS4,OS5,OS6,OS7,OS8,OS9,OS10,HARD: string; // строка с названием необходимой ОС
ProcessorName: string;
Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
ProcessorMHZ: Cardinal;
StaticText: TNewStaticText;
VidRam: integer;
pfunc: LongWord;
begin
/////////////////////////////////////////
{Здесь код показа на странице Инсталл измененного прогрессбара}
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
URLLabel.Hide;
WizardForm.ProgressGauge.Show;
SplashImage.Show;
WizardForm.StatusLabel.Show;
WizardForm.CancelButton.Enabled :=True;
end
else
begin
URLLabel.Show;
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.StatusLabel.Hide;
//WizardForm.FilenameLabel.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;
end;
//////////////////////////////////////////////////////////////
If CurPageID=wpFinished then
begin
Image2:=TBitmapImage.Create(WizardForm)
with Image2 do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.FinishedPage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Finish.bmp')
end
WizardForm.NextButton.Left:=380;
WizardForm.NextButton.Top:=325;
end
//////////////////////////////
If CurPageID=wpWelcome then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Начать>';
end
begin
Image1:=TBitmapImage.Create(WizardForm)
with Image1 do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.WelcomePage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Welcome.bmp')
end
end
if CurPageID=wpSelectTasks then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установка';
If WizardForm.FindComponent('CancelButton') is TButton
then
TButton(WizardForm.FindComponent('CancelButton')).Caption:='Выход';
end
if CurPageID = wpUserInfo then
begin
//подменяем сраницу информации о пользователе на информацию об ОС
wizardForm.UserInfoNameEdit.visible:=false;
wizardForm.UserInfoNameEdit.text:='Игрок'; //на случай, когда имя пользователя не указано в системе
wizardForm.UserInfoNameLabel.visible:=false;
wizardForm.UserInfoOrgLabel.visible:=false;
wizardForm.UserInfoOrgEdit.visible:=false;
wizardForm.UserInfoOrgEdit.text:='Группа игроков ';//на случай, когда организация не указано в системе
wizardForm.PageNameLabel.Caption := 'Аппаратное обеспечение и Операционная система';
wizardForm.PageDescriptionLabel.Caption := 'Программа установки обнаружила следующие необходимые компоненты и Операционную систему ';
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);
OS:=' Microsoft Windows XP Service Pack 2';
OS10:=' Microsoft Windows XP Service Pack 3'; //строка является записью из реестра
OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является записью из реестра
OS2:=' Windows Vista (TM) Ultimate ';
OS3:=' Windows Vista (TM) Home Basic ';
OS4:=' Windows Vista (TM) Home Premium ';
OS5:=' Windows Vista (TM) Business ';
OS6:=' Windows Vista (TM) Ultimate Service Pack 1'
OS7:=' Windows Vista (TM) Home Basic Service Pack 1';
OS8:=' Windows Vista (TM) Home Premium Service Pack 1';
OS9:=' Windows Vista (TM) Business Service Pack 1';
HARD:='Все компоненты удовлетворяют требованиям игры.';
Windows := TMemo.Create(WizardForm);
StaticText := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with StaticText do begin
Left := 0;
Top := 52;
Width := 417;
Height := 14;
Caption := 'Все компоненты удовлетворяют требованиям игры.';
Parent := WizardForm.UserInfoPage;
StaticText.font.color:=clGreen;
end
with Windows do
begin
Text := ' Операц. система';
Parent := WizardForm.UserInfoPage;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := clBtnFace;
end
Processor := TMemo.Create(WizardForm);
with Processor do begin
Text := ' Процессор';
Parent := WizardForm.UserInfoPage;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := clBtnFace;
end
VideoCardPanel := TMemo.Create(WizardForm);
with VideoCardPanel do begin
Text := ' Видеоадаптер';
Parent := WizardForm.UserInfoPage;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := clBtnFace;
end
AudioCardPanel := TMemo.Create(WizardForm);
with AudioCardPanel do begin
Text := ' Звуковая карта';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
end
RAMPanel := TMemo.Create(WizardForm);
with RAMPanel do begin
Text := ' ОЗУ';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
end
PageFilePanel := TMemo.Create(WizardForm);
with PageFilePanel do begin
Text := ' Файл подкачки';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
ProcessorNamePanel := TMemo.Create(WizardForm);
with ProcessorNamePanel do begin
Text := DelSP(ProcessorName) + ' ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
Parent := WizardForm.UserInfoPage;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := $CCFFCC;
if ProcessorMHZ < 2600 then
begin
ProcessorNamePanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
VideoCardNamePanel := TMemo.Create(WizardForm);
with VideoCardNamePanel do begin
Text := ' ' + GetVideoCardName + 'MB'; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'
Parent := WizardForm.UserInfoPage;
VidrAM := GetVidMemLocal / 1000000;
if VidRam > 127 then
begin
if VidRam < 200 then text := text + ' ОЗУ - 128 МB'
else if VidRam < 300 then text := text + ' ОЗУ - 256 МB'
else if VidRam < 400 then text := text + ' ОЗУ - 384 МB'
else if VidRam > 500 then text := text + ' ОЗУ - 512 МB';
end;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := $CCFFCC;
if GetVidMemLocal < 127000000 then //128 MB
begin
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
VideoCardNamePanel.Color := $ccccff;
end;
end
AudioCardNamePanel := TMemo.Create(WizardForm);
with AudioCardNamePanel do begin
Text := ' ' + GetSoundCardName;
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R
ReadOnly := True;
end
RAMTotalPanel := TMemo.Create(WizardForm);
with RAMTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
if GetSystemPhys + 1 < 1024 then
begin
RAMTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;
PageFileTotalPanel := TMemo.Create(WizardForm);
with PageFileTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPage) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
if GetSystemPage < 1247 then
begin
PageFileTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;
end
if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
begin
WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := $CCFFCC;
end
end
end;
// Проверка Windows 9x
if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
begin
WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
end
end;
if OS=(WindowsName.Text) then state:=true else
if OS2=(WindowsName.Text) then state:=true else
if OS3=(WindowsName.Text) then state:=true else
if OS4=(WindowsName.Text) then state:=true else
if OS5=(WindowsName.Text) then state:=true else
if OS6=(WindowsName.Text) then state:=true else
if OS7=(WindowsName.Text) then state:=true else
if OS8=(WindowsName.Text) then state:=true else
if OS9=(WindowsName.Text) then state:=true else
if OS10=(WindowsName.Text) then state:=true else
if OS1=(WindowsName.Text) then state:=true else state:=false;
////////////////////////////////////////////////////////////////////////
{условие проверки оборудования}
if HARD=(StaticText.Caption) then soft:=true else soft:=false;
////////////////////////////////////////////////////////////////////////
Text := TNewStaticText.Create(WizardForm);
with Text do begin
Left := 0;
Top := 0;
Width := 417;
Height := 14;
if state then
begin
Font.Color:=clGreen;
WindowsName.color:=$CCFFCC;
// SP_Num.color:=$CCFFCC;
Caption := 'Операционная система соответствует требованиям игры.';
end
else
begin
Font.Color:=clREd;
WindowsName.color:=clRed;
WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
WindowsName.Top := ScaleY(20);
WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
WindowsName.ReadOnly := True;
Caption := 'Операционная система не соответствует требованиям игры.';
end
Parent := WizardForm.UserInfoPage;
end
Text := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with Text do begin
Left := 0;
Top := 220;
Width := 417;
Height := 14;
Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
Parent := WizardForm.UserInfoPage;
end
end;
end;
procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;
[/more]
Держи к Ассасину. Правда картинок нет
[more]
#define TIME_FOR_VIEW 5
[Setup]
AppName=Assassin's Creed Director's Cut Edition®
AppVerName=Assassin's Creed Director's Cut Edition®
AppPublisher=Ubisoft
AppSupportURL=http://www.ubi.com
DefaultDirName={pf32}\Ubisoft
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
WizardSmallImageFile=D:\Project_AC\img\skins_img\small.bmp
;Small.bmp это картинка на верху продолговатая!
UserInfoPage=true
InternalCompressLevel=ultra64
DiskSpanning=true
DiskSliceSize=2000000000
UsePreviousAppDir=false
AllowUNCPath=false
OutputDir=D:\Project_AC
; Директория выхода инсталятора
ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64
DisableProgramGroupPage=false
UsePreviousGroup=false
DefaultGroupName=Ubisoft\Assassin's Creed
VersionInfoVersion=1.0.0.2
AppID={{88A43236-2FFC-49AB-9DEF-D2481E3C2F9F}
UninstallFilesDir={app}\Assassin's Creed
DirExistsWarning=no
DisableReadyPage=true
VersionInfoCompany=© T-ReX
AppCopyright=© T-ReX 2008
SetupIconFile=D:\Project_AC\icon.ico
AppPublisherURL=http://www.ubi.com
AppVersion=1.0.0.2
UninstallDisplayName=Assassin's Creed®
UsePreviousSetupType=false
UsePreviousUserInfo=false
PrivilegesRequired=none
RestartIfNeededByRun=false
LanguageDetectionMethod=locale
[Languages]
Name: rus; MessagesFile: compiler:\Languages\Russian.isl
[Tasks]
Name: desktopicon1; Description: Создать ярлык на Рабочем столе; GroupDescription: {cm:AdditionalIcons}
Name: directx9c; Description: DirectX9c; GroupDescription: Необходимые компоненты:
[Files]
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: img\skins_img\splash.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\skins_img\smallprogress.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\skins_img\welcome.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: dll\bass.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: sound\my.mp3; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: dll\get_hw_caps.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: dll\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_4.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_5.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_6.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_7.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_8.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_9.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_10.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\skins_img\finish.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
[Icons]
Name: {group}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx10.exe; WorkingDir: {app}\Assassin's Creed; Tasks:
Name: {group}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx9.exe; WorkingDir: {app}\Assassin's Creed; Tasks: ; OnlyBelowVersion: 0,6.0.6000
Name: {group}\Официальный сайт; Filename: http://www.assassinscreed.com
Name: {group}\Удалить игру; Filename: {uninstallexe}; WorkingDir: {app}\Assassin's Creed
Name: {commondesktop}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx10.exe; Tasks: desktopicon1; WorkingDir: {app}\Assassin's Creed
Name: {commondesktop}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx9.exe; Tasks: desktopicon1; WorkingDir: {app}\Assassin's Creed; OnlyBelowVersion: 0,6.0.6000
[Run]
Filename: {src}\Support\DirectX\DXSetup.exe; Parameters: /silent; WorkingDir: {src}\Support\DirectX\; Tasks: directx9c; StatusMsg: Установка DirectX подождите ...; Flags: waituntilterminated
[UninstallDelete]
Name: {app}\Assassin's Creed\*; Type: filesandordirs
[Registry]
Root: HKLM32; Subkey: SOFTWARE\Ubisoft; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed; ValueType: string; ValueName: InstallDir; ValueData: {app}\Assassin's Creed\; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed; ValueType: string; ValueName: Language; ValueData: Russian; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed\GameUpdate; ValueType: string; ValueName: execPath; ValueData: {app}\Assassin's Creed\AssassinsCreed_Game.exe; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed\GameUpdate; ValueType: string; ValueName: installdir; ValueData: {app}Assassin's Creed\; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed\GameUpdate; ValueType: string; ValueName: language; ValueData: us; Flags: uninsdeletekey
[Messages]
StatusExtractFiles=Установка файлов игры...
ChangeDiskTitle=Необходим следующий диск.
SelectDiskLabel2=Вставьте следующий диск и нажмите «OK».
[Code]
////////////////////////////////////////////////////
{Установка слайдшоу на окне инсталятора}
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
URLLabel: TNewStaticText;
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
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';
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
case currTime of
{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp')) end;
2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp')) end;
3*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_4.bmp')) end;
4*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_5.bmp')) end;
5*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_6.bmp')) end;
6*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp')) end;
7*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_8.bmp')) end;
8*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_9.bmp')) end;
9*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'))end;
end;
if CurrTime = 9*{#TIME_FOR_VIEW} then CurrTime := -1;
end;
///////////////////////////////////////////////////
const
BASS_SAMPLE_LOOP = 4; //повторение
type
HSTREAM = DWORD; //тип звукового потока
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 delayload';
function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
///////////////////////////////
var
state, soft: boolean;
Image1, Image2: TBitmapImage;
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';
function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';
function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';
function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer;
external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';
function GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';
function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';
function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';
function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';
function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';
function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';
function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';
function DelSp(const s: string): string; // функция удаления пробелов в начале строки
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;
for i := 1 to Length(st) do
begin
stt := copy(st, i, 1);
if (stt = ' ') and (c >= 1) then
begin
st1 := st1;
c := c + 1;
end
else if (stt = ' ') and (c = 0) then
begin
c := c + 1;
st1 := st1 + stt;
end
else if (stt <> ' ') then
begin
c := 0;
st1 := st1 + stt;
end
end;
Result := st1;
end;
procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://game-torrent.info', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
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
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('my.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\my.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end
end
///////////////////////////////////////////////////////////
{Изменение окна инсталятора с пермещение прогрессбара}
ExtractTemporaryFile('Image_1.bmp');
ExtractTemporaryFile('Image_2.bmp');
ExtractTemporaryFile('Image_3.bmp');
ExtractTemporaryFile('Image_4.bmp');
ExtractTemporaryFile('Image_5.bmp');
ExtractTemporaryFile('Image_6.bmp');
ExtractTemporaryFile('Image_7.bmp');
ExtractTemporaryFile('Image_8.bmp');
ExtractTemporaryFile('Image_9.bmp');
ExtractTemporaryFile('Image_10.bmp');
currTime := 0;
WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + 10;
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.Width - WizardForm.CancelButton.Width - ScaleX(40);
WizardForm.ProgressGauge.Height := 12;
WizardForm.ProgressGauge.Hide;
WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := WizardForm.ProgressGauge.Width;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
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_1.bmp'));
SplashImage.Hide;
///////////////////////////////////////////////////////////
URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'Special for Game-Torrent.info';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := 330;
URLLabel.Left := 30;
ExtractTemporaryFile('Welcome.bmp')
ExtractTemporaryFile('Finish.bmp')
WizardForm.WizardSmallBitmapImage.Top:=0
WizardForm.WizardSmallBitmapImage.Left:=0
WizardForm.WizardSmallBitmapImage.Width:=498
WizardForm.WizardSmallBitmapImage.Height:=58
WizardForm.PageNameLabel.Visible:=false
WizardForm.PageDescriptionLabel.Visible:=false
WizardForm.FinishedLabel.Visible:=False
WizardForm.FinishedHeadingLabel.Visible:=False
WizardForm.WelcomeLabel1.Visible:=False
WizardForm.WelcomeLabel2.Visible:=False
Text := TNewStaticText.Create(WizardForm);
Text.Top := 102;
Text.Width := 332;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;
ListBox := TListBox.Create(WizardForm);
ListBox.Top := 120;
ListBox.Width := 332;
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;
////////////////////////////////
begin
if CurPageID = wpUserInfo then
begin
Result:=true;
if not state
or not soft
then
begin
z:='Не все компоненты удовлетворяют требованиям игры.' #13+#13 'Вы действительно хотите продолжить установку?'
if MsgBox(z, mbInformation, MB_YESNO)=idNo
then Result:=false;
end
end
end
end;
procedure CurPageChanged(CurPageID: Integer);
var
Text: TNewStaticText;
Windows,WindowsName: TMemo;
Os,OS1,OS2,OS3,OS4,OS5,OS6,OS7,OS8,OS9,OS10,HARD: string; // строка с названием необходимой ОС
ProcessorName: string;
Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
ProcessorMHZ: Cardinal;
StaticText: TNewStaticText;
VidRam: integer;
pfunc: LongWord;
begin
/////////////////////////////////////////
{Здесь код показа на странице Инсталл измененного прогрессбара}
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
URLLabel.Hide;
WizardForm.ProgressGauge.Show;
SplashImage.Show;
WizardForm.StatusLabel.Show;
WizardForm.CancelButton.Enabled :=True;
end
else
begin
URLLabel.Show;
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.StatusLabel.Hide;
//WizardForm.FilenameLabel.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;
end;
//////////////////////////////////////////////////////////////
If CurPageID=wpFinished then
begin
Image2:=TBitmapImage.Create(WizardForm)
with Image2 do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.FinishedPage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Finish.bmp')
end
WizardForm.NextButton.Left:=380;
WizardForm.NextButton.Top:=325;
end
//////////////////////////////
If CurPageID=wpWelcome then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Начать>';
end
begin
Image1:=TBitmapImage.Create(WizardForm)
with Image1 do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.WelcomePage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Welcome.bmp')
end
end
if CurPageID=wpSelectTasks then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установка';
If WizardForm.FindComponent('CancelButton') is TButton
then
TButton(WizardForm.FindComponent('CancelButton')).Caption:='Выход';
end
if CurPageID = wpUserInfo then
begin
//подменяем сраницу информации о пользователе на информацию об ОС
wizardForm.UserInfoNameEdit.visible:=false;
wizardForm.UserInfoNameEdit.text:='Игрок'; //на случай, когда имя пользователя не указано в системе
wizardForm.UserInfoNameLabel.visible:=false;
wizardForm.UserInfoOrgLabel.visible:=false;
wizardForm.UserInfoOrgEdit.visible:=false;
wizardForm.UserInfoOrgEdit.text:='Группа игроков ';//на случай, когда организация не указано в системе
wizardForm.PageNameLabel.Caption := 'Аппаратное обеспечение и Операционная система';
wizardForm.PageDescriptionLabel.Caption := 'Программа установки обнаружила следующие необходимые компоненты и Операционную систему ';
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);
OS:=' Microsoft Windows XP Service Pack 2';
OS10:=' Microsoft Windows XP Service Pack 3'; //строка является записью из реестра
OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является записью из реестра
OS2:=' Windows Vista (TM) Ultimate ';
OS3:=' Windows Vista (TM) Home Basic ';
OS4:=' Windows Vista (TM) Home Premium ';
OS5:=' Windows Vista (TM) Business ';
OS6:=' Windows Vista (TM) Ultimate Service Pack 1'
OS7:=' Windows Vista (TM) Home Basic Service Pack 1';
OS8:=' Windows Vista (TM) Home Premium Service Pack 1';
OS9:=' Windows Vista (TM) Business Service Pack 1';
HARD:='Все компоненты удовлетворяют требованиям игры.';
Windows := TMemo.Create(WizardForm);
StaticText := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with StaticText do begin
Left := 0;
Top := 52;
Width := 417;
Height := 14;
Caption := 'Все компоненты удовлетворяют требованиям игры.';
Parent := WizardForm.UserInfoPage;
StaticText.font.color:=clGreen;
end
with Windows do
begin
Text := ' Операц. система';
Parent := WizardForm.UserInfoPage;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := clBtnFace;
end
Processor := TMemo.Create(WizardForm);
with Processor do begin
Text := ' Процессор';
Parent := WizardForm.UserInfoPage;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := clBtnFace;
end
VideoCardPanel := TMemo.Create(WizardForm);
with VideoCardPanel do begin
Text := ' Видеоадаптер';
Parent := WizardForm.UserInfoPage;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := clBtnFace;
end
AudioCardPanel := TMemo.Create(WizardForm);
with AudioCardPanel do begin
Text := ' Звуковая карта';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
end
RAMPanel := TMemo.Create(WizardForm);
with RAMPanel do begin
Text := ' ОЗУ';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
end
PageFilePanel := TMemo.Create(WizardForm);
with PageFilePanel do begin
Text := ' Файл подкачки';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
ProcessorNamePanel := TMemo.Create(WizardForm);
with ProcessorNamePanel do begin
Text := DelSP(ProcessorName) + ' ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
Parent := WizardForm.UserInfoPage;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := $CCFFCC;
if ProcessorMHZ < 2600 then
begin
ProcessorNamePanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
VideoCardNamePanel := TMemo.Create(WizardForm);
with VideoCardNamePanel do begin
Text := ' ' + GetVideoCardName + 'MB'; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'
Parent := WizardForm.UserInfoPage;
VidrAM := GetVidMemLocal / 1000000;
if VidRam > 127 then
begin
if VidRam < 200 then text := text + ' ОЗУ - 128 МB'
else if VidRam < 300 then text := text + ' ОЗУ - 256 МB'
else if VidRam < 400 then text := text + ' ОЗУ - 384 МB'
else if VidRam > 500 then text := text + ' ОЗУ - 512 МB';
end;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := $CCFFCC;
if GetVidMemLocal < 127000000 then //128 MB
begin
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
VideoCardNamePanel.Color := $ccccff;
end;
end
AudioCardNamePanel := TMemo.Create(WizardForm);
with AudioCardNamePanel do begin
Text := ' ' + GetSoundCardName;
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R
ReadOnly := True;
end
RAMTotalPanel := TMemo.Create(WizardForm);
with RAMTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
if GetSystemPhys + 1 < 1024 then
begin
RAMTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;
PageFileTotalPanel := TMemo.Create(WizardForm);
with PageFileTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPage) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
if GetSystemPage < 1247 then
begin
PageFileTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;
end
if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
begin
WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
Color := $CCFFCC;
end
end
end;
// Проверка Windows 9x
if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
begin
WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
ReadOnly := True;
end
end;
if OS=(WindowsName.Text) then state:=true else
if OS2=(WindowsName.Text) then state:=true else
if OS3=(WindowsName.Text) then state:=true else
if OS4=(WindowsName.Text) then state:=true else
if OS5=(WindowsName.Text) then state:=true else
if OS6=(WindowsName.Text) then state:=true else
if OS7=(WindowsName.Text) then state:=true else
if OS8=(WindowsName.Text) then state:=true else
if OS9=(WindowsName.Text) then state:=true else
if OS10=(WindowsName.Text) then state:=true else
if OS1=(WindowsName.Text) then state:=true else state:=false;
////////////////////////////////////////////////////////////////////////
{условие проверки оборудования}
if HARD=(StaticText.Caption) then soft:=true else soft:=false;
////////////////////////////////////////////////////////////////////////
Text := TNewStaticText.Create(WizardForm);
with Text do begin
Left := 0;
Top := 0;
Width := 417;
Height := 14;
if state then
begin
Font.Color:=clGreen;
WindowsName.color:=$CCFFCC;
// SP_Num.color:=$CCFFCC;
Caption := 'Операционная система соответствует требованиям игры.';
end
else
begin
Font.Color:=clREd;
WindowsName.color:=clRed;
WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
WindowsName.Top := ScaleY(20);
WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
WindowsName.ReadOnly := True;
Caption := 'Операционная система не соответствует требованиям игры.';
end
Parent := WizardForm.UserInfoPage;
end
Text := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with Text do begin
Left := 0;
Top := 220;
Width := 417;
Height := 14;
Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
Parent := WizardForm.UserInfoPage;
end
end;
end;
procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;
[/more]
msatmb
Спасибо удружил!!!
Спасибо удружил!!!
А можно изменить внешний вид деинсталлятора? Поискал по форуму и ссылкам, но что-то не нашел... Хотелось бы чтобы деинсталляция происходила в "узком" окне, т.е. без всяких надписей типа "происходит удаление" и т.д.
Добавлено:
и как сделать, чтобы ярлык на рабочем столе появлялся действительно в конце установки, т.е. после всех тех действий что обозначены в секции Run.
Добавлено:
и как сделать, чтобы ярлык на рабочем столе появлялся действительно в конце установки, т.е. после всех тех действий что обозначены в секции Run.
msatmb
Цитата:
Возможно [more=так] procedure InitializeUninstallProgressForm();
begin
UninstallProgressForm.MainPanel.Hide;
UninstallProgressForm.PageNameLabel.Hide;
UninstallProgressForm.PageDescriptionLabel.Hide;
UninstallProgressForm.Bevel1.Hide;
UninstallProgressForm.InnerNotebook.Top := ScaleY(0);
UninstallProgressForm.Height := ScaleY(120);
end;[/more]устроит.
Цитата:
После нажатия "Завершить" [more]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
CreateShellLink(ExpandConstant('{userdesktop}\Uninstall Run.lnk'), '',
ExpandConstant('{uninstallexe}'), '', '', '', 0, SW_SHOWNORMAL);
end;
удаляем ярлык при деинсталляции -->
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\Uninstall Run.lnk'));
end;
[/more]
Цитата:
Цитата:
Хотелось бы чтобы деинсталляция происходила в "узком" окне, т.е. без всяких надписей типа "происходит удаление" и т.д.
Возможно [more=так] procedure InitializeUninstallProgressForm();
begin
UninstallProgressForm.MainPanel.Hide;
UninstallProgressForm.PageNameLabel.Hide;
UninstallProgressForm.PageDescriptionLabel.Hide;
UninstallProgressForm.Bevel1.Hide;
UninstallProgressForm.InnerNotebook.Top := ScaleY(0);
UninstallProgressForm.Height := ScaleY(120);
end;[/more]устроит.
Цитата:
чтобы ярлык на рабочем столе появлялся действительно в конце установки
После нажатия "Завершить" [more]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
CreateShellLink(ExpandConstant('{userdesktop}\Uninstall Run.lnk'), '',
ExpandConstant('{uninstallexe}'), '', '', '', 0, SW_SHOWNORMAL);
end;
удаляем ярлык при деинсталляции -->
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\Uninstall Run.lnk'));
end;
[/more]
Цитата:
после всех тех действий что обозначены в секции Run, ну или описывать действия в коде в CurStepChanged ssPostInstall, далее создать ярлык.
kombat 77
Все прекрасно работает. Спасибо огромное! А можно как то усовершенствовать код (после нажатия "Завершить") чтобы он проверял установил пользователь галочку "Добавить ярлык на рабочий стол" и в случае утверждения - выполнялся, в противном случае - не выполнялся. Только у меня галочка ставится не через Task, а через Check: MakeDesktopIcon. И еще как в твоем коде прописать WorkingDir?
Все прекрасно работает. Спасибо огромное! А можно как то усовершенствовать код (после нажатия "Завершить") чтобы он проверял установил пользователь галочку "Добавить ярлык на рабочий стол" и в случае утверждения - выполнялся, в противном случае - не выполнялся. Только у меня галочка ставится не через Task, а через Check: MakeDesktopIcon. И еще как в твоем коде прописать WorkingDir?
msatmb
Цитата:
Цитата:
var
MakeDesktopIcon: TCheckBox;
procedure InitializeWizard();
begin
MakeDesktopIcon := TCheckBox.Create(WizardForm);
MakeDesktopIcon.Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(10);
MakeDesktopIcon.Left := ScaleX(0);
MakeDesktopIcon.Width := WizardForm.DirEdit.Width;
MakeDesktopIcon.Caption := ExpandConstant('{cm:CreateDesktopIcon}');
MakeDesktopIcon.Checked := True;
MakeDesktopIcon.Parent := WizardForm.SelectDirPage;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
if MakeDesktopIcon.Checked then
CreateShellLink(ExpandConstant('{userdesktop}\Uninstall_Test.lnk'), 'Uninstall My Programm',
ExpandConstant('{uninstallexe}'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\Uninstall_Test.lnk'));
end;
[/more]
Цитата:
чтобы он проверял установил пользователь галочку "Добавить ярлык на рабочий стол" и в случае утверждения - выполнялся, в противном случае - не выполнялся. Только у меня галочка ставится не через Task, а через Check: MakeDesktopIcon. И еще как в твоем коде прописать WorkingDir?
Цитата:
MakeDesktopIcon[more=Может так]
var
MakeDesktopIcon: TCheckBox;
procedure InitializeWizard();
begin
MakeDesktopIcon := TCheckBox.Create(WizardForm);
MakeDesktopIcon.Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(10);
MakeDesktopIcon.Left := ScaleX(0);
MakeDesktopIcon.Width := WizardForm.DirEdit.Width;
MakeDesktopIcon.Caption := ExpandConstant('{cm:CreateDesktopIcon}');
MakeDesktopIcon.Checked := True;
MakeDesktopIcon.Parent := WizardForm.SelectDirPage;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
if MakeDesktopIcon.Checked then
CreateShellLink(ExpandConstant('{userdesktop}\Uninstall_Test.lnk'), 'Uninstall My Programm',
ExpandConstant('{uninstallexe}'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\Uninstall_Test.lnk'));
end;
[/more]
Помогите сделать скрипт как в этом инстоляторе http://koooka.narod.ru/iso.html
Сборка ISO от Koooka 06.03.2009
Сборка ISO от Koooka 06.03.2009
kombat 77
что-то не получается... если галочка отжата - ярлык не выводится, а вот если галочка нажата, то ярлык выводится до нажатия кнопки "Завершить", т.е. до выполнения всех операций.
что-то не получается... если галочка отжата - ярлык не выводится, а вот если галочка нажата, то ярлык выводится до нажатия кнопки "Завершить", т.е. до выполнения всех операций.
msatmb
Цитата:
Цитата:
что-то не получается... если галочка отжата - ярлык не выводится, а вот если галочка нажата, то ярлык выводится до нажатия кнопки "Завершить", т.е. до выполнения всех операций.Проверь операторные скобки (begin ... end), подозреваю что есть еще функции в процедуре CurStepChanged.
kombat 77
Ндя...что-то у меня действительно наворочено в коде. и не только в CurStepChanged
Вот сам код полностью... Может подскажешь?
[more]
#define MyAppName "Морской охотник"
#define MyAppVerName "Морской охотник"
#define MyAppExeName "PT-Boats.exe"
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=no
OutputDir=D:\MyInno_Script\Морской охотник\
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
DiskSpanning=true
DiskClusterSize=4096
DiskSliceSize=1735040064
WizardImageFile=D:\MyInno_Script\Морской охотник\scripts\big.bmp
WizardSmallImageFile=D:\MyInno_Script\Морской охотник\scripts\small.bmp
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
DisableFinishedPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
UninstallDisplayIcon={app}\{#MyAppExeName}
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: "{tmp}\arc.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall ignoreversion dontcopy
Source: "D:\MyInno_Script\vtv\scripts\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\MyInno_Script\Морской охотник\scripts\main_theme.mp3"; DestDir: "{tmp}"; Flags: dontcopy
Source: D:\MyInno_Script\Морской охотник\Local Settings\Aplication Data\*; DestDir: {localappdata}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
Source: D:\MyInno_Script\Морской охотник\Морской Охотник\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
[Run]
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData ENVIRONMENTS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление окружающего мира..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q ENVIRONMENTS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData NAVALS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление моделей кораблей..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q NAVALS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData SOUNDS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление звукового окружения..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q SOUNDS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData WEAPONS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление моделей оружия..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q WEAPONS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{src}\Drivers\Ageia\PhysX.exe"; Parameters: "/quiet"; StatusMsg: "Установка: NVIDIA PhysX System Software..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp1
Filename: "{src}\Drivers\VCRedist\vcredist_x86.exe"; Parameters: "/q"; StatusMsg: "Установка: Microsoft Visual C++ 2005..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp2
Filename: "{src}\Drivers\codec\XviD-1.1.3.exe"; Parameters: "/silent /nocancel"; StatusMsg: "Установка: XviD кодек..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp3
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Akella"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Akella\PTBoats"; ValueName: "Install Dir"; ValueType: String; ValueData: "{app}"; Flags: uninsdeletevalue
[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {group}\Руководство; Filename: {app}\manual.pdf; WorkingDir: {app}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\{#MyAppExeName}
Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Check: MakeDesktopIcon;
[Messages]
BeveledLabel=Repack by MSA
StatusExtractFiles=Копирование файлов
WizardSelectDir=Выбор папки установки и дополнительных задач
SelectDirDesc=Выберите целевую директорию и дополнительные задачи, которые должны выполниться во время установки
[UninstallDelete]
Type: filesandordirs; Name: {app}
[Code]
type
HSTREAM = DWORD;
const
NeedSize = 1500;
BASS_SAMPLE_LOOP = 4;
var
DesktopIcon,Comp1,Comp2,Comp3: TCheckBox;
PageNameLabel, PageDescriptionLabel: TLabel;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;
ProgressBar1: TNewProgressBar;
AppDir: string; ResultCode: Integer;
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 delayload';
function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
function MakeDesktopIcon: Boolean;
begin
Result:=DesktopIcon.Checked;
end;
Function customComp1:Boolean;
begin
Result:=Comp1.Checked;
end;
Function customComp2:Boolean;
begin
Result:=Comp2.Checked;
end;
Function customComp3:Boolean;
begin
Result:=Comp3.Checked;
end;
procedure HideInstallPath();
begin
WizardForm.FileNameLabel.Visible := False;
end;
//*******//
procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;
procedure ReadEntries();
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Akella\PTBoats', 'Install Dir', AppDir);
end;
procedure animateprogress;
begin ProgressBar1.Position := ProgressBar1.Position+1
end;
function InitializeSetup(): Boolean;
var
Exe: string;
begin
Exe:='PT-Boats.exe';
if (RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Akella\PTBoats', 'Install Dir')) then
begin
ReadEntries;
case (MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' уже найдена на Вашем компьютере. Запустить игру?', mbConfirmation, MB_YESNOCANCEL or MB_DEFBUTTON3)) of
IDYES:
begin
if (FileExists(AddBackslash(AppDir) + Exe)) then
begin
Exec(AddBackslash(AppDir) + Exe, '', ExtractFilePath(AddBackslash(AppDir) + Exe), SW_SHOW, ewNoWait, ResultCode);
end else begin
MsgBox('Невозможно запустить ' + '{#SetupSetting("AppName")}' + ', т.к. исполняемый файл программы не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1);
end
Result:=False;
end
IDNO:
begin
Result:=True;
end
IDCANCEL:
begin
Result:=False;
end
end
end else begin
Result:=True;
end
end;
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=false;
end else
WizardForm.NextButton.Enabled:=true;
end;
end;
procedure InitializeWizard();
var
Name1: string;
i: Integer;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('main_theme.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\main_theme.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
DesktopIcon := TCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Добавить ярлык на рабочий стол';
Left := ScaleX(0);
Top := ScaleY(175);
Width := ScaleX(400);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(350);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
Font.Style := [fsBold];
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;
PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(330);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;
begin
WizardForm.BorderStyle := bsDialog;
end;
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
begin
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: 1,5 GB';
end;
FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;
ProgressBar1 := TNewProgressBar.Create(wizardform);
with ProgressBar1 do
begin
Parent := wizardform.installingpage;
Left := wizardform.progressgauge.left;
Top := wizardform.progressgauge.top+wizardform.progressgauge.height+15;
Width := wizardform.progressgauge.width;
Height := wizardform.progressgauge.height;
Max :=11; //задается как кол-во файлов в [_run]
end;
Comp3 := TCheckBox.Create(WizardForm);
with Comp3 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'XviD кодек';
Left := ScaleX(0);
Top := ScaleY(112);
Width := ScaleX(97);
Height := ScaleY(17);
TabOrder := 1;
Checked := True;
end;
Comp2 := TCheckBox.Create(WizardForm);
with Comp2 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Microsoft Visual C++ 2005';
Left := ScaleX(0);
Top := ScaleY(132);
Width := ScaleX(250);
Height := ScaleY(17);
TabOrder := 1;
Checked := True;
end;
Comp1 := TCheckBox.Create(WizardForm);
with Comp1 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'NVIDIA PhysX System Software';
Left := ScaleX(0);
Top := ScaleY(152);
Width := ScaleX(250);
Height := ScaleY(17);
TabOrder := 0;
Checked := True;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpSelectDir then
if CurPageID = wpSelectDir
then begin
WizardForm.NextButton.Caption:='Установить';
if FreeMB < NeedSize
then WizardForm.NextButton.Enabled:=False;
end;
begin
WizardForm.Position:=poScreenCenter;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
procedure DeInitializeSetup();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
Cancel:=True;
end;
[/more]
Может еще кому-то пригодится
Ндя...что-то у меня действительно наворочено в коде. и не только в CurStepChanged
Вот сам код полностью... Может подскажешь?
[more]
#define MyAppName "Морской охотник"
#define MyAppVerName "Морской охотник"
#define MyAppExeName "PT-Boats.exe"
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=no
OutputDir=D:\MyInno_Script\Морской охотник\
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
DiskSpanning=true
DiskClusterSize=4096
DiskSliceSize=1735040064
WizardImageFile=D:\MyInno_Script\Морской охотник\scripts\big.bmp
WizardSmallImageFile=D:\MyInno_Script\Морской охотник\scripts\small.bmp
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
DisableFinishedPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
UninstallDisplayIcon={app}\{#MyAppExeName}
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: "{tmp}\arc.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall ignoreversion dontcopy
Source: "D:\MyInno_Script\vtv\scripts\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\MyInno_Script\Морской охотник\scripts\main_theme.mp3"; DestDir: "{tmp}"; Flags: dontcopy
Source: D:\MyInno_Script\Морской охотник\Local Settings\Aplication Data\*; DestDir: {localappdata}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
Source: D:\MyInno_Script\Морской охотник\Морской Охотник\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
[Run]
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData ENVIRONMENTS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление окружающего мира..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q ENVIRONMENTS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData NAVALS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление моделей кораблей..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q NAVALS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData SOUNDS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление звукового окружения..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q SOUNDS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData WEAPONS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление моделей оружия..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q WEAPONS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{src}\Drivers\Ageia\PhysX.exe"; Parameters: "/quiet"; StatusMsg: "Установка: NVIDIA PhysX System Software..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp1
Filename: "{src}\Drivers\VCRedist\vcredist_x86.exe"; Parameters: "/q"; StatusMsg: "Установка: Microsoft Visual C++ 2005..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp2
Filename: "{src}\Drivers\codec\XviD-1.1.3.exe"; Parameters: "/silent /nocancel"; StatusMsg: "Установка: XviD кодек..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp3
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Akella"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Akella\PTBoats"; ValueName: "Install Dir"; ValueType: String; ValueData: "{app}"; Flags: uninsdeletevalue
[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {group}\Руководство; Filename: {app}\manual.pdf; WorkingDir: {app}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\{#MyAppExeName}
Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Check: MakeDesktopIcon;
[Messages]
BeveledLabel=Repack by MSA
StatusExtractFiles=Копирование файлов
WizardSelectDir=Выбор папки установки и дополнительных задач
SelectDirDesc=Выберите целевую директорию и дополнительные задачи, которые должны выполниться во время установки
[UninstallDelete]
Type: filesandordirs; Name: {app}
[Code]
type
HSTREAM = DWORD;
const
NeedSize = 1500;
BASS_SAMPLE_LOOP = 4;
var
DesktopIcon,Comp1,Comp2,Comp3: TCheckBox;
PageNameLabel, PageDescriptionLabel: TLabel;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;
ProgressBar1: TNewProgressBar;
AppDir: string; ResultCode: Integer;
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 delayload';
function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
function MakeDesktopIcon: Boolean;
begin
Result:=DesktopIcon.Checked;
end;
Function customComp1:Boolean;
begin
Result:=Comp1.Checked;
end;
Function customComp2:Boolean;
begin
Result:=Comp2.Checked;
end;
Function customComp3:Boolean;
begin
Result:=Comp3.Checked;
end;
procedure HideInstallPath();
begin
WizardForm.FileNameLabel.Visible := False;
end;
//*******//
procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;
procedure ReadEntries();
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Akella\PTBoats', 'Install Dir', AppDir);
end;
procedure animateprogress;
begin ProgressBar1.Position := ProgressBar1.Position+1
end;
function InitializeSetup(): Boolean;
var
Exe: string;
begin
Exe:='PT-Boats.exe';
if (RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Akella\PTBoats', 'Install Dir')) then
begin
ReadEntries;
case (MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' уже найдена на Вашем компьютере. Запустить игру?', mbConfirmation, MB_YESNOCANCEL or MB_DEFBUTTON3)) of
IDYES:
begin
if (FileExists(AddBackslash(AppDir) + Exe)) then
begin
Exec(AddBackslash(AppDir) + Exe, '', ExtractFilePath(AddBackslash(AppDir) + Exe), SW_SHOW, ewNoWait, ResultCode);
end else begin
MsgBox('Невозможно запустить ' + '{#SetupSetting("AppName")}' + ', т.к. исполняемый файл программы не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1);
end
Result:=False;
end
IDNO:
begin
Result:=True;
end
IDCANCEL:
begin
Result:=False;
end
end
end else begin
Result:=True;
end
end;
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=false;
end else
WizardForm.NextButton.Enabled:=true;
end;
end;
procedure InitializeWizard();
var
Name1: string;
i: Integer;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('main_theme.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\main_theme.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
DesktopIcon := TCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Добавить ярлык на рабочий стол';
Left := ScaleX(0);
Top := ScaleY(175);
Width := ScaleX(400);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(350);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
Font.Style := [fsBold];
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;
PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(330);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;
begin
WizardForm.BorderStyle := bsDialog;
end;
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
begin
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: 1,5 GB';
end;
FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;
ProgressBar1 := TNewProgressBar.Create(wizardform);
with ProgressBar1 do
begin
Parent := wizardform.installingpage;
Left := wizardform.progressgauge.left;
Top := wizardform.progressgauge.top+wizardform.progressgauge.height+15;
Width := wizardform.progressgauge.width;
Height := wizardform.progressgauge.height;
Max :=11; //задается как кол-во файлов в [_run]
end;
Comp3 := TCheckBox.Create(WizardForm);
with Comp3 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'XviD кодек';
Left := ScaleX(0);
Top := ScaleY(112);
Width := ScaleX(97);
Height := ScaleY(17);
TabOrder := 1;
Checked := True;
end;
Comp2 := TCheckBox.Create(WizardForm);
with Comp2 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Microsoft Visual C++ 2005';
Left := ScaleX(0);
Top := ScaleY(132);
Width := ScaleX(250);
Height := ScaleY(17);
TabOrder := 1;
Checked := True;
end;
Comp1 := TCheckBox.Create(WizardForm);
with Comp1 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'NVIDIA PhysX System Software';
Left := ScaleX(0);
Top := ScaleY(152);
Width := ScaleX(250);
Height := ScaleY(17);
TabOrder := 0;
Checked := True;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpSelectDir then
if CurPageID = wpSelectDir
then begin
WizardForm.NextButton.Caption:='Установить';
if FreeMB < NeedSize
then WizardForm.NextButton.Enabled:=False;
end;
begin
WizardForm.Position:=poScreenCenter;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
procedure DeInitializeSetup();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
Cancel:=True;
end;
[/more]
Может еще кому-то пригодится
msatmb
[more]
[Icons]
Name: {group}\Руководство; Filename: {app}\manual.pdf; WorkingDir: {app}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\{#MyAppExeName}
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
if DesktopIcon.Checked then
begin
CreateShellLink(ExpandConstant('{userdesktop}\Морской охотник.lnk'), 'Морской охотник',
ExpandConstant('{app}\PT-Boats.exe'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\Морской охотник.lnk'));
end;
[/more]
[more]
[Icons]
Name: {group}\Руководство; Filename: {app}\manual.pdf; WorkingDir: {app}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\{#MyAppExeName}
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
if DesktopIcon.Checked then
begin
CreateShellLink(ExpandConstant('{userdesktop}\Морской охотник.lnk'), 'Морской охотник',
ExpandConstant('{app}\PT-Boats.exe'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\Морской охотник.lnk'));
end;
[/more]
kombat 77
Как сделать вот такую строничку, от инстолятора о котором я писал выше.
В секции Run имеется следующий код:
Filename: "{tmp}\Arc.exe"; Parameters: "x -y -dp""{app}\GameData"" setup-2.arc"; WorkingDir: "{src}"; StatusMsg: "Идет восстановление окружающего мира..."; Flags: runhidden; Afterinstall: animateprogress
Можно ли его полностью перетащить в секцию Code со всеми "месагами", "флагами" и "инсталами"
Filename: "{tmp}\Arc.exe"; Parameters: "x -y -dp""{app}\GameData"" setup-2.arc"; WorkingDir: "{src}"; StatusMsg: "Идет восстановление окружающего мира..."; Flags: runhidden; Afterinstall: animateprogress
Можно ли его полностью перетащить в секцию Code со всеми "месагами", "флагами" и "инсталами"
msatmb
Цитата:
[more=Пробуй]
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
if CurStep = ssPostInstall then
begin
ExtractTemporaryFile('Arc.exe');
WizardForm.StatusLabel.Caption := 'Идет восстановление окружающего мира...';
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x -y -dp' +
'"' + ExpandConstant('{app}\GameData') + '"' + ' setup-2.arc',
'"' + ExpandConstant('{src}') + '"', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
ProgressBar1.Position := ProgressBar1.Position + 1;
WizardForm.StatusLabel.Caption := WizardForm.StatusLabel.Caption;
end;
if CurStep = ssDone then
begin
if DesktopIcon.Checked then
begin
CreateShellLink(ExpandConstant('{userdesktop}\Морской охотник.lnk'), 'Морской охотник',
ExpandConstant('{app}\PT-Boats.exe'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
end;
[/more]
Добавлено:
Dermuin
Цитата:
[more=пример]
[Setup]
AppName=Connection Manager for MF626
AppVerName=Connection Manager for MF626
DefaultDirName={pf}\Connection Manager
OutputDir=userdocs:
[Code]
var
SettingPage: TWizardPage;
WizText, MemoText1, MemoText2: TNewStaticText;
CustomMemo: TNewEdit;
Text1, CCheck1, CCheck2, CCheck3, CCheck4: TCheckBox;
procedure Text1OnClick(Sender: TObject);
begin
if Text1.Checked then
MemoText1.Caption := '#'
else
MemoText1.Caption := '*';
end;
procedure InitializeWizard();
begin
SettingPage := CreateCustomPage(wpWelcome, 'Настройки', '');
WizText := TNewStaticText.Create(SettingPage);
WizText.Top := ScaleY(5);
WizText.Width := ScaleX(400);
WizText.Caption := 'Номер запроса баланса по умолчанию';
WizText.Parent := SettingPage.Surface;
MemoText1 := TNewStaticText.Create(SettingPage);
MemoText1.Top := WizText.Top + WizText.Height + ScaleY(8);
MemoText1.Font.Size := 16;
MemoText1.Caption := '*';
MemoText1.Parent := SettingPage.Surface;
CustomMemo := TNewEdit.Create(SettingPage);
CustomMemo.Top := WizText.Top + WizText.Height + ScaleY(10);
CustomMemo.Left := MemoText1.Width + ScaleX(5);
CustomMemo.Width := ScaleX(50);
CustomMemo.Text := '100';
CustomMemo.Parent := SettingPage.Surface;
Text1 := TCheckBox.Create(SettingPage);
Text1.Top := CustomMemo.Top + CustomMemo.Height + ScaleY(10);
Text1.Width := ScaleX(150);
Text1.Caption := 'Номер начинается с #';
Text1.Checked := False;
Text1.OnClick := @Text1OnClick;
Text1.Parent := SettingPage.Surface;
MemoText2 := TNewStaticText.Create(SettingPage);
MemoText2.Top := WizText.Top + WizText.Height + ScaleY(8);
MemoText2.Left := CustomMemo.Left + ScaleX(53);
MemoText2.Font.Size := 16;
MemoText2.Caption := '#';
MemoText2.Parent := SettingPage.Surface;
CCheck1 := TCheckBox.Create(SettingPage);
CCheck1.Top := WizardForm.InnerNotebook.Height / 2;
CCheck1.Width := ScaleX(400);
CCheck1.Checked := True;
CCheck1.Caption := 'Патч корректировки русского языка от SerGGGik (Vista)';
CCheck1.Parent := SettingPage.Surface;
CCheck2 := TCheckBox.Create(SettingPage);
CCheck2.Top := CCheck1.Top + CCheck1.Height + ScaleY(10);
CCheck2.Left := ScaleX(20);
CCheck2.Width := ScaleX(380);
CCheck2.Checked := False;
CCheck2.Caption := 'Заменить файл lan_RUS.dll';
CCheck2.Parent := SettingPage.Surface;
CCheck3 := TCheckBox.Create(SettingPage);
CCheck3.Top := CCheck2.Top + CCheck2.Height + ScaleY(10);
CCheck3.Width := ScaleX(400);
CCheck3.Checked := True;
CCheck3.Caption := 'Установить драйвера модема';
CCheck3.Parent := SettingPage.Surface;
CCheck4 := TCheckBox.Create(SettingPage);
CCheck4.Top := CCheck3.Top + CCheck3.Height + ScaleY(10);
CCheck4.Width := ScaleX(400);
CCheck4.Checked := True;
CCheck4.Caption := 'Автоматический запуск программы при включении модема';
CCheck4.Parent := SettingPage.Surface;
end;
[/more]
Цитата:
Можно ли его полностью перетащить в секцию Code со всеми "месагами", "флагами" и "инсталами"
[more=Пробуй]
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
if CurStep = ssPostInstall then
begin
ExtractTemporaryFile('Arc.exe');
WizardForm.StatusLabel.Caption := 'Идет восстановление окружающего мира...';
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x -y -dp' +
'"' + ExpandConstant('{app}\GameData') + '"' + ' setup-2.arc',
'"' + ExpandConstant('{src}') + '"', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
ProgressBar1.Position := ProgressBar1.Position + 1;
WizardForm.StatusLabel.Caption := WizardForm.StatusLabel.Caption;
end;
if CurStep = ssDone then
begin
if DesktopIcon.Checked then
begin
CreateShellLink(ExpandConstant('{userdesktop}\Морской охотник.lnk'), 'Морской охотник',
ExpandConstant('{app}\PT-Boats.exe'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
end;
[/more]
Добавлено:
Dermuin
Цитата:
Как сделать вот такую строничку, от инстолятора о котором я писал выше.
[more=пример]
[Setup]
AppName=Connection Manager for MF626
AppVerName=Connection Manager for MF626
DefaultDirName={pf}\Connection Manager
OutputDir=userdocs:
[Code]
var
SettingPage: TWizardPage;
WizText, MemoText1, MemoText2: TNewStaticText;
CustomMemo: TNewEdit;
Text1, CCheck1, CCheck2, CCheck3, CCheck4: TCheckBox;
procedure Text1OnClick(Sender: TObject);
begin
if Text1.Checked then
MemoText1.Caption := '#'
else
MemoText1.Caption := '*';
end;
procedure InitializeWizard();
begin
SettingPage := CreateCustomPage(wpWelcome, 'Настройки', '');
WizText := TNewStaticText.Create(SettingPage);
WizText.Top := ScaleY(5);
WizText.Width := ScaleX(400);
WizText.Caption := 'Номер запроса баланса по умолчанию';
WizText.Parent := SettingPage.Surface;
MemoText1 := TNewStaticText.Create(SettingPage);
MemoText1.Top := WizText.Top + WizText.Height + ScaleY(8);
MemoText1.Font.Size := 16;
MemoText1.Caption := '*';
MemoText1.Parent := SettingPage.Surface;
CustomMemo := TNewEdit.Create(SettingPage);
CustomMemo.Top := WizText.Top + WizText.Height + ScaleY(10);
CustomMemo.Left := MemoText1.Width + ScaleX(5);
CustomMemo.Width := ScaleX(50);
CustomMemo.Text := '100';
CustomMemo.Parent := SettingPage.Surface;
Text1 := TCheckBox.Create(SettingPage);
Text1.Top := CustomMemo.Top + CustomMemo.Height + ScaleY(10);
Text1.Width := ScaleX(150);
Text1.Caption := 'Номер начинается с #';
Text1.Checked := False;
Text1.OnClick := @Text1OnClick;
Text1.Parent := SettingPage.Surface;
MemoText2 := TNewStaticText.Create(SettingPage);
MemoText2.Top := WizText.Top + WizText.Height + ScaleY(8);
MemoText2.Left := CustomMemo.Left + ScaleX(53);
MemoText2.Font.Size := 16;
MemoText2.Caption := '#';
MemoText2.Parent := SettingPage.Surface;
CCheck1 := TCheckBox.Create(SettingPage);
CCheck1.Top := WizardForm.InnerNotebook.Height / 2;
CCheck1.Width := ScaleX(400);
CCheck1.Checked := True;
CCheck1.Caption := 'Патч корректировки русского языка от SerGGGik (Vista)';
CCheck1.Parent := SettingPage.Surface;
CCheck2 := TCheckBox.Create(SettingPage);
CCheck2.Top := CCheck1.Top + CCheck1.Height + ScaleY(10);
CCheck2.Left := ScaleX(20);
CCheck2.Width := ScaleX(380);
CCheck2.Checked := False;
CCheck2.Caption := 'Заменить файл lan_RUS.dll';
CCheck2.Parent := SettingPage.Surface;
CCheck3 := TCheckBox.Create(SettingPage);
CCheck3.Top := CCheck2.Top + CCheck2.Height + ScaleY(10);
CCheck3.Width := ScaleX(400);
CCheck3.Checked := True;
CCheck3.Caption := 'Установить драйвера модема';
CCheck3.Parent := SettingPage.Surface;
CCheck4 := TCheckBox.Create(SettingPage);
CCheck4.Top := CCheck3.Top + CCheck3.Height + ScaleY(10);
CCheck4.Width := ScaleX(400);
CCheck4.Checked := True;
CCheck4.Caption := 'Автоматический запуск программы при включении модема';
CCheck4.Parent := SettingPage.Surface;
end;
[/more]
kombat 77
Спасибо. Но что-то не идет распаковка... Может там по другому нужно указать что архив лежит рядом с инсталлом?
Спасибо. Но что-то не идет распаковка... Может там по другому нужно указать что архив лежит рядом с инсталлом?
kombat 77
А как к этим чекбоксам присвоить нужные функции
А как к этим чекбоксам присвоить нужные функции
Подскажите,как после окончания установки автоматом запускался другой exe файл.
CreateTask(3, GUID, PlayTask, 0, 'Играть Tom Clancy's H.A.W.X - DirectX 9', MainExeX9, '');
В фразе Играть Tom Clancy's H.A.W.X - DirectX 9 присутствует знак ' но компилятор ругается, как правильно написать код.
В фразе Играть Tom Clancy's H.A.W.X - DirectX 9 присутствует знак ' но компилятор ругается, как правильно написать код.
Dermuin
попробуй так:
CreateTask(3, GUID, PlayTask, 0, 'Играть Tom Clancy\'s H.A.W.X - DirectX 9', MainExeX9, '');
попробуй так:
CreateTask(3, GUID, PlayTask, 0, 'Играть Tom Clancy\'s H.A.W.X - DirectX 9', MainExeX9, '');
Не помогает
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
Предыдущая тема: в очередной раз босудим антивиры?
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.