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

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

Автор: BruteForce
Дата сообщения: 20.08.2007 21:08
Подскажите, установил проверку системных требований.
Всё работает. Только не пойму, где задавать эталонные требования по которым происходит сверка.
А то получается железо определяет. И пишет что системные требования подходят.
А где эти требования задать не могу найти.

Использовал вот этот код от
NightW0lf
[Setup]
AppName=System Check
AppVerName=System Check
DefaultDirName={pf32}\System Check

[Files]
Source: get_hw_caps.dll; Flags: dontcopy deleteafterinstall

[Code]
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 GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';
function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

procedure InitializeWizard();
var
Page: TWizardPage;
Text: TNewStaticText;
Memo: TMemo;
begin
Page:=CreateCustomPage(wpWelcome, 'Аппаратное обеспечение', 'Программа установки обнаружила следующие необходимые компоненты');
Text:=TNewStaticText.Create(Page);
with Text do begin
Left:=0
Top:=0
Width:=417
Height:=14
Caption:='Все компоненты удовлетворяют требованиям игры'
Parent:=Page.Surface
end
Text:=TNewStaticText.Create(Page);
with Text do begin
Left:=0
Top:=210
Width:=417
Height:=14
Caption:='Когда Вы будете готовы продолжить установку, нажмите «Далее».'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=30
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Процессор'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=55
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Видеоадаптер'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=80
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Звуковая карта'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=105
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Память'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=130
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Файл подкачки'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=30
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:=ExpandConstant('{reg:HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0,ProcessorNameString|}');
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=55
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:=''+ GetVideoCardName
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=80
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:=''+ GetSoundCardName
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=105
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:='' + IntToStr(GetSystemPhys()) + 'Mb'
Parent:=Page.Surface
if GetSystemPhys+1<1024 then
Color:=$ccccff
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=130
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:=''+ IntToStr(GetSystemPage()) + 'Mb'
Parent:=Page.Surface
end
end;
Автор: Unc1e
Дата сообщения: 20.08.2007 21:18
Народ, кто делал точную копию инсталятора S.T.A.L.K.E.R.`а (со всеми значениями реестра, правильным fsgame.ltx, оригинальными картинками, проверкой системных требований и т.д.) киньте куда-нибудь скрипт и необходимые файлы (картинки, dll) пожалуйста!
Автор: avzaytsev
Дата сообщения: 20.08.2007 21:39
Unc1e

[more=лови код...]

[Setup]
AppName=S.T.A.L.K.E.R.
AppVerName=S.T.A.L.K.E.R. (Version 1.0003)
UninstallDisplayName=S.T.A.L.K.E.R.
AppVersion=1.0003
AppPublisher=GSC World Publishing
AppPublisherURL=http://www.gsc-game.ru/
AppSupportURL=http://www.stalker-game.com/ru/
AppUpdatesURL=http://www.stalker-game.com/ru/
VersionInfoVersion=1.0003
VersionInfoCompany=Packed by Krolik
LicenseFile=e:\4\{app}\License.txt
DefaultDirName=d:\Games\S.T.A.L.K.E.R
DefaultGroupName=Игры\S.T.A.L.K.E.R
OutputDir=e:\Stalker
OutputBaseFilename=Stalker_setup
UninstallDisplayIcon={app}\stalker.ico
AllowNoIcons=yes
DiskSpanning=yes
DiskSliceSize=731906048
AlwaysShowDirOnReadyPage=yes
AlwaysShowGroupOnReadyPage=yes
Compression=lzma
SolidCompression=yes
SetupIconFile=e:\4\{app}\stalker.ico
WizardImageFile=d:\1\big.bmp
WizardSmallImageFile=d:\1\small.bmp

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

[Messages]
BeveledLabel=Packed by Krolik

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "d:\1\Stalker.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "compiler:get_hw_caps.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "e:\4\{app}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "e:\4\{userdocs}\*"; DestDir: "{userdocs}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\S.T.A.L.K.E.R."; Filename: "{app}\bin\XR_3DA.exe"; WorkingDir: "{app}\bin"; Comment: "Запустить игру"
Name: "{group}\Просмотреть ReadMe"; Filename: "{app}\ReadMe.txt"; Comment: "Просмотреть ReadMe"
Name: "{group}\Readme патча"; Filename: "{app}\Patch-any-3.txt"; Comment: "Readme патча"
Name: "{group}\{cm:UninstallProgram,игру}"; Filename: "{uninstallexe}"; WorkingDir: "{app}"; Comment: "Удалить игру"

Name: "{userdesktop}\S.T.A.L.K.E.R."; Filename: "{app}\bin\XR_3DA.exe"; WorkingDir: "{app}\bin"; Tasks: desktopicon

[Registry]
Root: HKLM; Subkey: "SOFTWARE\GSC Game World"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC\Keys"; Flags: uninsdeletekey

Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: string; ValueName: "InstallLang"; ValueData: "ru"
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: string; ValueName: "InstallSource"; ValueData: "stk-rus-pack-starforce-keydisk-r"
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: string; ValueName: "InstallVers"; ValueData: "1.0003"
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: string; ValueName: "InstallCDKEY"; ValueData: "84TH-9DVT-ZM6H-HDPD"
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: string; ValueName: "InstallUserName"; ValueData: ""
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: dword; ValueName: "BonusPack1"; ValueData: "$1"
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: dword; ValueName: "BonusPack2"; ValueData: "$1"
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: string; ValueName: "UnInstConfirm"; ValueData: "Удалить сохраненные игры и профили?"
Root: HKLM; Subkey: "SOFTWARE\GSC Game World\STALKER-SHOC"; ValueType: dword; ValueName: "InstallPatchID"; ValueData: "$54c"

Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu2\Programs\Игры\S.T.A.L.K.E.R."; Flags: uninsdeletekey

[Run]
Filename: "{app}\bin\XR_3DA.exe"; WorkingDir: "{app}\bin"; Description: "{cm:LaunchProgram,игру}"; Flags: nowait postinstall unchecked

[Code]
const
NeedMHZ = 2000;
NeedVRAM = 128;
NeedRAM = 512;
oneMB= 1024*1024;
BufferLen= 32;
DRIVE_FIXED = 3;

type TMemoryStatus = record dwLength, dwMemoryLoad, dwTotalPhys, dwAvailPhys, dwTotalPageFile, dwAvailPageFile, dwTotalVirtual, dwAvailVirtual: Longint; end;

var
Memory: TMemoryStatus;
FreeMB, TotalMB: Cardinal;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
VolumeName, FileSystemName, Uninstall, Location: String;
ListBox: TListBox;
StaticText: TNewStaticText;
RadioButton_1,RadioButton_2: TRadioButton;
ResultCode: Integer;

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 GlobalMemoryStatus(var lpBuffer: TMemoryStatus); external 'GlobalMemoryStatus@kernel32.dll';
function GetSystemMetrics(nIndex: Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
function GetHardDrivesCount: Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: Integer): PChar; external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetSoundCards: Integer; external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';
function GetSoundCardName: PChar; external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';
function GetVideoCardName: PChar; external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
function GetVidMemLocal: Integer; external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';

function MorG(MB: Integer; autoGB: Boolean): string;
    begin if (MB < 1000) or not autoGB then Result:= IntToStr(MB)+ 'Мб' else Result:= FloatToStr(round(MB/1024*1000)/1000)+ 'Гб'
end;

function DelSp(const s:string):string;
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;
for i := 0 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 DecodeVersion( verstr: String; var verint: array of Integer );
var
i,p: Integer; s: string;
begin
verint := [0,0,0,0];
i := 0;
while ( (Length(verstr) > 0) and (i < 4) ) do
begin
    p := pos('.', verstr);
    if p > 0 then
    begin
if p = 1 then s:= '0' else s:= Copy( verstr, 1, p - 1 );
     verint[i] := StrToInt(s);
     i := i + 1;
     verstr := Copy( verstr, p+1, Length(verstr));
    end
    else
    begin
     verint[i] := StrToInt( verstr );
     verstr := '';
    end;
end;
end;

function CompareVersion( ver1, ver2: String ) : Integer;
var
verint1, verint2: array of Integer;
i: integer;
begin
SetArrayLength( verint1, 4 );
DecodeVersion( ver1, verint1 );
SetArrayLength( verint2, 4 );
DecodeVersion( ver2, verint2 );
Result := 0; i := 0;
while ( (Result = 0) and ( i < 4 ) ) do
begin
    if verint1[i] > verint2[i] then
     Result := 1
    else
if verint1[i] < verint2[i] then
     Result := -1
     else
     Result := 0;
    i := i + 1;
end;
end;

function GetDirectXVersion(): String;
var
sVersion: String;
begin
sVersion := '';
RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\DirectX', 'Version', sVersion );
Result := sVersion;
end;

function Page_NextButtonClick(Page: TWizardPage): Boolean;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\S.T.A.L.K.E.R._is1','UninstallString', Uninstall) then
Uninstall:=RemoveQuotes(Uninstall);
if RadioButton_1.Checked then
begin
if not Exec(Uninstall, '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован. ', mbError, MB_OK);
Result:=True;
end
else
begin
if not RadioButton_1.Checked then
Result:=True;
end;
end;

procedure Page_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
Cancel:=True;
end;

function CheckInstalledPage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
begin
RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\S.T.A.L.K.E.R._is1','InstallLocation', Location)
Page := CreateCustomPage(PreviousPageId,'Обнаружена установленная игра','Пожалуйста, выберите действие для продолжения установки.');
StaticText := TNewStaticText.Create(Page);
StaticText.Parent := Page.Surface;
StaticText.Caption :='Программа установки обнаружила уже установленную игру в директории:' #13#13'" ' + Location + ' "';
StaticText.Left := 0;
StaticText.Top := ScaleY(24);
StaticText.TabOrder := 0;
StaticText.AutoSize:=True;
RadioButton_1 := TRadioButton.Create(Page);
RadioButton_1.Parent := Page.Surface;
RadioButton_1.Caption := 'Удалить предыдущюю версию игры (рекомендуется)';
RadioButton_1.Left := 0;
RadioButton_1.Top := ScaleY(104);
RadioButton_1.Width := ScaleX(287);
RadioButton_1.Height := ScaleY(17);
RadioButton_1.Checked := True;
RadioButton_1.TabOrder := 1;
RadioButton_1.TabStop := True;
RadioButton_2 := TRadioButton.Create(Page);
RadioButton_2.Parent := Page.Surface;
RadioButton_2.Caption := 'Продолжить установку без удаления';
RadioButton_2.Left := 0;
RadioButton_2.Top := ScaleY(144);
RadioButton_2.Width := ScaleX(263);
RadioButton_2.Height := ScaleY(17);
RadioButton_2.TabOrder := 2;
Page.OnNextButtonClick := @Page_NextButtonClick;
Page.OnCancelButtonClick := @Page_CancelButtonClick;
Result := Page.ID;
end;

function CheckSystemPage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
ProcessorName,ProductName,CSDVersion: string;
ProcessorPanel,ProcessorNamePanel,VideoCardPanel,VideoCardNamePanel,AudioCardPanel,AudioCardNamePanel,RAMPanel,RAMTotalPanel,DirectXPanel,DirectXTotalPanel,OSPanel,OSTotalPanel: TPanel;
ProcessorMHZ,FreeMB,TotalMB: Cardinal;
StaticText,StaticText2: TNewStaticText;
Version: TWindowsVersion;


begin
GetWindowsVersionEx(Version);
GlobalMemoryStatus(Memory);
GetSpaceOnDisk(ExpandConstant('{sd}'),True,FreeMB,TotalMB);
GetVolumeInformation(ExpandConstant('{sd}'), VolumeName, BufferLen-1,VolumeSerialNo,MaxComponentLength,FileSystemFlags,FileSystemName,BufferLen-1);
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','~MHz', ProcessorMHZ);
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion','ProductName', ProductName);
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion','CSDVersion', CSDVersion);
GetVidMemLocal;
GetSoundCards;

Page := CreateCustomPage(PreviousPageId,'Проверка системных требований','Программа установки обнаружила следующие необходимые компоненты:');

StaticText:=TNewStaticText.Create(Page);
with StaticText do
begin
Parent:=Page.Surface;
Caption:='Все компоненты удовлетворяют требованиям игры.';
Left:=0;
Top:=170;
AutoSize:=True;
end;

StaticText2:=TNewStaticText.Create(Page);
with StaticText2 do
begin
Parent:=Page.Surface;
Caption:='Когда будуте готовы продолжить установку, нажмите <<Далее>>.'
Left:=0;
Top:=210;
AutoSize:=True;
end;

OSPanel:=TPanel.Create(Page);
with OSPanel do
begin
Parent:=Page.Surface;
Caption:=' Система';
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(101);
Height := ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
Alignment:=taLeftJustify;
end;

OSTotalPanel:=TPanel.Create(Page);
with OSTotalPanel do
begin
Parent:=Page.Surface;
Caption:=+' '+ProductName+' '+CSDVersion+' сборка '+IntToStr(Version.Major)+'.'+IntToStr(Version.Minor)+'.'+IntToStr(Version.Build);
Left := ScaleX(108);
Top := ScaleY(0);
Width := ScaleX(309);
Height := ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color:=12639424;
Alignment:=taLeftJustify;
GetWindowsVersionEx(Version);
if Version.NTPlatform and (Version.Major = 5) and (Version.Minor = 1) and (Version.ServicePackMajor < 1) then
begin
OSTotalPanel.Color:=$ccccff;
StaticText.Caption:='Компоненты, выделенные красным цветом, не удовлетворяют требованиям' + #13 + 'игры.';
end;
end;

ProcessorPanel := TPanel.Create(Page);
with ProcessorPanel do
begin
Parent := Page.Surface;
Caption := ' Процессор';
Left:=ScaleX(0);
Top:=OSPanel.Top+27;
Width:=OSPanel.Width;
Height:=ScaleY(25);
BevelInner := bvLowered;
TabOrder := 0;
Alignment:=taLeftJustify;
end;

ProcessorNamePanel := TPanel.Create(Page);
with ProcessorNamePanel do
begin
Parent := Page.Surface;
Caption := DelSp(ProcessorName)+' '+'['+IntToStr(ProcessorMHZ)+' МГц]';
Left:=OSTotalPanel.Left;
Top:=ProcessorPanel.Top;
Width:=OSTotalPanel.Width;
Height:=ScaleY(25);
BevelInner := bvLowered;
Color := 12639424;
TabOrder := 1;
Alignment:=taLeftJustify;
if ProcessorMHZ<NeedMHZ then
begin
Caption := Caption+' < '+FloatToStr(round(NeedMHZ))+ ' МГц'
ProcessorNamePanel.Color:=$ccccff;
StaticText.Caption:='Компоненты, выделенные красным цветом, не удовлетворяют требованиям' + #13 + 'игры.';
end;
end;

VideoCardPanel:=TPanel.Create(Page);
with VideoCardPanel do
begin
Parent:=Page.Surface;
Caption:=' Видеоадаптер';
Left:=ScaleX(0);
Top:=ProcessorPanel.Top+27;
Width:=ProcessorPanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
Alignment:=taLeftJustify;
end;

VideoCardNamePanel:=TPanel.Create(Page);
with VideoCardNamePanel do
begin
Parent:=Page.Surface;
Caption:= ' ' + Trim(GetVideoCardName)+ ', '+ MorG(round(GetVidMemLocal/oneMB/64)*64,False);
Left:=ProcessorNamePanel.Left;
Top:=VideoCardPanel.Top;
Width:=ProcessorNamePanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
Color:=12639424;
TabOrder:=1;
Alignment:=taLeftJustify;
if round(GetVidMemLocal/oneMB/64)*64 < NeedVRAM then
begin Caption:= Caption + ' < ' + MorG(NeedVRAM,False);
VideoCardNamePanel.Color:=$ccccff;
StaticText.Caption:='Компоненты, выделенные красным цветом, не удовлетворяют требованиям' + #13 + 'игры.';
end;
     Caption:= Caption + ', '+ IntToStr(GetSystemMetrics(0)) + 'x' +IntToStr(GetSystemMetrics(1));
end;

RAMPanel:=TPanel.Create(Page);
with RAMPanel do
begin
Parent:=Page.Surface;
Caption:=' Объём памяти'
Left:=0;
Top:=VideoCardPanel.Top+27;
Width:=VideoCardPanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
Alignment:=taLeftJustify;
end;

RAMTotalPanel:=TPanel.Create(Page);
with RAMTotalPanel do
begin
Parent:=Page.Surface;
Caption:=' '+MorG(round(Memory.dwTotalPhys/oneMB/64)*64,False)+' всего, '+MorG(Memory.dwAvailPhys/oneMB,False)+' свободно, '
Left:=VideoCardNamePanel.Left;
Top:=RAMPanel.Top;
Width:=VideoCardNamePanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color:=12639424;
Alignment:=taLeftJustify;
if round(Memory.dwTotalPhys/oneMB/64)*64<NeedRAM then
begin
Caption:= Caption+'требуется '+MorG(NeedRAM,False);
Color:= $ccccff;
StaticText.Caption:='Компоненты, выделенные красным цветом, не удовлетворяют требованиям' + #13 + 'игры.';
end
else
Caption:= Caption +MorG((Memory.dwTotalPhys - Memory.dwAvailPhys)/oneMB,False) +' используется';
end;

AudioCardPanel:=TPanel.Create(Page);
with AudioCardPanel do
begin
Parent:=Page.Surface;
Caption:=' Звуковая карта';
Left:=ScaleX(0);
Top:=RAMPanel.Top+27;
Width:=RAMPanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
Alignment:=taLeftJustify;
end;

AudioCardNamePanel:=TPanel.Create(Page);
with AudioCardNamePanel do
begin
Parent:=Page.Surface;
Caption:=+' '+GetSoundCardName;
Left:=RAMTotalPanel.Left;
Top:=AudioCardPanel.Top;
Width:=RAMTotalPanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color:=12639424;
Alignment:=taLeftJustify;
if GetSoundCards = 0 then
begin
Caption:=' Устройство не обнаружено';
StaticText.Caption:='Компоненты, выделенные красным цветом, не удовлетворяют требованиям' + #13 + 'игры.';
AudioCardNamePanel.Color:=$ccccff;
end;
end;

DirectXPanel:=TPanel.Create(Page);
with DirectXPanel do
begin
Parent:=Page.Surface;
Caption:=' DirectX';
Left:=0;
Top:=AudioCardPanel.Top+27;
Width:=AudioCardPanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
Alignment:=taLeftJustify;
end;

DirectXTotalPanel:=TPanel.Create(Page);
with DirectXTotalPanel do
begin
Parent:=Page.Surface;
Left:=AudioCardNamePanel.Left;
Top:=DirectXPanel.Top;
Width:=AudioCardNamePanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color:=12639424;
Alignment:=taLeftJustify;
// DirectX 8.0 is 4.8.0
// DirectX 8.1 is 4.8.1
// DirectX 9.0 is 4.9.0
if CompareVersion( GetDirectXVersion(), '4.9.0') > 0 then
begin
Caption:=+' DirectX 9.0 ('+GetDirectXVersion+')';
end
else
begin
Caption:=+' Требуется DirectX 9.0 или выше';
DirectXTotalPanel.Color:=$ccccff;
StaticText.Caption:='Компоненты, выделенные красным цветом, не удовлетворяют требованиям' + #13 + 'игры.';
end;
end;
Result := Page.ID;
end;

function InitializeSetup: Boolean;
begin
if FindWindowByClassName('TWizardForm') =0 then
Result:= True
else MsgBox('Данный инсталлятор уже запущен! ', mbError, MB_OK)
end;

procedure InitializeWizard();
var
i: integer;
BackgroundBitmapImage: TBitmapImage;
s:string;
width, height:Integer;
begin
if RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\S.T.A.L.K.E.R._is1','UninstallString', Uninstall) then
CheckInstalledPage(wpLicense);
WizardForm.Position:=poScreenCenter;
WizardForm.CancelButton.BringToFront;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
ExtractTemporaryFile('Stalker.bmp');
s:=ExpandConstant('{tmp}')+'\Stalker.bmp';
BackgroundBitmapImage:=TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align:=alClient;
BackgroundBitmapImage.Parent:=MainForm;
BackgroundBitmapImage.Stretch:=True;

MainForm.Visible:=True;
MainForm.Left := 0;
MainForm.Top := 0;
CheckSystemPage(wpLicense);
ListBox:= TListBox.Create(WizardForm)
with ListBox do begin
Color:= $EEEEEE; Font.Size:= 9; Font.Name:= 'Courier New'; Parent:= WizardForm.SelectDirPage; OnClick:= @ListBoxOnClick; Top:= WizardForm.DirEdit.Top +WizardForm.DirEdit.Height +ScaleY(30); Width:= WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left; Height:= WizardForm.DiskSpaceLabel.Top -Top -9;
     for i:=0 to GetHardDrivesCount-1 do begin
     VolumeName:= StringOfChar(' ', BufferLen); GetSpaceOnDisk(GetHardDriveName(i), True, FreeMB, TotalMB); GetVolumeInformation(GetHardDriveName(i), VolumeName, BufferLen-1, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, BufferLen-1); if Trim(VolumeName)='' then VolumeName:='без метки';
Items.Add(Copy(Uppercase(GetHardDriveName(i)),0,2)+ Copy(' ',0,11-Length(MorG(TotalMB,True)))+ MorG(TotalMB,True)+ Copy(' всего, ',0,17-Length(MorG(FreeMB,True)))+ MorG(FreeMB,True)+ Copy(' (0',0,4-Length(IntToStr(round(FreeMB/TotalMB*100)))) + FloatToStr(round(FreeMB/TotalMB*100))+ '%) свободно, '+ Trim(VolumeName)); end;
end;
with TNewStaticText.Create(WizardForm) do begin Top:= WizardForm.DirEdit.Top +WizardForm.DirEdit.Height +ScaleY(8); Caption:='Список локальных дисков, присутствующих в системе:'; Parent:= WizardForm.SelectDirPage; end;
end;

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=False;
Confirm:=False;
if MsgBox('Вы действительно хотите отменить установку игры? ', mbError, MB_YESNO) = idYes
then
Cancel:=true;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(MainForm.Width-420);
WizardForm.Top:=ScaleY(MainForm.Height-170);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
S: String;
begin
If CurStep=ssPostInstall then
begin
S := ExpandConstant('{userdocs}\STALKER-SHOC\')
StringChangeEx(S, ':\', ':\|', True);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$app_data_root$=true|false|' + S + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_data$ = false| true| $fs_root$| gamedata\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_ai$ = true| false| $game_data$| ai\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_spawn$ = true| false| $game_data$| spawns\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_anims$ = true| true| $game_data$| anims\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_levels$ = true| false| $game_data$| levels\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_meshes$ = true| true| $game_data$| meshes\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_dm$ = true| true| $game_data$| meshes\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_shaders$ = true| true| $game_data$| shaders\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_sounds$ = true| true| $game_data$| sounds\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_textures$ = true| true| $game_data$| textures\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_scripts$ = true| false| $game_data$| scripts\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_config$ = true| false| $game_data$| config\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$level$ = false| false| $game_levels$' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_saves$ = true| false| $app_data_root$| savedgames\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$logs$ = true| false| $app_data_root$| logs\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$screenshots$ = true| false| $app_data_root$| screenshots\' + #13, true);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usUninstall:
if MsgBox('Вы хотите удалить сохраненные игры? ', mbError, MB_YESNO)= idYes
then
begin
DelTree(ExpandConstant('{userdocs}')+'\STALKER-SHOC', True, True, True);
end;
end;
end;

[UninstallDelete]
Type: filesandordirs; Name: "{app}"

[/more]
Автор: Unc1e
Дата сообщения: 20.08.2007 22:15
avzaytsev Глянь в личку.

Автор: Chuvakstepan
Дата сообщения: 20.08.2007 22:48
Вы чего форум засоряете? обалдели
В шапке русским языком написанно: "Длинные куски кода помещайте под тегом [more], дабы дать возможность знатокам Inno Setup прочитать сам вопрос, а не пролистывать бесконечно длинные листинги скриптов в посте."
Автор: iTASmania_Inc
Дата сообщения: 20.08.2007 23:06
Народ, помогите, пожалуйста вот [more=с этим кодом..]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program

[Code]
const
TransparentPercent = 80;
WS_EX_LAYERED = $80000;
WS_EX_TRANSPARENT = $20;
LWA_COLORKEY = 1;
LWA_ALPHA = 2;
GWL_EXSTYLE = (-20);

function SetLayeredWindowAttributes(hwnd: HWND; crKey: TColor; bAlpha: BYTE; dwFlags: DWORD): Boolean;
external 'SetLayeredWindowAttributes@user32.dll stdcall';

function GetWindowLong(Wnd: HWnd; Index: Integer): Longint;
external 'GetWindowLongA@user32.dll stdcall';

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
external 'SetWindowLongA@user32.dll stdcall';

procedure InitializeWizard();
begin
WizardForm.ReadyMemo.Color := clRed
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE,
GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED)
SetLayeredWindowAttributes(WizardForm.Handle, clRed,
(255 * TransparentPercent) / 100, LWA_COLORKEY)
end;

[/more] (от Genri)!
Данный скрипт позволяет сделать любой компонент инно не только прозрачным, но и как бы "отсутствующим" - для того, чтобы понять, посмотрите скомпилированный скрипт (пожалуйста), на странице wpReady!
Помогите сделать этот компонент (ReadyMemo) просто прозрачным!

2ALL
А могут ли если не модеры, то хотя бы Full Member'ы и т.д. редактировать длинные сообщения новичков?
Автор: avzaytsev
Дата сообщения: 21.08.2007 08:02
Chuvakstepan

Прошу прощения, я пока не волшебник, а только учусь )
Замечание учёл. Спасибо.
Автор: Sid007
Дата сообщения: 21.08.2007 09:37
Помогите плз !!! Как через IS прописать путь к какой либо папке на диске в виде двоичного параметра, как это было сделано в игре МАФИЯ. Ведь я как понимаю путь в IS это константа {app}, а что с ней делать то, как привести её к двоичному виду?
Автор: Genri
Дата сообщения: 21.08.2007 10:47
Sid007
Цитата:
прописать путь к какой либо папке на диске в виде двоичного параметра
-- этот "двоичный параметр" называется LDID (logical disk identifier). В прямом виде инно эти идентификаторы не понимает. Но если уж есть такая необходимость, можешь создать соответствующий inf-файл и запускать его из инно:

rundll32 setupx.dll,InstallHinfSection DefaultInstall 132 Путь\inf_файл

А может и инно тогда не понадобится
Автор: Sid007
Дата сообщения: 21.08.2007 11:44

Цитата:
В прямом виде инно эти идентификаторы не понимает. Но если уж есть такая необходимость, можешь создать соответствующий inf-файл и запускать его из инно:

rundll32 setupx.dll,InstallHinfSection DefaultInstall 132 Путь\inf_файл


Благодарю за ответ, Genri. Дело в том, что решил сделать установку для МАФИИ т.к. оригинал потрепался, а тамошний установщик глючит (лицензия 1С). Если можно покажите как сделать через инно (желательно кодом).

Вот что в реестре:

idir 43 3a 5c 4d 61 66 69 61 5c 00 \\ - это C:\Mafia

Заранее спасибо.
Автор: Genri
Дата сообщения: 21.08.2007 12:18
Sid007 -- тогда это совсем другое.

Открываешь Character Map и смотришь коды символов :

43 3a 5c 4d 61 66 69 61 5c 00

43 - C
3a - :
5c - \
4d - M
61 - a
66 - f
... и т.д

Соответственно, если надо ставить на диск D:, то вместо 43 ставишь 44
Автор: Sid007
Дата сообщения: 21.08.2007 12:59

Цитата:
Соответственно, если надо ставить на диск D:, то вместо 43 ставишь 44


Согласен, а как быть если путь по умолчанию отличается от конечного пути, т.е. C:\Mafia по умолчанию, а допустим я меняю на E:\Games\Mafia. Как сделать так чтобы значение в реестре всегда соответствовало месту, куда я её установил (не получается по-моему у меня выразить мысли ).
А через секцию [Code] не получится провернуть?

P.S. ТОВАРИЩИ "ЗНАЮЩИЕ", ПОМОГИТЕ ОЧЕНЬ ХОЧЕТСЯ УЗНАТЬ КАК ЭТО ДЕЛАЕТСЯ !!!
Автор: omals
Дата сообщения: 21.08.2007 13:50
2 Sid007
ну можно вот так:

function GetString(S:String): String;
var
S1, S2: String;
tChar1, tChar2:String;
i,j: integer;
begin
S1:='';
i:=1;
while i<(Length(S)) do
begin
S2:='';
S2:=uppercase(Copy(S, i, 2));
j:=StrToInt('$'+S2);
S1:= S1 + Chr(j);
i:=i+3;
end;
result:=S1;
end;

передаеш строку '43 3a 5c 4d 61 66 69 61 5c 00'
получаеш 'C:\Mafia\'
Автор: Genri
Дата сообщения: 21.08.2007 14:12
... или так :

Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
RegWriteBinaryValue(HKLM, 'Software\My Company\My Program\Settings', 'InstallPath', ExpandConstant('{app}'));
end;
end;
Автор: Sid007
Дата сообщения: 21.08.2007 14:15
Спасиба omals, ща буду разбираться что куда и откуда...

Добавлено:
РЕБЯТЫ, ОГРОМНОЕ ВАМ СПАСИБА, НАКОНЕЦ-ТО ВСЁ ПОЛУЧИЛОСЬ... GENRI ТЕБЕ В ПЕРВУЮ ОЧЕРЕДЬ.
Автор: Genri
Дата сообщения: 21.08.2007 14:27
Sid007 -- для начала определись с типом значения, которое надо прописать в реестр (string, binary и т.д.) Я так подозреваю, что это все-таки binary.



Добавлено:
Опоздал. судя по всему - уже определился
Автор: Chuvakstepan
Дата сообщения: 21.08.2007 15:00
Написал скрипт, создающий новую страницу, которая вписывает в реестр данные введенные на ней, наподобии С.т.а.л.к.е.р.А, только для игры в Counter-Strike. Уверен что кому-то понадобится


Скрипт
Автор: BruteForce
Дата сообщения: 21.08.2007 21:39
Подскажите какие строки отвечают за установку условий по сист.требованиям .
Т.е мне их необходимо задать.
Видео, память, проц. В герцах и мегабайтах .
Срочно нужно.
Автор: iTASmania_Inc
Дата сообщения: 21.08.2007 22:45
BruteForce
Скачайте отсюда... http://data.cod.ru/32617102794
Так не подойдёт? Строки помечены в секции [Code], смотрите самый верх скрипта.

Добавлено:
Chuvakstepan

Цитата:
Уверен что кому-то понадобится

Спасибо большое, понадобилось, только использую не для игры, а для программы!
Автор: 4esnok
Дата сообщения: 21.08.2007 23:12
Я как вечно просящий Chuvakstepan кинь пожалуйста свой скрипт на http://rapidshare.ru/ а то я с того скачать опять немогу (
Автор: iTASmania_Inc
Дата сообщения: 21.08.2007 23:19
4esnok
Хоть ты и не меня просил...
http://www.rapidshare.ru/378022
или
http://rapidshare.ru/378022
Хотя разница нулевая
Автор: NightW0lf
Дата сообщения: 21.08.2007 23:20
4esnok

Цитата:
Я как вечно просящий Chuvakstepan кинь пожалуйста свой скрипт на http://rapidshare.ru/ а то я с того скачать опять немогу (

[more=Вот держи]
Код: [Setup]
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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


[Code]
var
SerialEdit1, SerialEdit2, SerialEdit3, SerialEdit4, SerialEdit5, SerialEditUSER : TEdit;
StaticText, StaticText1, StaticText2, StaticText23 : TNewStaticText;
Chert, Chert2, Chert3, Chert4 : TLabel;
Page: TWizardPage;

function CheckSerialPage(wpCheckSerial123: Integer): Integer;
begin
Page := CreateCustomPage(wpInstalling,'Информация о пользователе','Пожалуйста введите данные о себе');

StaticText:=TNewStaticText.Create(Page);
with StaticText do
begin
Parent:=Page.Surface;
Caption:='Ключ:';
Left:=0;
Top:=130;
AutoSize:=True;
end;

StaticText23:=TNewStaticText.Create(Page);
with StaticText23 do
begin
Parent:=Page.Surface;
Caption:='Имя пользователя:';
Left:=0;
Top:=60;
AutoSize:=True;
end;


StaticText1:=TNewStaticText.Create(Page);
with StaticText1 do
begin
Parent:=Page.Surface;
Caption:='Для игры в Counter-Strike по сети Интернет, пожалуйста, введите желаемое имя пользователя и соотвествующий ключ, указанный на коробке';
Left:=0;
Top:=0;
AutoSize:=False;
Height:=40;
Width:=400;
WordWrap:=True;
end;

StaticText2:=TNewStaticText.Create(Page);
with StaticText2 do
begin
Parent:=Page.Surface;
Caption:='Когда вы будете готовы продолжить установку, нажмите "Далее"';
Left:=0;
Top:=210;
AutoSize:=False;
Height:=80;
Width:=400;
WordWrap:=True;
end;

SerialEdit1:=TEdit.Create(Page)
with SerialEdit1 do
begin
Font.Name:='Arial';
Font.Size:=12;
Parent:=Page.Surface;
Left:=10;
Top:=150;
AutoSize:=False;
Height:=25;
Width:=65;
MaxLength:=5;
end;


SerialEdit2:=TEdit.Create(Page)
with SerialEdit2 do
begin
Font.Name:='Arial';
Font.Size:=12;
Parent:=Page.Surface;
Left:=SerialEdit1.Left + 80;
Top:=SerialEdit1.Top;
AutoSize:=True;
Height:=25;
Width:=65;
MaxLength:=5;
end;

SerialEdit3:=TEdit.Create(Page)
with SerialEdit3 do
begin
Font.Name:='Arial';
Font.Size:=12;
Parent:=Page.Surface;
Left:=SerialEdit2.Left + 80;;
Top:=SerialEdit1.Top;
AutoSize:=True;
Height:=25;
Width:=65;
MaxLength:=5;
end;

SerialEdit4:=TEdit.Create(Page)
with SerialEdit4 do
begin
Font.Name:='Arial';
Font.Size:=12;
Parent:=Page.Surface;
Left:=SerialEdit3.Left + 80;;
Top:=SerialEdit1.Top;
AutoSize:=True;
Height:=25;
Width:=65;
MaxLength:=5;
end;

SerialEdit5:=TEdit.Create(Page)
with SerialEdit5 do
begin
Font.Name:='Arial';
Font.Size:=12;
Parent:=Page.Surface;
Left:=SerialEdit4.Left + 80;;
Top:=SerialEdit1.Top;
AutoSize:=True;
Height:=25;
Width:=65;
MaxLength:=5;
end;

SerialEditUSER:=TEdit.Create(Page)
with SerialEditUSER do
begin
Font.Name:='Arial';
Font.Size:=12;
Parent:=Page.Surface;
Left:=SerialEdit1.Left;
Top:=80;
AutoSize:=True;
Height:=25;
Width:=385;
end;

Chert:=TLabel.Create(Page)
with Chert do
begin
Font.Name:='Arial';
Font.Size:=14;
Parent:=Page.Surface;
Left:=80;
Top:=150;
AutoSize:=True;
Caption:='-';
Enabled:=True;
end;

Chert2:=TLabel.Create(Page)
with Chert2 do
begin
Font.Name:='Arial';
Font.Size:=14;
Parent:=Page.Surface;
Left:=Chert.Left + 80;
Top:=Chert.Top;
AutoSize:=True;
Caption:='-';
Enabled:=True;
end;

Chert3:=TLabel.Create(Page)
with Chert3 do
begin
Font.Name:='Arial';
Font.Size:=14;
Parent:=Page.Surface;
Left:=Chert2.Left + 80;
Top:=Chert.Top;
AutoSize:=True;
Caption:='-';
Enabled:=True;
end;

Chert4:=TLabel.Create(Page)
with Chert4 do
begin
Font.Name:='Arial';
Font.Size:=14;
Parent:=Page.Surface;
Left:=Chert3.Left + 80;
Top:=Chert.Top;
AutoSize:=True;
Caption:='-';
Enabled:=True;
end;

Result := Page.ID;
end;

procedure InitializeWizard();
begin
CheckSerialPage(wpInstalling);
end;


function NextButtonClick(CurPage: Integer): Boolean;
begin
Result := true;
If CurPage=Page.ID then
begin
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Valve\Half-Life\Settings',
'ValveKey', SerialEdit1.Text + '-' + SerialEdit2.Text + '-' + SerialEdit3.Text + '-' + SerialEdit4.Text + '-' + SerialEdit5.Text );
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Valve\Steam',
'LastGameNameUsed', SerialEditUSER.Text );
end;
end;
Автор: iTASmania_Inc
Дата сообщения: 22.08.2007 00:14
Никто не поможет вот с этим?
http://forum.ru-board.com/topic.cgi?forum=5&topic=23235&start=1400#18
Автор: rusz13
Дата сообщения: 22.08.2007 07:26
Подскажите пожалуйста, как можно сделать чтобы кнопка next на нужной странице не была по умолчанию. Мне на странице лицензии нужно чтобы кнопку next можно было нажать только мышкой.

Код

wizardform.nextbutton.default:=false;

не помагает! Все равно на enter переходит на след страницу!
Автор: Chuvakstepan
Дата сообщения: 22.08.2007 07:51
rusz13
Получается, если только после страницы приветствия, на странице лицензии незнаю, т.к. на событие Чекбокса (я принимаю и т.д.) выделенно сделать кнопку Далее активной (тоесть дефолтной)
[more=Код]
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpWelcome then
begin
WizardForm.NextButton.taborder:=1;
WizardForm.CancelButton.taborder:=0;
end;
end;
// В данном случае NextButton второй по списку, а CancelButton первый

[/more]
Автор: iTASmania_Inc
Дата сообщения: 22.08.2007 08:29
rusz13
Вот слегка подкорректированный скрипт Chuvakstepan, в котором вроде устранены все вышеизложенные недостатки:

[Code]
procedure RadioOnClick(Sender: TObject);
begin
WizardForm.NextButton.Enabled := True
if WizardForm.NextButton.Default then
begin
WizardForm.CancelButton.Default := True
WizardForm.NextButton.Default := False
end
end;

procedure InitializeWizard();
begin
WizardForm.NextButton.TabOrder := 1
WizardForm.CancelButton.TabOrder := 0
WizardForm.LicenseAcceptedRadio.OnClick := @RadioOnClick
end;
Автор: rusz13
Дата сообщения: 22.08.2007 08:43
Chuvakstepan
Не обязательно после страницы приветствия.
Вот только по умолчанию становиться кнопка отмены, а это конечно плохо.
Можно ли сделать чтобы по умолчанию становилась кнопка back или вообще небыло кнопки по умолчанию

Способ ниже не работает:

WizardForm.BackButton.taborder:=0;
WizardForm.NextButton.taborder:=1;
WizardForm.CancelButton.taborder:=2;
Автор: iTASmania_Inc
Дата сообщения: 22.08.2007 08:46
rusz13
А Вы хотите, чтобы кнопка Next была неактивной ТОЛЬКО на странице Лицензии или, может быть, на определённых страницах тоже? Можно чуточку конкретнее?
Автор: rusz13
Дата сообщения: 22.08.2007 08:57
iTASmania_Inc
Я хочу чтобы кнопка next НЕ БЫЛА ПОУМОЛЧАНИЮ, и только на странице лицензии.
Чтобы находясь на странице лицензии при нажатии на Enter не переходил на следующую страницу, только если мышкой тыкнул или табом перешел на кнопку next
Автор: iTASmania_Inc
Дата сообщения: 22.08.2007 09:03
rusz13
Вот более тупой вариант:
[Code]
procedure RadioOnClick(Sender: TObject);
begin
WizardForm.NextButton.Enabled := True
WizardForm.NextButton.Default := False
end;

procedure InitializeWizard();
begin
WizardForm.LicenseAcceptedRadio.OnClick := @RadioOnClick
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID > wpLicense then WizardForm.NextButton.Default := True
end;

Hint: Если удалить процедуру CurPageChanged(CurPageID: Integer); то кнопка Next будет неактивной и на других страницах инсталла!

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Mail.ru агент - вход не выполнен


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