Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)

Модерирует : gyra, Maz

Widok (10-08-2009 22:13): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

Shegorat



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
[Setup]
AppId={{B4866999-9FF1-4780-A2E9-A952A5E7BBCA}
AppName=[Prototype]
AppVerName=[Prototype]
AppPublisher=Activision
AppVersion=1.0
AppSupportURL=http://activision.custhelp.com/
DefaultDirName={pf}\Prototype
OutputDir=D:\Репаки\Prototype
DefaultGroupName=Activision\Radical Entertainment\Prototype
UninstallFilesDir={app}\Uninstall
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=true
DiskSpanning=yes
SlicesPerDisk=3
DiskSliceSize=1100000000
DisableProgramGroupPage=true
DisableReadyPage=true
SetupIconFile=D:\Для InstallShield\Prototype\Icon.ico
UninstallDisplayIcon={app}\prototypef.exe, 0
UninstallDisplayName=Prototype(TM)
 
[Languages]
Name: RUS; MessagesFile: compiler:Languages\Russian.isl
 
[Icons]
Name: "{group}\Техническая поддержка\Сайт технической поддержки"; Filename: http://www.activision.com/support; WorkingDir: "{app}"; Check: GroupIcons
Name: "{group}\Техническая поддержка\Диагностика DirectX"; Filename: "{sys}\dxdiag.exe"; WorkingDir: "{sys}"; Check: GroupIcons
Name: "{group}\Техническая поддержка\Сведения о системе"; Filename: "{pf}\Common Files\Microsoft Shared\MSInfo\msinfo32.exe"; Check: GroupIcons
Name: "{group}\Запустить игру"; Filename: "{app}\prototypef.exe"; WorkingDir: "{app}"; Check: GroupIcons
Name: "{group}\Сайт компании Activision"; Filename: http://www.activision.com; WorkingDir: "{app}"; Check: GroupIcons
Name: "{group}\Сайт компании Radical Entertainment"; Filename: http://www.radical.ca/; WorkingDir: "{app}"; Check: GroupIcons
Name: "{group}\Файл Readme"; Filename: {app}\Readme.htm; WorkingDir: {app}; Check: GroupIcons
Name: "{group}\Удалить игру"; Filename: {app}\Uninstall\unins000; WorkingDir: {app}; Check: GroupIcons
Name: "{userdesktop}\Prototype"; Filename: {app}\prototypef.exe; WorkingDir: {app}; Check: CreateIcons
 
[Files]
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: Vista.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source: get_hw_caps.dll; Flags: dontcopy
Source: 1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: D:\Prototype\*; DestDir: {app}; BeforeInstall: FilenameExt(); Flags: ignoreversion recursesubdirs createallsubdirs
 
[Registry]
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: Path; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: InstallDrive; ValueData: {src}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: LanguageCode; ValueData: ENU; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: FE_Language; ValueData: 69; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: LCID; ValueData: 1033; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: StartMenuFolder; ValueData: {group}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: Version; ValueData: 1.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: IntVersion; ValueData: 26.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: EXEString; ValueData: {app}\Prototypef.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Activision\Prototype; ValueType: string; ValueName: InstallExePath; ValueData: {app}\Prototypef.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
 
[Run]
Filename: "{src}\DirectX\DXSETUP.exe"; Parameters: "\silent"; StatusMsg: ExpandConstant('{cm:UP}'); Check: InstallDirectX
Filename: "{src}\Redist\vcredist_x86.exe"; Parameters: "\q"; StatusMsg: "Идет установка Microsoft Visual C++ Redistibutable"; WorkingDir: "{src}\Redist"; Check: InstallRedist
 
[CustomMessages]
RUS.BUT=Установить
RUS.SPACE=Доступно места на диске:
RUS.SPACE1=Требуется места на диске:
RUS.DRT=Обновить DirectX
RUS.UP=Идет обновление DirectX...
RUS.ArcBreak=Установка прервана!
RUS.ExtractedInfo=Распаковано %1 Мб из %2 Мб
RUS.ArcInfo=Архив: %1 из %2
RUS.ArcTitle=Распаковка архивов FreeArc
RUS.ArcError=Распаковщик FreeArc вернул код ошибки: %1
RUS.ArcFail=Распаковка не завершена!
RUS.AllProgress=Общий прогресс распаковки: %1%%
RUS.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
RUS.Extracting=Распаковывается: %1
RUS.taskbar=%1%%, жди %2
RUS.remains=Осталось ждать %1
RUS.LongTime=вечно
RUS.ending=завершение
RUS.hour= часов
RUS.min= мин
RUS.sec= сек
 
[Code]
const
NeedVideo= 127000000;       //Видеопамять Byte
NeedRAM= 1024;      //Оперативная память  Mb
NeedProcessor= 1800;   //Процессор, частота Mg
NeedMemory= 1247;   //Файл подкачки  Mb
//Requirements
//FreeArc
Archives = '{src}\*.arc';    // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно
totalSize = 200;             // укажите общий объем распакованных файлов в Mb
 
PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
 
type
#ifdef UNICODE  ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
    #define A "W"
#else
    #define A "A"  ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
    PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif
 
    TMyMsg = record
        hwnd: HWND;
        message: UINT;
        wParam: Longint;
        lParam: Longint;
        time: DWORD;
        pt: TPoint;
    end;
 
    TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
    TArc = record Path: string; Size: Extended; end;
 
var
  DirectX, Redist, Icons, Group, RunProgram: TCheckBox;
  SelectDirLabel, SelectDirLabelBrowse, RunProgramLabel: TLabel;
  IconsLabel, GroupLabel, RedistLabel, DirectXLabel: TLabel;
  PageNameLabel, PageNameLabel1, PageNameLabel2, PageNameLabel3, PageNameLabel4, PageNameLabel5, PageNameLabel6, PageNameLabel7: TLabel;
  PageDescriptionLabel, PageDescriptionLabel1, PageDescriptionLabel2, PageDescriptionLabel3, PageDescriptionLabel4, PageDescriptionLabel5, PageDescriptionLabel6, PageDescriptionLabel7: TLabel;
  StatusLabel, FilenameLabel, NeedSpaceLabel,FreeSpaceLabel: TLabel;
  WelcomeLabel1, WelcomeLabel2,FinishedLabel, FinishedHeadingLabel: TLabel;
  SelectStartMenuFolderLabel, SelectStartMenuFolderBrowseLabel, ReadyLabel, NoIconsLabel: TLabel;
  LicenseLabel1, LicenseAcceptedLabel, LicenseNotAcceptedLabel: Tlabel;
  InfoBeforeClickLabel, InfoAfterClickLabel: TLabel;
  NeedSize:Integer;
  FreeMB, TotalMB: Cardinal;
  BmpFile: TBitmapImage;
  SystemPequirementPage: TWizardPage;
  RequirementLabel1,RequirementLabel2:TLabel;
  ExtractFile, lblExtractFileName: TLabel;
  btnCancelUnpacking: TButton;
  CancelCode, n, UnPackError, StartInstall: Integer;
  Arcs: array of TArc;
  msgError: string;
  lastMb, baseMb: Integer;
  LastTimerEvent: DWORD;
  PageID,ResultCode: Integer;
   
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';
 
//FreeArc
Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';
 
function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';
 
Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';
 
function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';
 
procedure AppProcessMessage;
var
    Msg: TMyMsg;
begin
    while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
end;
 
// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
    Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
    while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
        SetLength(Result, Length(Result)-1);
End;
 
function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
 
Function Size64(Hi, Lo: Integer): Extended;
Begin
    Result:= Lo;
    if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
    for Hi:= Hi-1 Downto 0 do
        Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;
 
// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
    if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
        CancelCode:= -127;
end;
 
// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
    FSR: TFindRec;
Begin
    Result:= 0;
    if FindFirst(ExpandConstant(dir), FSR) then begin
        try
            repeat
                // Skip everything but the folders
                if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
                n:= GetArrayLength(Arcs);
                // Expand the folder list
                SetArrayLength(Arcs, n +1);
                Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
                Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
                Result:= Result + Arcs[n].Size;
            until not FindNext(FSR);
        finally
            FindClose(FSR);
        end;
    end;
End;
 
// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
    nRet : longint;
begin
    SetLength( Result, Length( strSource ) );
    nRet:= OemToChar( strSource, Result );
end;
 
// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
    nRet : integer;
    WideCharBuf: string;
    MultiByteBuf: string;
begin
    strSource:= strSource + chr(0);
    SetLength( WideCharBuf, Length( strSource ) * 2 );
    SetLength( MultiByteBuf, Length( strSource ) * 2 );
 
    nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
    nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);
 
    Result:= MultiByteBuf;
end;
 
// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
    h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;
 
// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail                               {hh:mm:ss format} then
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000              {more than hour}  then
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000                {1..60 minutes}   then
        Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
   else Result:= IntToStr(Ticks/1000) +s    {less than one minute}
End;
 
// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
    percents, Remaining: Integer;
    s: String;
begin
    if GetTickCount - LastTimerEvent > 1000 then begin
        // This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
        //  ....
        // End of code executed by timer
        LastTimerEvent := LastTimerEvent+1000;
    end;
 
    if string(what)='filename' then begin
        // Update FileName label
        lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
    end else if (string(what)='written') and (totalSize>0) and (Mb>lastMb) then begin
        // Assign to Mb *total* amount of data extracted to the moment from all archives
        lastMb := Mb;
        Mb := baseMb+Mb;
 
        // Update progress bar
        WizardForm.ProgressGauge.Position:= Mb;
 
        // Show how much megabytes/archives were processed up to the moment
        percents:= (Mb*1000) div totalSize;
        s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalSize)]);
        if GetArrayLength(Arcs)>1 then
            s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
        ExtractFile.Caption := s
 
        // Calculate and show current percents
        percents:= (Mb*1000) div totalSize;
        s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
        if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalSize - Mb)/Mb)) else Remaining:= 0;
        if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
            s:= s + '.  '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
            SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
        end;
        WizardForm.FileNameLabel.Caption := s
    end;
    AppProcessMessage;
    Result:= CancelCode;
end;
 
// Extracts all found archives
function UnPack(Archives: string): Integer;
var
    allSize: Extended;
    callback: longword;
    FreeMB, TotalMB: Cardinal;
begin
    // Display 'Extracting FreeArc archive'
    lblExtractFileName.Caption:= '';
    lblExtractFileName.Show;
    ExtractFile.caption:= cm('ArcTitle');
    ExtractFile.Show;
    // Show the 'Cancel unpacking' button and set it as default button
    btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
    btnCancelUnpacking.Show;
    WizardForm.ActiveControl:= btnCancelUnpacking;
    WizardForm.ProgressGauge.Position:= 0;
    WizardForm.ProgressGauge.Max:= totalSize;
    // Get the size of all archives
    allSize:= FindArcs(Archives);
    // Other initializations
    callback:= WrapFreeArcCallback(@FreeArcCallback,4);   //FreeArcCallback has 4 arguments
    StartInstall:= GetTickCount;    {время начала распаковки}
    LastTimerEvent:= GetTickCount;
    baseMb:= 0
 
    for n:= 0 to GetArrayLength(Arcs) -1 do
    begin
        lastMb := 0
        CancelCode:= 0;
        AppProcessMessage;
        try
            // Pass the specified arguments to 'unarc.dll'
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
            if CancelCode < 0 then Result:= CancelCode;
        except
            Result:= -63;  //    ArcFail
        end;
        baseMb:= baseMb+lastMb
 
        // Error occured
        if Result <> 0 then
        begin
            msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
            GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
            case Result of
                -1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
                    else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
                -127:   msgError:= cm('ArcBreak');    //Cancel button
                -63:    msgError:= cm('ArcFail');
            end;
//          MsgBox(msgError, mbInformation, MB_OK);    //сообщение показывается на странице завершения
            Log(msgError);
            Break;    //прервать цикл распаковки
        end;
    end;
    // Hide labels and button
    WizardForm.FileNameLabel.Caption:= '';
    lblExtractFileName.Hide;
    ExtractFile.Hide;
    btnCancelUnpacking.Hide;
end;
//FreeArc
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;
 
 
function CheckSystemPage(PreviousPageId: Integer): Integer;
var ProcessorName:string;
    Processor,VideoCardPanel,AudioCardPanel,RAMPanel,PageFilePanel: TPanel;
    ProcessorNamePanel,VideoCardNamePanel,AudioCardNamePanel,RAMTotalPanel,PageFileTotalPanel: TPanel;
    ProcessorMHZ: Cardinal;
    VidRam:integer;
begin
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','~MHz', ProcessorMHZ);
GetVidMemLocal;
GetSoundCards;
 
SystemPequirementPage := CreateCustomPage(PreviousPageId,'Апаратное Обеспечение','Программа установки обнаружила следуюшие необходимые компоненты');
 
Processor := TPanel.Create(SystemPequirementPage);
with Processor do
begin
Parent := SystemPequirementPage.Surface;
Caption := ' Процессор';
Left := ScaleX(40);
Top := ScaleY(102);
Font.Color:= clBlack;
alignment:=taLeftJustify;
Width := ScaleX(121);
Height := ScaleY(25);
BevelInner := bvLowered;
TabOrder := 0;
end;
 
ProcessorNamePanel := TPanel.Create(SystemPequirementPage);
with ProcessorNamePanel do
begin
Parent := SystemPequirementPage.Surface;
Caption :=DelSP(ProcessorName)+'  '+IntToStr(ProcessorMHZ)+'MHz' ;  //новое обработанное значение строки
// Caption :=ProcessorName+'  '+IntToStr(ProcessorMHZ)+'MHz' ;
Left := ScaleX(168);
Top := ScaleY(102);
Font.Color:= clBlack;
alignment:=taLeftJustify;
Width := ScaleX(281);
Height := ScaleY(25);
BevelInner := bvLowered;
Color :=$ccffcc;
TabOrder := 1;
end;
 
if ProcessorMHZ<NeedProcessor then
begin
ProcessorNamePanel.Color:=clRed;
RequirementLabel1.Caption:='Не все компоненты удовлетворяют требованиям игры.';
end;
 
VideoCardPanel:=TPanel.Create(SystemPequirementPage);
with VideoCardPanel do
begin
Parent:=SystemPequirementPage.Surface;
Caption:=' Видеоадаптер';
Left:=ScaleX(40);
Font.Color:= clBlack;
alignment:=taLeftJustify;
Top:=Processor.Top+27;
Width:=ScaleX(121);
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
end;
 
VideoCardNamePanel:=TPanel.Create(SystemPequirementPage);
with VideoCardNamePanel do
begin
Parent:=SystemPequirementPage.Surface;
Caption:=' '+GetVideoCardName; //+'    ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ';
//Caption:='    ОЗУ-'+inttostr(GetVidMemLocal)+' МБ';
VidrAM:= GetVidMemLocal/1000000;
 
if VidRam>127 then
begin
  if VidRam<200 then  Caption:=Caption+' 128 МB'
  else if VidRam<300 then  Caption:=Caption+' 256 МB'
    else if VidRam<400 then  Caption:=Caption+' 384 МB'
      else if  VidRam<600 then  Caption:=Caption+' 512 МB'
        else if  VidRam<700 then  Caption:=Caption+' 678 МB'
          else if  VidRam<800 then  Caption:=Caption+' 756 МB'
            else if  VidRam<1000 then  Caption:=Caption+' 884 МB'
              else if  VidRam<1100 then  Caption:=Caption+' 1024 МB'
                else if  VidRam<1200 then  Caption:=Caption+' 1152 МB'
                  else if  VidRam<1300 then  Caption:=Caption+' 1280 МB';
end;
 
Left:=ScaleX(168);
Top:=VideoCardPanel.Top;
Font.Color:= clBlack;
alignment:=taLeftJustify;
Width:=ScaleX(281);
Height:=ScaleY(25);
BevelInner:=bvLowered;
Color :=$ccffcc;
TabOrder:=1;
end;
 
if GetVidMemLocal<NeedVideo then //128MB
begin
RequirementLabel1.Caption:='Не все компоненты удовлетворяют требованиям игры.';
VideoCardNamePanel.Color:=clRed;
end;
 
AudioCardPanel:=TPanel.Create(SystemPequirementPage);
with AudioCardPanel do
begin
Parent:=SystemPequirementPage.Surface;
Caption:=' Звуковая карта';
Left:=ScaleX(40);
Top:=VideoCardPanel.Top+27;
Font.Color:= clBlack;
alignment:=taLeftJustify;
Width:=ScaleX(121);
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
end;
 
AudioCardNamePanel:=TPanel.Create(SystemPequirementPage);
with AudioCardNamePanel do
begin
Parent:=SystemPequirementPage.Surface;
Caption:=' '+GetSoundCardName;
Left:=ScaleX(168);
Font.Color:= clBlack;
alignment:=taLeftJustify;
Top:=AudioCardPanel.Top;
Width:=ScaleX(281);
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color :=$ccffcc;
end;
 
if
GetSoundCards=0 then
begin
RequirementLabel1.Caption:='Не все компоненты удовлетворяют требованиям игры.';
AudioCardNamePanel.Color:=clRed;
end;
 
 
RAMPanel:=TPanel.Create(SystemPequirementPage);
with RAMPanel do
begin
Parent:=SystemPequirementPage.Surface;
Caption:=' ОЗУ'
Left:=40;
Top:=AudioCardPanel.Top+27;
Font.Color:= clBlack;
alignment:=taLeftJustify;
Width:=ScaleX(121);
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
end;
 
RAMTotalPanel:=TPanel.Create(SystemPequirementPage);
with RAMTotalPanel do
begin
Parent:=SystemPequirementPage.Surface;
Caption:=' '+IntToStr(GetSystemPhys+1) +' MB'
Left:=AudioCardNamePanel.Left;
Top:=RAMPanel.Top;
Font.Color:= clBlack;
alignment:=taLeftJustify;
Width:=AudioCardNamePanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color :=$ccffcc;
end;
 
if GetSystemPhys+1<NeedRAM then
begin
RAMTotalPanel.Color:=clRed;
RequirementLabel1.Caption:='Не все компоненты удовлетворяют требованиям игры.';
end;
 
PageFilePanel:=TPanel.Create(SystemPequirementPage);
with PageFilePanel do
begin
Parent:=SystemPequirementPage.Surface;
Caption:=' Файл подкачки';
alignment:=taLeftJustify;
Left:=40;
Top:=RAMPanel.Top+27;
Font.Color:= clBlack;
Width:=RAMPanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
end;
 
PageFileTotalPanel:=TPanel.Create(SystemPequirementPage);
with PageFileTotalPanel do
begin
Parent:=SystemPequirementPage.Surface;
Caption:=' '+IntToStr(GetSystemPage)+' MB';
Left:=RAMTotalPanel.Left;
Top:=PageFilePanel.Top;
Font.Color:= clBlack;
alignment:=taLeftJustify;
Width:=RAMTotalPanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color :=$ccffcc;
end;
 
if GetSystemPage<NeedMemory then
begin
PageFileTotalPanel.Color:=clRed;
RequirementLabel1.Caption:='Не все компоненты удовлетворяют требованиям игры.';
end;
 
Result := SystemPequirementPage.ID;
end;
 
function InstallDirectX: Boolean;
begin
  Result:= DirectX.Checked;
end;
 
function InstallRedist: Boolean;
begin
  Result:=Redist.Checked;
end;
 
function CreateIcons: Boolean;
begin
  Result:=Icons.Checked;
end;
 
function GroupIcons: Boolean;
begin
  Result:=Group.Checked;
end;
 
function Run: Boolean;
begin
  Result:=RunProgram.Checked;
end;
 
// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox
procedure RedistOnClick(Sender: TObject);
begin
  if Redist.Checked = False then
    Redist.Checked:= True else
  Redist.Checked:= False;
end;
 
procedure DirectXLabelOnClick(Sender: TObject);
begin
  if DirectX.Checked = False then
    DirectX.Checked:= True else
  DirectX.Checked:= False;
end;
 
procedure IconsOnClick(Sender: TObject);
begin
  if Icons.Checked = False then
    Icons.Checked:= True else
  Icons.Checked:= False;
end;
 
procedure GroupOnClick(Sender: TObject);
begin
  if Group.Checked = False then
    Group.Checked:= True else
  Group.Checked:= False;
end;
 
procedure RunProgramOnClick(Sender: TObject);
begin
  if RunProgram.Checked = False then
    RunProgram.Checked:= True else
  RunProgram.Checked:= False;
end;
 
Procedure NoIconsLabelOnClick (Sender: TObject);
begin
WizardForm.NoIconsCheck.Checked:=Not(WizardForm.NoIconsCheck.Checked)
end;
 
procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  WizardForm.NextButton.Enabled:=True
end;
 
procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  WizardForm.NextButton.Enabled:=False
end;
 
Procedure YesRadioOnClick (Sender: TObject);
begin
WizardForm.LicenseAcceptedRadio.Checked:=True
end;
 
Procedure NoRadioOnClick (Sender: TObject);
begin
WizardForm.LicenseNotAcceptedRadio.Checked:=True
end;
// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox
//Свободное место
procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB > 1024 then
    FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
    FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ IntToStr(FreeMB)+ ' MB';
  if FreeMB < NeedSize then
    WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True;
end;
 
procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
    NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
  NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ IntToStr(NeedSize)+ ' MB';
end;
//Свободное место
procedure FilenameExt();
begin
FilenameLabel.Caption:= ExpandConstant(ExtractFileDir(CurrentFilename)) + '\' + ExtractFilename(CurrentFilename);
end;
//Загрузка скина
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
 
 
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
 
 
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';
 
function InitializeSetup(): Boolean;
begin
    ExtractTemporaryFile('Vista.cjstyles');
    LoadSkin(ExpandConstant('{tmp}\Vista.cjstyles'), '');
    Result := True;
end;
 
procedure DeinitializeSetup();
begin
 ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
    UnloadSkin();
if (PageID=wpFinished) and (RunProgram.Checked)
 then Exec(ExpandConstant('{app}\prototypef.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ResultCode);
end;
//Загрузка скина
 
procedure InitializeWizard();
begin
  ExtractTemporaryFile('1.bmp');
  CheckSystemPage(wpLicense);
  NeedSize:= 7980;
 
  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.WelcomePage;
 
  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.LicensePage;
 
  BmpFile:= TBitmapImage.Create(SystemPequirementPage);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= SystemPequirementPage.Surface;
 
  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.InfoBeforePage;
 
  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.SelectDirPage;
 
  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.InstallingPage;
 
  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.InfoAfterPage;
 
  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.FinishedPage;
 
  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.SelectProgramGroupPage;
 
  BmpFile:= TBitmapImage.Create(WizardForm);
  BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  BmpFile.SetBounds(0, 0, 497, 360);
  BmpFile.Stretch:= true
  BmpFile.Parent:= WizardForm.ReadyPage;
 
  with WizardForm do
  begin
    PageNameLabel.Hide;
    PageDescriptionLabel.Hide;
    WelcomeLabel1.Hide;
    WelcomeLabel2.Hide;
    DiskSpaceLabel.Hide;
    SelectDirBitmapImage.Hide;
    SelectDirBrowseLabel.Hide;
    SelectDirLabel.Hide;
    FinishedHeadingLabel.Hide;
    FinishedLabel.Hide;
    MainPanel.Hide
    FilenameLabel.Hide;
    StatusLabel.Hide;
    SelectStartMenuFolderLabel.Hide;
    SelectStartMenuFolderBrowseLabel.Hide;
    ReadyLabel.Hide;
    LicenseLabel1.Hide;
    InfoBeforeClickLabel.Hide;
    InfoAfterClickLabel.Hide;
  end;
 
  with WizardForm do
   begin
    DirBrowseButton.Left:= DirBrowseButton.Left + ScaleX(40);
    DirBrowseButton.Top:= DirBrowseButton.Top + ScaleY(72);
    DirEdit.Left:= DirEdit.Left + ScaleX(40);
    DirEdit.Top:= DirEdit.Top + ScaleY(72);
    GroupBrowseButton.Left:= GroupBrowseButton.Left + ScaleX(40);
    GroupBrowseButton.Top:= GroupBrowseButton.Top + ScaleY(72);
    GroupEdit.Left:= GroupEdit.Left + ScaleX(40);
    GroupEdit.Top:= GroupEdit.Top + ScaleX(72);
    GroupEdit.Color:= ClBlack
    NextButton.BringToFront;
    BackButton.BringToFront;
    CancelButton.BringToFront;
    Font.Style:=[];
    Font.Name:= 'MS Sans Serif';
    DirEdit.Color:=clBlack;
    Font.Color:=clWhite;
    ProgressGauge.Top:=ScaleY(120);
    ProgressGauge.Left:=ScaleX(20);
    ProgressGauge.Width:=ScaleX(457);
    ReadyMemo.Left:=ScaleX(40);
    ReadyMemo.Top:= WizardForm.ReadyMemo.Top + ScaleY(72)
    ReadyMemo.Font.Color:= clBlack;
    ReadyMemo.ScrollBars:= ssVertical;    //ssNone
   end;
 
  with WizardForm do
   begin
    InnerNotebook.Left := ScaleX(0);
    InnerNotebook.Top := ScaleY(0);
    InnerNotebook.Width := ScaleX(497);
    InnerNotebook.Height := ScaleY(360);
    OuterNotebook.Left := ScaleX(0);
    OuterNotebook.Top := ScaleY(0);
    OuterNotebook.Width := ScaleX(497);
    OuterNotebook.Height := ScaleY(360);
   end;
 
  WelcomeLabel1:= TLabel.Create(WizardForm);
  with WelcomeLabel1 do
  begin
    Left:= ScaleX(176);
    Top:= ScaleY(66);
    Width:= ScaleX(301);
    Height:= ScaleY(71);
    AutoSize:= false;
    Transparent:= true;
    WordWrap:= true;
    Font.Size:= 14;
    Font.Color:=ClWhite
    Font.Style := [fsBold]
    Parent:= WizardForm.WelcomePage;
    Caption:= WizardForm.WelcomeLabel1.Caption;
 end;
  //WelcomePage
  WelcomeLabel2:=TLabel.Create(WizardForm);
  with WelcomeLabel2 do
  begin
    Top:= ScaleY(136);
    Left:= ScaleX(176);
    Width:= ScaleX(301);
    Height:= ScaleY(300);
    AutoSize:= false;
    WordWrap:= true;
    Transparent:= true;
    Parent:= WizardForm.WelcomePage;
    Caption:= WizardForm.WelcomeLabel2.Caption;
end;
//WelcomePage
//licensePage
  LicenseLabel1:=TLabel.Create(WizardForm)
  with LicenseLabel1 do
  begin
    Left:=40
    Top:=70
    Width:=465
    Height:=28
    AutoSize:=False
    WordWrap:=True
    Transparent:=True
    Caption:=WizardForm.LicenseLabel1.Caption
    Parent:=WizardForm.LicensePage
  end;
 
  WizardForm.LicenseMemo.Left:=40
  WizardForm.LicenseMemo.Top:=108
  WizardForm.LicenseMemo.Parent:=WizardForm.LicensePage
 
  WizardForm.LicenseAcceptedRadio.Left:=40
  WizardForm.LicenseAcceptedRadio.Top:=265
  WizardForm.LicenseAcceptedRadio.Width:=14
  WizardForm.LicenseAcceptedRadio.Height:=14
  WizardForm.LicenseAcceptedRadio.Color:=clBlack
  WizardForm.LicenseAcceptedRadio.Parent:=WizardForm.LicensePage
 
  LicenseAcceptedLabel:=TLabel.Create(WizardForm)
  with LicenseAcceptedLabel do
  begin
    Left:=56
    Top:=265
    Transparent:=True
    Caption:=WizardForm.LicenseAcceptedRadio.Caption
    Parent:=WizardForm.LicensePage
    OnClick:= @YesRadioOnClick
  end;
 
  WizardForm.LicenseNotAcceptedRadio.Left:=40
  WizardForm.LicenseNotAcceptedRadio.Top:=285
  WizardForm.LicenseNotAcceptedRadio.Width:=14
  WizardForm.LicenseNotAcceptedRadio.Height:=14
  WizardForm.LicenseNotAcceptedRadio.Color:=clBlack
  WizardForm.LicenseNotAcceptedRadio.Parent:=WizardForm.LicensePage
 
  LicenseNotAcceptedLabel:=TLabel.Create(WizardForm)
  with LicenseNotAcceptedLabel do
  begin
    Left:=56
    Top:=285
    Transparent:=True
    Caption:=WizardForm.LicenseNotAcceptedRadio.Caption
    Parent:=WizardForm.LicensePage;
    OnClick:= @NoRadioOnClick;
  end;
 
  PageNameLabel:= TLabel.Create(WizardForm);
  with PageNameLabel do
  begin
    Left:= WizardForm.PageNameLabel.Left;
    Top:= WizardForm.PageNameLabel.Top;
    Width:= ScaleX(300);
    Height:= ScaleY(14);
    AutoSize:= False;
    Font.Style:= [fsBold];
    Font.Color:= ClWhite;
    Transparent := True;
    Parent:= WizardForm.LicensePage;
 end;
 
  PageDescriptionLabel:= TLabel.Create(WizardForm);
  with PageDescriptionLabel do
  begin
    Left:= WizardForm.PageDescriptionLabel.Left;
    Top:= WizardForm.PageDescriptionLabel.top;
    Width:= ScaleX(400);
    Height:= WizardForm.PageDescriptionLabel.Height;
    AutoSize:= False;
    Wordwrap:= True;
    Transparent := True;
    Parent:= WizardForm.LicensePage;
  end;
//LicensePage
//SystemRequirementPage
  RequirementLabel1:=TLabel.Create(SystemPequirementPage);
  with RequirementLabel1 do
  begin
    Parent:=SystemPequirementPage.Surface;
    Caption:='Все компоненты удовлетворяют требованиям игры.';
    Left:=40;
    Top:=65;
    Height:=14
    Width:=360
    AutoSize:=False;
    Transparent:= true;
    WordWrap:= true;
  end;
 
  RequirementLabel2:=TLabel.Create(SystemPequirementPage);
  with RequirementLabel2 do
  begin
    Parent:=SystemPequirementPage.Surface;
    Caption:='Когда будете готовы продолжить установку, нажмите «Далее»'
    Left:=40;
    Top:=280;
    Height:=14
    Width:=360
    AutoSize:=False;
    Transparent:= true;
    WordWrap:= true;
  end;
 
  PageNameLabel1:= TLabel.Create(SystemPequirementPage);
  with PageNameLabel1 do
  begin
    Left:= WizardForm.PageNameLabel.Left;
    Top:= WizardForm.PageNameLabel.Top;
    Width:= ScaleX(300);
    Height:= ScaleY(14);
    AutoSize:= False;
    Font.Style:= [fsBold];
    Font.Color:= ClWhite;
    Transparent := True;
    Parent:= SystemPequirementPage.Surface;
 end;
 
  PageDescriptionLabel1:= TLabel.Create(SystemPequirementPage);
  with PageDescriptionLabel1 do
  begin
    Left:= WizardForm.PageDescriptionLabel.Left;
    Top:= WizardForm.PageDescriptionLabel.top;
    Width:= ScaleX(400);
    Height:= WizardForm.PageDescriptionLabel.Height;
    AutoSize:= False;
    Wordwrap:= True;
    Transparent := True;
    Parent:= SystemPequirementPage.Surface;
  end;
//SystemRequirementPage
//InfoBeforePage
  InfoBeforeClickLabel:= TLabel.Create(WizardForm);
  with InfoBeforeClickLabel do
  begin
  Left:= ScaleX(40);
  Top:= ScaleY(70)
  Width:= WizardForm.InfoBeforeClickLabel.Width;
  Height:= WizardForm.InfoBeforeClickLabel.Height;
  Transparent:= true;
  AutoSize:= False;
  WordWrap:= true;
  Parent:= WizardForm.InfoBeforePage;
  Caption:= WizardForm.InfoBeforeClickLabel.Caption;
  end;
 
  WizardForm.InfoBeforeMemo.left:= ScaleX(40);
  WizardForm.InfoBeforeMemo.Top:= ScaleY(108);
 
  PageNameLabel2:= TLabel.Create(WizardForm);
  with PageNameLabel2 do
  begin
    Left:= WizardForm.PageNameLabel.Left;
    Top:= WizardForm.PageNameLabel.Top;
    Width:= ScaleX(300);
    Height:= ScaleY(14);
    AutoSize:= False;
    Font.Style:= [fsBold];
    Font.Color:= ClWhite;
    Transparent := True;
    Parent:= WizardForm.InfoBeforePage;
 end;
 
  PageDescriptionLabel2:= TLabel.Create(WizardForm);
  with PageDescriptionLabel2 do
  begin
    Left:= WizardForm.PageDescriptionLabel.Left;
    Top:= WizardForm.PageDescriptionLabel.top;
    Width:= ScaleX(400);
    Height:= WizardForm.PageDescriptionLabel.Height;
    AutoSize:= False;
    Wordwrap:= True;
    Transparent := True;
    Parent:= WizardForm.InfoBeforePage;
  end;
//InfoBeforePage
//SelectDirPage
  SelectDirLabel:= TLabel.Create(WizardForm);
  with SelectDirLabel do
  begin
    Caption:= WizardForm.SelectDirLabel.Caption;
    Left:= ScaleX(40);
    Top:= WizardForm.SelectDirLabel.Top + ScaleY(62);
    Width:= WizardForm.SelectDirLabel.Width;
    Height:= WizardForm.SelectDirLabel.Height;
    Transparent := True;
    Parent:= WizardForm.SelectDirPage;
  end;
 
  SelectDirLabelBrowse:= TLabel.Create(WizardForm);
  with SelectDirLabelBrowse do
  begin
    Caption:= WizardForm.SelectDirBrowseLabel.Caption;
    Left:= ScaleX(40);
    Top:= WizardForm.SelectDirBrowseLabel.Top + ScaleY(62);
    Width:= WizardForm.SelectDirBrowseLabel.Width;
    Height:= WizardForm.SelectDirBrowseLabel.Height;
    WordWrap:= True;
    Transparent:= True;
    Parent:= WizardForm.SelectDirPage;
  end;
 
  PageNameLabel3:= TLabel.Create(WizardForm);
  with PageNameLabel3 do
  begin
    Left:= WizardForm.PageNameLabel.Left;
    Top:= WizardForm.PageNameLabel.Top;
    Width:= ScaleX(300);
    Height:= ScaleY(14);
    AutoSize:= False;
    Font.Style:= [fsBold];
    Font.Color:= ClWhite;
    Transparent := True;
    Parent:= WizardForm.SelectDirPage;
 end;
 
  PageDescriptionLabel3:= TLabel.Create(WizardForm);
  with PageDescriptionLabel3 do
  begin
    Left:= WizardForm.PageDescriptionLabel.Left;
    Top:= WizardForm.PageDescriptionLabel.top;
    Width:= ScaleX(400);
    Height:= WizardForm.PageDescriptionLabel.Height;
    AutoSize:= False;
    Wordwrap:= True;
    Transparent := True;
    Parent:= WizardForm.SelectDirPage;
  end;
 
  DirectX:= TCheckBox.Create(WizardForm);
  with DirectX do
  begin
    Parent:= WizardForm.SelectDirPage;
    Left:= WizardForm.DirEdit.Left + 200;
    Top:= WizardForm.DirEdit.Top + 35;
    Width:= ScaleX(14);
    Height:= ScaleY(14);
    TabOrder:= 0;
    Checked:= False;
  end;
 
  DirectXLabel:= TLabel.Create(WizardForm);
  with DirectXLabel do
  begin
    Caption:= ExpandConstant('{cm:DRT}');
    Left:= WizardForm.DirEdit.Left + 220;
    Top:= WizardForm.DirEdit.Top + 35;
    Width:= ScaleX(150);
    Height:= ScaleY(13);
    Transparent := True;
    Parent:= WizardForm.SelectDirPage;
    OnClick:= @DirectXLabelOnClick;
  end;
 
Redist:= TCheckBox.Create(WizardForm);
  with Redist do
  begin
    Parent:= WizardForm.SelectDirPage;
    Left:= WizardForm.DirEdit.Left + 200;
    Top:= WizardForm.DirEdit.Top + 70;
    Width:= ScaleX(14);
    Height:= ScaleY(14);
    TabOrder:= 1;
    Checked:= False;
  end;
 
RedistLabel:= TLabel.Create(WizardForm);
  with RedistLabel do
  begin
    Caption:='Установить Microsoft Visual C++';
    Left:= WizardForm.DirEdit.Left + 220;
    Top:= WizardForm.DirEdit.Top + 70;
    Width:= ScaleX(150);
    Height:= ScaleY(13);
    Transparent := True;
    Parent:= WizardForm.SelectDirPage;
    OnClick:= @RedistOnClick;
  end;
 
Icons:= TCheckBox.Create(WizardForm);
  with Icons do
  begin
    Parent:= WizardForm.SelectDirPage;
    Left:= WizardForm.DirEdit.Left;
    Top:= WizardForm.DirEdit.Top + 35;
    Width:= ScaleX(14);
    Height:= ScaleY(14);
    TabOrder:= 2;
    Checked:= False;
  end;
 
IconsLabel:= TLabel.Create(WizardForm);
  with IconsLabel do
  begin
    Caption:='Создать ярлык на рабочем столе';
    Left:= WizardForm.DirEdit.Left + 20;
    Top:= WizardForm.DirEdit.Top + 35;
    Width:= ScaleX(150);
    Height:= ScaleY(13);
    Transparent := True;
    Parent:= WizardForm.SelectDirPage;
    OnClick:= @IconsOnClick;
  end;
 
Group:= TCheckBox.Create(WizardForm);
  with Group do
  begin
    Parent:= WizardForm.SelectDirPage;
    Left:= WizardForm.DirEdit.Left;
    Top:= WizardForm.DirEdit.Top + 70;
    Width:= ScaleX(14);
    Height:= ScaleY(14);
    TabOrder:= 3;
    Checked:= False;
  end;
 
GroupLabel:= TLabel.Create(WizardForm);
  with GroupLabel do
  begin
    Caption:='Создать ярлыки в меню "Пуск"';
    Left:= WizardForm.DirEdit.Left + 20;
    Top:= WizardForm.DirEdit.Top + 70;
    Width:= ScaleX(150);
    Height:= ScaleY(13);
    Transparent := True;
    Parent:= WizardForm.SelectDirPage;
    OnClick:= @GroupOnClick;
  end;
 
  NeedSpaceLabel:= TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
    Parent:= WizardForm.SelectDirPage;
    Left:= WizardForm.DirEdit.Left;
    Top:= ScaleY(262);
    Width:= ScaleX(209);
    Height:= ScaleY(13);
    Transparent:= True;
  end;
 
  FreeSpaceLabel:= TLabel.Create(WizardForm);
  with FreeSpaceLabel do
  begin
    Parent:= WizardForm.SelectDirPage;
    Left:= WizardForm.DirEdit.Left;
    Top:= ScaleY(280);
    Width:= ScaleX(209);
    Height:= ScaleY(13);
    Transparent:= True;
  end;
 
  WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
  //SelectDirPage
  //ProgrammGroupPage
  SelectStartMenuFolderLabel:=TLabel.Create(WizardForm)
  with SelectStartMenuFolderLabel do
  begin
    Left:= ScaleX(40);
    Top:= WizardForm.SelectDirLabel.Top + ScaleY(62);
    Width:= WizardForm.SelectDirBrowseLabel.Width;
    Height:= WizardForm.SelectDirBrowseLabel.Height;
    AutoSize:=False
    WordWrap:=True
    Transparent:=True
    Caption:=WizardForm.SelectStartMenuFolderLabel.Caption
    Parent:=WizardForm.SelectProgramGroupPage
  end;
 
  SelectStartMenuFolderBrowseLabel:=TLabel.Create(WizardForm)
  with SelectStartMenuFolderBrowseLabel do
  begin
    Left:= ScaleX(40);
    Top:= WizardForm.SelectDirBrowseLabel.Top + ScaleY(62);
    Width:= WizardForm.SelectDirBrowseLabel.Width
    Height:= WizardForm.SelectDirBrowseLabel.Height
    AutoSize:=False
    WordWrap:=True
    Transparent:=True
    Caption:=WizardForm.SelectStartMenuFolderBrowseLabel.Caption
    Parent:=WizardForm.SelectProgramGroupPage
  end;
 
  WizardForm.NoIconsCheck.Left:=ScaleX(40);
  WizardForm.NoIconsCheck.Top:= WizardForm.DirEdit.Top + ScaleY(140)
  WizardForm.NoIconsCheck.Width:=13
  WizardForm.NoIconsCheck.Height:=13
  WizardForm.NoIconsCheck.Visible:=True
  WizardForm.NoIconsCheck.Parent:= WizardForm.SelectProgramGroupPage
 
  NoIconsLabel:=TLabel.Create(WizardForm)
  with NoIconsLabel do
  begin
    Left:=ScaleX(56);
    Top:= WizardForm.DirEdit.Top + ScaleY(140)
    Transparent:=True
    OnClick:= @NoIconsLabelOnClick
    Caption:=WizardForm.NoIconsCheck.Caption
    Parent:=WizardForm.SelectProgramGroupPage
  end;
 
  PageNameLabel4:= TLabel.Create(WizardForm);
  with PageNameLabel4 do
  begin
    Left:= WizardForm.PageNameLabel.Left;
    Top:= WizardForm.PageNameLabel.Top;
    Width:= ScaleX(300);
    Height:= ScaleY(14);
    AutoSize:= False;
    Font.Style:= [fsBold];
    Font.Color:= ClWhite;
    Transparent := True;
    Parent:= WizardForm.SelectProgramGroupPage;
 end;
 
  PageDescriptionLabel4:= TLabel.Create(WizardForm);
  with PageDescriptionLabel4 do
  begin
    Left:= WizardForm.PageDescriptionLabel.Left;
    Top:= WizardForm.PageDescriptionLabel.top;
    Width:= ScaleX(400);
    Height:= WizardForm.PageDescriptionLabel.Height;
    AutoSize:= False;
    Wordwrap:= True;
    Transparent := True;
    Parent:= WizardForm.SelectProgramGroupPage;
  end;
  //ProgrammGroupPage
  //ReadyPage
  ReadyLabel:= TLabel.Create(WizardForm);
  with ReadyLabel do
  begin
    Left:= ScaleX(40);
    Top:= ScaleY(70);
    Width:= ScaleX(325);
    Height:= ScaleY(30);
    AutoSize:= False;
    Transparent:= true;
    Caption:= 'Нажмите «Установить», чтобы продолжить, или «Назад», если Вы хотите' + #10 + 'просмотреть или изменить опции установки.'
    Parent:= WizardForm.ReadyPage;
  end;
 
  PageNameLabel5:= TLabel.Create(WizardForm);
  with PageNameLabel5 do
  begin
    Left:= WizardForm.PageNameLabel.Left;
    Top:= WizardForm.PageNameLabel.Top;
    Width:= ScaleX(300);
    Height:= ScaleY(14);
    AutoSize:= False;
    Font.Style:= [fsBold];
    Font.Color:= ClWhite;
    Transparent := True;
    Parent:= WizardForm.ReadyPage;
 end;
 
  PageDescriptionLabel5:= TLabel.Create(WizardForm);
  with PageDescriptionLabel5 do
  begin
    Left:= WizardForm.PageDescriptionLabel.Left;
    Top:= WizardForm.PageDescriptionLabel.top;
    Width:= ScaleX(400);
    Height:= WizardForm.PageDescriptionLabel.Height;
    AutoSize:= False;
    Wordwrap:= True;
    Transparent := True;
    Parent:= WizardForm.ReadyPage;
  end;
  //ReadyPage
  //InstallingPage
    StatusLabel:= TLabel.Create(WizardForm);
  with StatusLabel do
  begin
    Left:= ScaleX(20);
    Top:= ScaleY(80);
    Width:= WizardForm.StatusLabel.Width;
    Height:= WizardForm.StatusLabel.Height;
    AutoSize:= False;
    Transparent := True;
    Parent:= WizardForm.InstallingPage;
    Caption:= 'Распаковка файлов...'
   end;
 
    FilenameLabel:= TLabel.Create(WizardForm);
  with FilenameLabel do
  begin
    Left:= ScaleX(20);
    Top:= ScaleY(100);
    Width:= WizardForm.StatusLabel.Width;
    Height:= WizardForm.StatusLabel.Height;
    AutoSize:= False;
    Transparent := True;
    Parent:= WizardForm.InstallingPage;
   end;
 
  with WizardForm.ProgressGauge do
  begin
      // Create a label to show current FileName being extracted
      lblExtractFileName:= TLabel.Create(WizardForm);
      lblExtractFileName.parent:=WizardForm.InstallingPage;
      lblExtractFileName.autosize:=false;
      lblExtractFileName.Width:= Width;
      lblExtractFileName.Left:= ScaleX(20);
      lblExtractFileName.top:= ScaleY(100);
      lblExtractFileName.Caption:= '';
      lblExtractFileName.Hide;
      lblExtractFileName.Transparent:= true;
       
      // Create a label to show percentage
      ExtractFile:= TLabel.Create(WizardForm);
      ExtractFile.parent:=WizardForm.InstallingPage;
      ExtractFile.autosize:=false;
      ExtractFile.Width:= Width;
      ExtractFile.top:=lblExtractFileName.Top + ScaleY(48);
      ExtractFile.Left:= ScaleX(20);
      ExtractFile.caption:= '';
      ExtractFile.Hide;
      ExtractFile.Transparent:= true;
   end;
 
  // Create a 'Cancel unpacking' button and hide it for now.
  btnCancelUnpacking:=TButton.create(WizardForm);
  btnCancelUnpacking.Parent:= WizardForm;
  btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
  btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
  btnCancelUnpacking.Hide;
     
  PageNameLabel6:= TLabel.Create(WizardForm);
  with PageNameLabel6 do
  begin
    Left:= WizardForm.PageNameLabel.Left;
    Top:= WizardForm.PageNameLabel.Top;
    Width:= ScaleX(300);
    Height:= ScaleY(14);
    AutoSize:= False;
    Font.Style:= [fsBold];
    Font.Color:= ClWhite;
    Transparent := True;
    Parent:= WizardForm.InstallingPage;
 end;
 
  PageDescriptionLabel6:= TLabel.Create(WizardForm);
  with PageDescriptionLabel6 do
  begin
    Left:= WizardForm.PageDescriptionLabel.Left;
    Top:= WizardForm.PageDescriptionLabel.top;
    Width:= ScaleX(400);
    Height:= WizardForm.PageDescriptionLabel.Height;
    AutoSize:= False;
    Wordwrap:= True;
    Transparent := True;
    Parent:= WizardForm.InstallingPage;
  end;
  //InstallingPage
  //InfoAfterPage
   InfoAfterClickLabel:= TLabel.Create(WizardForm);
   with InfoAfterClickLabel do
   begin
    Left:= ScaleX(40);
    Top:= ScaleY(70)
    Width:= WizardForm.InfoAfterClickLabel.Width;
    Height:= WizardForm.InfoAfterClickLabel.Height;
    Transparent:= true;
    AutoSize:= False;
    WordWrap:= true;
    Parent:= WizardForm.InfoAfterPage;
    Caption:= WizardForm.InfoAfterClickLabel.Caption;
   end;
 
  WizardForm.InfoAfterMemo.left:= ScaleX(40);
  WizardForm.InfoAfterMemo.Top:= ScaleY(108);
 
  PageNameLabel7:= TLabel.Create(WizardForm);
  with PageNameLabel7 do
  begin
    Left:= WizardForm.PageNameLabel.Left;
    Top:= WizardForm.PageNameLabel.Top;
    Width:= ScaleX(300);
    Height:= ScaleY(14);
    AutoSize:= False;
    Font.Style:= [fsBold];
    Font.Color:= ClWhite;
    Transparent := True;
    Parent:= WizardForm.InfoAfterPage;
 end;
 
  PageDescriptionLabel7:= TLabel.Create(WizardForm);
  with PageDescriptionLabel7 do
  begin
    Left:= WizardForm.PageDescriptionLabel.Left;
    Top:= WizardForm.PageDescriptionLabel.top;
    Width:= ScaleX(400);
    Height:= WizardForm.PageDescriptionLabel.Height;
    AutoSize:= False;
    Wordwrap:= True;
    Transparent := True;
    Parent:= WizardForm.InfoAfterPage;
  end;
  //InfoAfterPage
  //FinishedPage
  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  with FinishedHeadingLabel do
  begin
    Top:= ScaleY(66);
    Left:= ScaleX(176);
    Width:= ScaleX(301);
    Height:= ScaleY(53);
    AutoSize:= false;
    WordWrap:= true;
    Font.Size:= 14;
    Font.Color:=ClWhite
    Font.Style := [fsBold]
    Transparent:= true;
    Parent:= WizardForm.FinishedPage;
    Caption:= WizardForm.FinishedHeadingLabel.Caption;
  end;
 
  FinishedLabel:= TLabel.Create(WizardForm);
  with FinishedLabel do
  begin
    Left:= ScaleX(176);
    Top:= ScaleY(136);
    Width:= ScaleX(301);
    Height:= ScaleY(54);
    AutoSize:= false;
    WordWrap:= true;
    Transparent:= true;
    Parent:= WizardForm.FinishedPage;
    Caption:= 'Игра [Prototype] установлена на Ваш компьютер.' + #10#13#10 + 'Нажмите «Завершить», чтобы выйти из программы' + #10 + 'установки.'
  end;
   
RunProgram:= TCheckBox.Create(WizardForm);
  with RunProgram do
  begin
    Parent:= WizardForm.FinishedPage;
    Left:= ScaleX(176);
    Top:= ScaleY(200);
    Width:= ScaleX(14);
    Height:= ScaleY(14);
    TabOrder:= 4;
    Checked:= False;
  end;
 
RunProgramLabel:= TLabel.Create(WizardForm);
  with RunProgramLabel do
  begin
    Caption:='Запустить Prototype';
    Left:= ScaleX(196);
    Top:= ScaleY(200);
    Width:= ScaleX(150);
    Height:= ScaleY(13);
    Transparent := True;
    Parent:= WizardForm.FinishedPage;
    OnClick:= @RunProgramOnClick;
  end;
  //FinishedPage
  end;
 
procedure CurPageChanged(CurPageID: Integer);
begin
  PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
  PageNameLabel1.Caption:= 'Апаратное Обеспечение';
  PageDescriptionLabel1.Caption:= 'Программа установки обнаружила следуюшие необходимые компоненты';
  PageNameLabel2.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel2.Caption:= WizardForm.PageDescriptionLabel.Caption;
  PageNameLabel3.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel3.Caption:= WizardForm.PageDescriptionLabel.Caption;
  PageNameLabel4.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel4.Caption:= WizardForm.PageDescriptionLabel.Caption;
  PageNameLabel5.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel5.Caption:= WizardForm.PageDescriptionLabel.Caption;
  PageNameLabel6.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel6.Caption:= WizardForm.PageDescriptionLabel.Caption;
  PageNameLabel7.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel7.Caption:= WizardForm.PageDescriptionLabel.Caption;
  PageID:=CurPageID;
  if CurPageID = wpSelectDir then
  begin
    GetNeedSpaceCaption;
    if FreeMB < NeedSize then
    WizardForm.NextButton.Enabled:=False;
      begin
if CurPageID=wpInstalling
then
if CurPageID=wpFinished
then
begin
WizardForm.Width:=497;
WizardForm.Height:=358;
WizardForm.Position:=poScreenCenter;
end
end;
end;
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        UnPackError:= UnPack(Archives)
        if UnPackError = 0 then
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
        else
        begin
            // Error occured, uninstall it then
            Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    //откат установки из-за ошибки unarc.dll
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
        end;
    end;
end;

Всего записей: 695 | Зарегистр. 09-06-2009 | Отправлено: 08:23 23-07-2009
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)
Widok (10-08-2009 22:13): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru