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

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

Автор: marineharrison
Дата сообщения: 08.04.2012 23:11
Мужики, подскажите что делать. В общем игра Left 4 Dead 2. 7zip сжимает ее на 8,5 гб, таким образом чтоб на 2 Dvd5 влезло. Но Inno Setup методом сжатия lzma2/ultra64 не сжимает в такой размер, даже с включенным Solidcompression. Подскажите, может что в секции [Setup] для настроек lzma нужно дописать. Мне нужно сжать игру на 8,5, но средствами Inno Setup.
Автор: Nasgul1987
Дата сообщения: 09.04.2012 02:50
marineharrison

со словарём поиграйся и посмотри как лучше сжимает

Compression=lzma2/ultra64
LZMAUseSeparateProcess=yes
LZMAMatchFinder=BT
LZMANumFastBytes=273
LZMADictionarySize=262144
///LZMADictionarySize=131072
InternalCompressLevel=ultra64
///SolidCompression=true
MergeDuplicateFiles=true

и на DVD 5 кажется влезает 4.3 гб
Автор: MOD_TEC
Дата сообщения: 09.04.2012 11:41
Некто не в курсе почему на Krinkels невозможно зайти жму перейти по ссылке в браузере пишет что страница не найдена...
Автор: nik1967
Дата сообщения: 09.04.2012 12:59
MOD_TEC
Ссылка
Автор: Nasgul1987
Дата сообщения: 09.04.2012 14:04
использую у себя в скрипте innocallback.dll
странным образом обычный таймер не работает
этот
[more]
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
PrivilegesRequired=none
OutputDir=userdocs:Inno Setup Examples Output


[ Code]
var
UTimer: TTimer; //Таймер для обновления событий

procedure UpdateTimer(Sender: TObject);
begin
//123 - ваш определённый текст!
if WizardForm.DirEdit.Text='123' then begin
WizardForm.NextButton.Enabled:= False;
end;
if WizardForm.DirEdit.Text='' then begin
WizardForm.NextButton.Enabled:= True;
end;
end;

procedure InitializeWizard;
begin
UTimer:= TTimer.Create(WizardForm);
UTimer.Interval:= 1;
UTimer.OnTimer:= @UpdateTimer;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UTimer.Enabled:= False;
if CurPageID=wpSelectDir then begin
UTimer.Enabled:= True;
end;
end;

Автор: nik1967
Дата сообщения: 09.04.2012 14:55
Nasgul1987
А зачем огород городить? Так не?
[more]
Код: [Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
PrivilegesRequired=none
OutputDir=userdocs:Inno Setup Examples Output


[ Code]
procedure UpdateDirEdit(Sender: TObject);
begin
//123 - ваш определённый текст!
if WizardForm.DirEdit.Text='123' then
WizardForm.NextButton.Enabled:= False
else
WizardForm.NextButton.Enabled:= True;
end;

procedure InitializeWizard;
begin
WizardForm.DirEdit.OnChange:= @UpdateDirEdit;
end;
Автор: vintage_1
Дата сообщения: 09.04.2012 15:40
ISForm.dll - Test №2
Не много о библиотеке: Это библиотека загружает нарисованную картинку для формы окна.
Прошу протестировать библиотеку, поправил все ошибки, думаю новых не будет, хочу узнать: Нагрузка на процессор, Система на которой проверялась библиотека (Хотелось бы узнать как она поведет на win XP и win 8) и т.д.

--- Вес библиотеки был снижен почти в 4 раза (90 кб) (Раньше 448 кб)
Скачать
Автор: Nasgul1987
Дата сообщения: 09.04.2012 17:06
nik1967
спасибо
то что нужно.
Просто делаю кнопку "по умолчанию" и нужно чтобы она была активна если путь изменён
Автор: kombat 77
Дата сообщения: 09.04.2012 19:58
vintage_1

Цитата:
Прошу протестировать библиотеку

У меня так, scaling однако.
Автор: vintage_1
Дата сообщения: 09.04.2012 21:29
kombat 77
Спасибо буду поправлять
Автор: Pavel0145
Дата сообщения: 10.04.2012 16:16
Помогите пожалуйста соединить два скрипта.

Первый

[more]
type
THardwareRequirementSnapShot = record
ProcName: String;
ProcCount: Integer;
ProcFreq: Integer;
VideoName: String;
VideoFreq: Integer;
VideoPdm: String;
SoundName: String;
SoundCount: Integer;
RAMCount: Integer;
WinName: String;
WinBits: String;
WinVer: TWindowsVersion;
end;

TMemoryStatusEx = record
dwLength: DWORD;
dwMemoryLoad: DWORD;
LoTotalPhys: Integer;
HiTotalPhys: Integer;
LoAvailPhys: Integer;
HiAvailPhys: Integer;
LoTotalPageFile: Integer;
HiTotalPageFile: Integer;
LoAvailPageFile: Integer;
HiAvailPageFile: Integer;
LoTotalVirtual: Integer;
HiTotalVirtual: Integer;
LoAvailVirtual: Integer;
HiAvailVirtual: Integer;
LoAvailExtendedVirtual: Integer;
HiAvailExtendedVirtual: Integer;
end;

PDisplay_Device = record
cb: DWord;
DeviceName: array [0..31] of char;
DeviceString: array [0..127] of char;
StateFlags: DWord;
DeviceID, DeviceKey: array [0..127] of char;
end;

var
HWREQ: THardwareRequirementSnapShot;
HWREQPage: TWizardPage;
HWREQProc1, HWREQProc2, HWREQVid1, HWREQVid2, HWREQSound1, HWREQSound2,
HWREQRam1, HWREQRam2, HWREQWin1, HWREQWin2: TMemo;
HWREQInfoLabel, HWREQStatusLabel: TLabel;
HWREQFont: TFont;

const
HWREQ_NEED_PROC_FREQ = {#Processor};
HWREQ_NEED_VIDEO_FREQ = {#VideoCard};
HWREQ_NEED_RAM_FREQ = {#RamMemory};
HWREQ_NEED_SYSTEM = '{#System}';

function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean; external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean; external 'EnumDisplayDevicesA@user32.dll Stdcall';
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';
function GetDeviceCaps(hDC, nIndex: Integer): Integer; external 'GetDeviceCaps@GDI32 stdcall';
function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer; external 'CreateDCA@GDI32 stdcall';

function DelSp(s: string): string;
begin
while Pos(' ',s)>0 do StringChange(s,' ',' ');
Result:=Trim(s);
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;

function RoundUp(Num: Longint): Integer;
var i, k, t: Integer;
begin
i:= trunc(Num/64);
repeat
if ((64*i)<Num) then i:=i+1;
k:=trunc(i/2);
if ((k*2)<i) then i:=i+1;
until (not (64*i)<Num)and(not (k*2)<>i);
k:= 64*i; Result:= k;
end;

function DecodeSystemStr(Str: String): TWindowsVersion;
var tmp, s: string;
begin
tmp:= str;
s:= Copy(tmp, 1, Pos('.', tmp)-1)
Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.Major:= StrToInt(s);
s:= Copy(tmp, 1, Pos('.', tmp)-1)
Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.minor:= StrToInt(s);
s:= Copy(tmp, 1, Pos('.', tmp)-1)
Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.Build:= StrToInt(s);
s:= Copy(tmp, 1, Pos('.', tmp)-1)
Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.ServicePackMajor:= StrToInt(s);
end;

procedure HWREQ_UpdateInfo();
var
Keys: TArrayOfString; MS: TMemoryStatusEx;
DeviceKey, DeviceName: String; DeviceValue: Cardinal;
n, i, c1, c2, x, cur: Integer; WriteV: Boolean;
aKeys, bKeys, cKeys, Devices: TArrayOfString;
lpDisplayDevice: PDisplay_Device;
begin
if not RegQueryStringValue(HKLM, 'Hardware\Description\System\CentralProcessor\0', 'ProcessorNameString', DeviceName) then
DeviceName:=CustomMessage('HWREQCantFindDevice');
RegQueryDWordValue(HKLM, 'Hardware\Description\System\CentralProcessor\0', '~Mhz', DeviceValue);
RegGetSubkeyNames(HKLM, 'Hardware\Description\System\CentralProcessor', Keys);
HWREQ.ProcName:= DelSP(DeviceName);
HWREQ.ProcFreq:= DeviceValue;
HWREQ.ProcCount:= GetArrayLength(Keys);

MS.dwLength := SizeOf(MS);
GlobalMemoryStatusEx(MS);
HWREQ.RAMCount:= RoundUp(Round(Size64(MS.HiTotalPhys, MS.LoTotalPhys)/(1024*1024)));

RegGetSubKeyNames(HKCU, 'Software\Microsoft\ActiveMovie\devenum', aKeys);
i:= GetArrayLength(aKeys);
if (i>0) then for c1:=i-1 downto 0 do begin
SetArrayLength(bKeys, 0); n:=0;
RegGetSubKeyNames(HKCU, 'Software\Microsoft\ActiveMovie\devenum\'+aKeys[c1], bKeys);
n:= GetArrayLength(bKeys);
if (n>0) then for c2:=n-1 downto 0 do begin
if RegQueryDWordValue(HKCU, 'Software\Microsoft\ActiveMovie\devenum\'+aKeys[c1]+'\'+bKeys[c2], 'WaveOutId', DeviceValue) then
if RegQueryStringValue(HKCU, 'Software\Microsoft\ActiveMovie\devenum\'+aKeys[c1]+'\'+bKeys[c2], 'FriendlyName', DeviceName)and(DeviceValue<10) then begin
x:= GetArrayLength(cKeys); SetArrayLength(cKeys, x+1); cKeys[x]:= DeviceName; Cur:=c1;
end;
end;
end;
SetArrayLength(bKeys, 0);
RegGetSubKeyNames(HKCU, 'Software\Microsoft\ActiveMovie\devenum\'+aKeys[Cur], bKeys);
i:= GetArrayLength(bKeys);
if (i>0) then for c1:=0 to i-1 do begin
if RegQueryStringValue(HKCU, 'Software\Microsoft\ActiveMovie\devenum\'+aKeys[Cur]+'\'+bKeys[c1], 'FriendlyName', DeviceName) then
for c2:= 0 to GetArrayLength(cKeys)-1 do
if (cKeys[c2]<>DeviceName)and(Pos(CKeys[c2], DeviceName)>0) then begin
StringChange(DeviceName, 'DirectSound:', ''); StringChange(DeviceName, 'S/PDIF', ''); StringChange(DeviceName, '()', '');
if (Pos('(', DeviceName)>0)and(Pos(')', DeviceName)>0) then DeviceName:= Copy(DeviceName, Pos('(', DeviceName)+1, Pos(')', DeviceName)-Pos('(', DeviceName)-1);
if DeviceName[1] = ' ' then Delete(DeviceName, 1, 1); x:= GetArrayLength(Devices); WriteV:= False;
if (x>0) then if (Devices[x-1]<>DeviceName) then WriteV:= True; if (x=0) then WriteV:= True;
if WriteV then begin SetArrayLength(Devices, x+1); Devices[x]:= DeviceName; end;
end;
end;
n:= GetArrayLength(Devices); HWREQ.SoundCount:=n; HWREQ.SoundName:='';
if (n>0) then HWREQ.SoundName:= Devices[0] else
HWREQ.SoundName:= CustomMessage('HWREQCantFindDevice');

    if not RegQueryStringValue(HKLM, 'Software\Microsoft\Windows NT\CurrentVersion', 'ProductName', DeviceName) then
DeviceName:= CustomMessage('HWREQCantFindWindows');
HWREQ.WinName:= DelSP(DeviceName);
GetWindowsVersionEx(HWREQ.WinVer);
if IsWin64 then HWREQ.WinBits:= 'x64' else HWREQ.WinBits:= 'x86';

lpDisplayDevice.cb := SizeOf(lpDisplayDevice);
DeviceKey:= ''; n:= 0;
while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0)and(lpDisplayDevice.StateFlags and 4 > 0))and(n < 127) do n:= n+1;
for n := 0 to 127 do DeviceKey:= DeviceKey + lpDisplayDevice.DeviceKey[n];
Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127);
StringChange(DeviceKey, '\Registry\Machine\', '');
i := 1; DeviceValue := 0;
if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
     for n := 1 to Length(DeviceName) do
         begin
             DeviceValue := DeviceValue + Ord(DeviceName[n])*i;
             i := i*$100;
         end else
if not RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
     RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue);
DeviceName:= '';
for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n];
Delete(DeviceName, Pos( Chr(0), DeviceName ), 127);
HWREQ.VideoName:= DelSP(DeviceName);
HWREQ.VideoFreq:= RoundUp(DeviceValue/(1024*1024));
HWREQ.VideoPdm:= IntToStr(GetSystemMetrics(0))+'x'+IntToStr(GetSystemMetrics(1));
if HWREQ.VideoName='' then HWREQ.VideoName:= CustomMessage('HWREQCantFindDevice');
end;

function HWREQ_CompareProcessor(): Boolean;
begin
Result:= False;
if HWREQ.ProcName <> CustomMessage('HWREQCantFindDevice') then
if HWREQ_NEED_PROC_FREQ <= (HWREQ.ProcCount*HWREQ.ProcFreq) then
Result:= True;
end;

function HWREQ_CompareVideo(): Boolean;
begin
Result:= False;
if HWREQ.VideoName <> CustomMessage('HWREQCantFindDevice') then
if HWREQ_NEED_VIDEO_FREQ <= HWREQ.VideoFreq then
Result:= True;
end;

function HWREQ_CompareSound(): Boolean;
begin
Result:= False;
If HWREQ.SoundCount <> 0 then
if HWREQ.SoundName <> CustomMessage('HWREQCantFindDevice') then
Result:= True;
end;

function HWREQ_CompareRAM(): Boolean;
begin
Result:= False;
if HWREQ_NEED_RAM_FREQ <= HWREQ.RAMCount then
Result:= True;
end;

function HWREQ_CompareWindows(): Boolean;
var tmp: TWindowsVersion;
begin
Result:= False;
tmp:= DecodeSystemStr(HWREQ_NEED_SYSTEM)
if HWREQ.WinVer.NTPlatform then begin
if (tmp.Major <= HWREQ.WinVer.Major) then
if (tmp.Minor <= HWREQ.WinVer.Minor) then
if (tmp.Build <= HWREQ.WinVer.Build) then
if (tmp.ServicePackMajor <= HWREQ.WinVer.ServicePackMajor) then
Result:= True;
end;
end;

function HWREQ_CompareSimple(): Boolean;
var res: Integer;
begin
HWREQ_UpdateInfo;
res:= 0; Result:= True;
if not HWREQ_CompareProcessor then
res:=MsgBox(CustomMessage('HWREQErrorProc'), mbError, MB_OK);
if not HWREQ_CompareVideo then
res:=MsgBox(CustomMessage('HWREQErrorVideo'), mbError, MB_OK);
if not HWREQ_CompareSound then
res:=MsgBox(CustomMessage('HWREQErrorSound'), mbError, MB_OK);
if not HWREQ_CompareRAM then
res:=MsgBox(CustomMessage('HWREQErrorRAM'), mbError, MB_OK);
if not HWREQ_CompareWindows then
res:=MsgBox(CustomMessage('HWREQErrorSys'), mbError, MB_OK);
if (res <> 0) then Result:= False;
end;

procedure HWREQ_CreatePanelSimple(AFont: TFont);
var
AFirstLeft, ASecondLeft, ATop, AFirstWidth, ASecondWidth, AHeight: Integer; Test: Boolean; AParent: TWinControl;
begin
HWREQ_UpdateInfo;
HWREQPage:= CreateCustomPage(wpWelcome, CustomMessage('HWREQPageCaption'), CustomMessage('HWREQPageDescription'));

AParent:= HWREQPage.Surface; AFirstLeft:=0; ATop:=ScaleY(40);
if (WizardForm.InnerNotebook.Visible = False)or(WizardForm.OuterNotebook.Visible = False) then
begin AFirstLeft:=ScaleX(40); ATop:=ScaleY(112); AParent:= WizardForm; end;
AFirstWidth:= (WizardForm.Width-ScaleX(90))/3;
ASecondWidth:= ((WizardForm.Width-ScaleX(90))*2/3);
ASecondLeft:= AFirstLeft+AFirstWidth+ScaleX(5);
if AFont <> nil then HWREQFont:= AFont else HWREQFont:= WizardForm.Font;
AHeight:= (HWREQFont.Size*2)+2;

HWREQInfoLabel:= TLabel.Create(HWREQPage)
HWREQInfoLabel.SetBounds(AFirstLeft, ATop-ScaleY(40), WizardForm.Width-ScaleX(80), ScaleY(30));
HWREQInfoLabel.Transparent:= True
HWREQInfoLabel.AutoSize:= False
HWREQInfoLabel.WordWrap:= True;
HWREQInfoLabel.Caption:= CustomMessage('HWREQPageInfo')
HWREQInfoLabel.Parent:= AParent;

HWREQProc1:= TMemo.Create(HWREQPage)
HWREQProc1.SetBounds(ScaleX(AFirstLeft), ATop, AFirstWidth, AHeight);
HWREQProc1.Alignment:= taCenter;
HWREQProc1.Font:= HWREQFont;
HWREQProc1.ReadOnly:= True;
HWREQProc1.HideSelection:= True;
HWREQProc1.Text:= CustomMessage('HWREQProcessor');
HWREQProc1.Color:= $C9C9C9;
HWREQProc1.Parent:= AParent;

HWREQProc2:= TMemo.Create(HWREQPage)
HWREQProc2.SetBounds(ScaleX(ASecondLeft), ATop, ASecondWidth, AHeight);
HWREQProc2.Font:= HWREQFont;
HWREQProc2.ReadOnly:= True;
HWREQProc2.Modified:=False
HWREQProc2.Text:= HWREQ.ProcName+' @ '+IntToStr(HWREQ.ProcFreq)+ ' МГц'
HWREQProc2.Color:= $CCFFCC;
HWREQProc2.Parent:= AParent;

HWREQVid1:= TMemo.Create(HWREQPage)
HWREQVid1.SetBounds(ScaleX(AFirstLeft), ATop+ScaleY(10)+AHeight, AFirstWidth, AHeight);
HWREQVid1.Alignment:= taCenter;
HWREQVid1.Font:= HWREQFont;
HWREQVid1.ReadOnly:= True;
HWREQVid1.HideSelection:= True;
HWREQVid1.Text:= CustomMessage('HWREQVideoCard');
HWREQVid1.Color:= $C9C9C9;
HWREQVid1.Parent:= AParent;

HWREQVid2:= TMemo.Create(HWREQPage)
HWREQVid2.SetBounds(ScaleX(ASecondLeft), ATop+ScaleY(10)+AHeight, ASecondWidth, AHeight);
HWREQVid2.Font:= HWREQFont;
HWREQVid2.ReadOnly:= True;
HWREQVid2.Modified:=False
HWREQVid2.Text:= HWREQ.VideoName+' '+IntToStr(HWREQ.VideoFreq)+' МБ ('+HWREQ.VideoPdm+')'
HWREQVid2.Color:= $CCFFCC;
HWREQVid2.Parent:= AParent;

HWREQSound1:= TMemo.Create(HWREQPage)
HWREQSound1.SetBounds(ScaleX(AFirstLeft), ATop+(ScaleY(10)+AHeight)*2, AFirstWidth, AHeight);
HWREQSound1.Alignment:= taCenter;
HWREQSound1.Font:= HWREQFont;
HWREQSound1.ReadOnly:= True;
HWREQSound1.HideSelection:= True;
HWREQSound1.Text:= CustomMessage('HWREQSoundCard');
HWREQSound1.Color:= $C9C9C9;
HWREQSound1.Parent:= AParent;

HWREQSound2:= TMemo.Create(HWREQPage)
HWREQSound2.SetBounds(ScaleX(ASecondLeft), ATop+(ScaleY(10)+AHeight)*2, ASecondWidth, AHeight);
HWREQSound2.Font:= HWREQFont;
HWREQSound2.ReadOnly:= True;
HWREQSound2.Modified:=False
HWREQSound2.Text:= HWREQ.SoundName
HWREQSound2.Color:= $CCFFCC;
HWREQSound2.Parent:= AParent;

HWREQRam1:= TMemo.Create(HWREQPage)
HWREQRam1.SetBounds(ScaleX(AFirstLeft), ATop+(ScaleY(10)+AHeight)*3, AFirstWidth, AHeight);
HWREQRam1.Alignment:= taCenter;
HWREQRam1.Font:= HWREQFont;
HWREQRam1.ReadOnly:= True;
HWREQRam1.HideSelection:= True;
HWREQRam1.Text:= CustomMessage('HWREQRamMemory');
HWREQRam1.Color:= $C9C9C9;
HWREQRam1.Parent:= AParent;

HWREQRam2:= TMemo.Create(HWREQPage)
HWREQRam2.SetBounds(ScaleX(ASecondLeft), ATop+(ScaleY(10)+AHeight)*3, ASecondWidth, AHeight);
HWREQRam2.Font:= HWREQFont;
HWREQRam2.ReadOnly:= True;
HWREQRam2.Modified:=False
HWREQRam2.Text:= IntToStr(HWREQ.RAMCount)+' МБ'
HWREQRam2.Color:= $CCFFCC;
HWREQRam2.Parent:= AParent;

HWREQWin1:= TMemo.Create(HWREQPage)
HWREQWin1.SetBounds(ScaleX(AFirstLeft), ATop+(ScaleY(10)+AHeight)*4, AFirstWidth, AHeight);
HWREQWin1.Alignment:= taCenter;
HWREQWin1.Font:= HWREQFont;
HWREQWin1.ReadOnly:= True;
HWREQWin1.HideSelection:= True;
HWREQWin1.Text:= CustomMessage('HWREQSystem');
HWREQWin1.Color:= $C9C9C9;
HWREQWin1.Parent:= AParent;

HWREQWin2:= TMemo.Create(HWREQPage)
HWREQWin2.SetBounds(ScaleX(ASecondLeft), ATop+(ScaleY(10)+AHeight)*4, ASecondWidth, AHeight);
HWREQWin2.Font:= HWREQFont;
HWREQWin2.ReadOnly:= True;
HWREQWin2.Modified:=False
HWREQWin2.Text:= HWREQ.WinName+' '+HWREQ.WinBits+' ('+IntToStr(HWREQ.WinVer.Major)+'.'+IntToStr(HWREQ.WinVer.Minor)+'.'+IntToStr(HWREQ.WinVer.Build)+' Service Pack '+IntToStr(HWREQ.WinVer.ServicePackMajor)++')'
HWREQWin2.Color:= $CCFFCC;
HWREQWin2.Parent:= AParent;

HWREQStatusLabel:= TLabel.Create(HWREQPage)
HWREQStatusLabel.SetBounds(AFirstLeft, ATop+(ScaleY(10)+AHeight)*5, WizardForm.Width-ScaleX(80), ScaleY(40));
HWREQStatusLabel.Transparent:= True;
HWREQStatusLabel.AutoSize:= False;
HWREQStatusLabel.WordWrap:= True;
HWREQStatusLabel.Font.Color:= clGreen;
HWREQStatusLabel.Caption:= CustomMessage('HWREQAllOk')
HWREQStatusLabel.Parent:= AParent;

Test:= True;
if not HWREQ_CompareProcessor then begin Test:= False; HWREQProc2.Color:= $CCCCFF; end;
if not HWREQ_CompareVideo then begin Test:= False; HWREQVid2.Color:= $CCCCFF; end;
if not HWREQ_CompareSound then begin Test:= False; HWREQSound2.Color:= $CCCCFF; end;
if not HWREQ_CompareRAM then begin Test:= False; HWREQRam2.Color:= $CCCCFF; end;
if not HWREQ_CompareWindows then begin Test:= False; HWREQWin2.Color:= $CCCCFF; end;

if not Test then begin HWREQStatusLabel.Font.Color:= clRed; HWREQStatusLabel.Caption:= CustomMessage('HWREQError') end;
end;

procedure HWREQ_UpdatePage(CurPageID: Integer);
begin
HWREQInfoLabel.Hide; HWREQStatusLabel.Hide;
HWREQProc1.Hide; HWREQProc2.Hide;
HWREQVid1.Hide; HWREQVid2.Hide;
HWREQSound1.Hide; HWREQSound2.Hide;
HWREQRam1.Hide; HWREQRam2.Hide;
HWREQWin1.Hide; HWREQWin2.Hide;

if CurPageID = HWREQPage.ID then begin
HWREQInfoLabel.Show; HWREQStatusLabel.Show;
HWREQProc1.Show; HWREQProc2.Show;
HWREQVid1.Show; HWREQVid2.Show;
HWREQSound1.Show; HWREQSound2.Show;
HWREQRam1.Show; HWREQRam2.Show;
HWREQWin1.Show; HWREQWin2.Show;
end;
end;

var
Bevel: TBevel;
Text1: TNewStaticText;
Text2: TNewStaticText;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Text3: TNewStaticText;

function Form_NextButtonClick(Page: TWizardPage): Boolean;
var ResultCode: Integer;
begin
Result:=True
if RadioButton1.Checked then
Exec(ExpandConstant('{drive:{src}}\Redist\DirectX\DXSETUP.EXE'), '', '', SW_SHOW,
ewWaitUntilTerminated, ResultCode)
if RadioButton2.Checked then
begin
if MsgBox('Если у Вас не установлен DirectX, возможно игра будет работать некорректно.'#13+
+'Вы действительно не хотите устанавливать DirectX 9.0c сейчас?', mbConfirmation,MB_YESNO)=IDNO then
Result:=False
end
end;

function DirectxPage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
begin
Page := CreateCustomPage(PreviousPageId,'Установка DirectX','');

Bevel := TBevel.Create(Page);
with Bevel do
begin
Parent := Page.Surface;
Left := ScaleX(8);
Top := ScaleY(136);
Width := ScaleX(385);
Height := ScaleY(73);
Shape := bsFrame;
end;

Text1 := TNewStaticText.Create(Page);
with Text1 do
begin
Parent := Page.Surface;
Caption := ExpandConstant('{cm:Text1}');
Left := ScaleX(8);
Top := ScaleY(8);
Width := ScaleX(389);
Height := ScaleY(38);
AutoSize := False;
TabOrder := 0;
WordWrap := True;
end;

RadioButton1 := TRadioButton.Create(Page);
with RadioButton1 do
begin
Parent := Page.Surface;
Caption := ExpandConstant('{cm:YesRadio}');
Left := ScaleX(24);
Top := ScaleY(152);
Width := ScaleX(345);
Height := ScaleY(17);
TabOrder := 2;
Checked := True;
end;

RadioButton2 := TRadioButton.Create(Page);
with RadioButton2 do
begin
Parent := Page.Surface;
Caption := ExpandConstant('{cm:NotRadio}');
Left := ScaleX(24);
Top := ScaleY(176);
Width := ScaleX(337);
Height := ScaleY(17);
TabOrder := 3;
end;

Text3 := TNewStaticText.Create(Page);
with Text3 do
begin
Parent := Page.Surface;
Caption :=
ExpandConstant('{cm:Text3}');
Left := ScaleX(8);
Top := ScaleY(104);
Width := ScaleX(381);
Height := ScaleY(14);
AutoSize := False;
TabOrder := 4;
WordWrap := True;
end;

with Page do
begin
OnNextButtonClick:= @Form_NextButtonClick;
end;

Result := Page.ID;
end;

var
CheckLicense: TCheckBox;

procedure LicenseOnClick(Sender: TObject);
begin
if (CheckLicense.Checked) = True then
begin
WizardForm.LicenseAcceptedRadio.Checked := True;
end else
begin
WizardForm.LicenseNotAcceptedRadio.Checked := True;
end;
end;

const
SC_MOVE = $F010;
MF_BYCOMMAND = 0;

function GetSystemMenu(Wnd: HWnd; bRevert: boolean): HWnd;
external 'GetSystemMenu@user32.dll stdcall';

function RemoveMenu(hMenu: HWnd; uPosition: Integer; uFlags: Longint): boolean;
external 'RemoveMenu@user32.dll stdcall';


procedure InitializeWizard();
var
MD5: String;
begin
HWREQ_CreatePanelSimple(nil)
begin
RemoveMenu(GetSystemMenu(WizardForm.Handle, false), SC_MOVE, MF_BYCOMMAND);
begin
WizardForm.Position:=poScreenCenter;
begin
DirectxPage(wpLicense);
begin
WizardForm.LicenseNotAcceptedRadio.Hide;
WizardForm.LicenseAcceptedRadio.Hide;
WizardForm.LicenseMemo.Height := ScaleY(175);

CheckLicense:= TCheckBox.Create(WizardForm);
CheckLicense.Left:= ScaleX(0);
CheckLicense.Top:= ScaleY(216);
CheckLicense.Caption:= WizardForm.LicenseAcceptedRadio.Caption;
CheckLicense.Width:= ScaleX(417);
CheckLicense.OnClick:= @LicenseOnClick;
CheckLicense.Parent:= WizardForm.LicensePage;
end;
end;
end;
end;
end;

function InitializeSetup(): Boolean;
var
ResultCode: Integer;
MD5,ResultStr:string;
hWnd: Integer;
begin
Result:=True;
if not FileExists(ExpandConstant('{src}')+'\sde.nfo') then
begin
MsgBox('Не найден информационный файл sde.nfo'#13#13'Пожалуйста, верните файл и запустите программу установки ещё раз', mbError, mb_OK);
Result:= False;
end
else
begin
MD5 := GetMD5OfFile(ExpandConstant('{src}\sde.nfo'));
If not (MD5 = '1b5274b9ce9fbcea74a5d5a92f6c7ba6') then
begin
MsgBox('Контрольная сумма файла sde.nfo не совпадает с оригинальной.''Установка не может быть продолжена', mbCriticalError, mb_OK);
Result:=False;
end;
end;
end;

const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;    
MB_ICONSTOP = $10;
MB_ICONNONE = $0;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
var
hWnd: Integer;
begin
Cancel:=False;
Confirm:=False;
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
if MessageBox(hWnd, 'Установка не завершена. Вы действительно хотите выйти из программы установки?', 'Выход из установки', MB_YESNO or $30) = idYes
then
Cancel:=true;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usUninstall then
begin
if DirExists(ExpandConstant('{commondocs}\SAVED_GAMES')) then
begin
if MsgBox('Удалить сохраненные игры?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{commondocs}\SAVED_GAMES'), True, True, True);
end;
end;
end;
end;
[/more]

Второй
[more]
var
str: string;
MyArray: array of Char;

function InitializeSetup(): Boolean;
begin
MyArray := ['A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z',
'1','2','3','4','5','6','7','8','9','0',
'!','@','#','$','%','^','&','*','(',')'];
Result:= True;
end;

function CheckPassword(Password: String): Boolean;
begin
WizardForm.PasswordEdit.Text:= 'The password is protected!';
WizardForm.PasswordPage.Free;
Result:= True;
end;

procedure InitializeWizard();
begin
WizardForm.PasswordEdit.Visible:= False;
WizardForm.PasswordEdit.Text:= 'The password is very protected!';
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
str:= GetDateTimeString('ss', #0, #0);
Result:= True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpPassword then
begin
WizardForm.PasswordEdit.Text:= MyArray[2]+MyArray[39]+MyArray[39] +
IntToStr(StrToInt(str) - StrToInt(GetDateTimeString('ss', #0, #0)));
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;
[/more]
Автор: marineharrison
Дата сообщения: 10.04.2012 19:29
Nasgul1987
Пробовал, при использовании LZMADictionarySize=262144 выкидывает ошибку компилятора. С использованием остальных настроек сжимает также. Вес тот же - 9,8 гб. А 7z сжимает на 8,5. Черт, я не знаю. какая-то идиотская головоломка, почему не ужимается не понимаю. Может кто сжимал эту игру, подскажет...
Автор: mezi
Дата сообщения: 10.04.2012 19:52
Pavel0145 Скрипт под тег [more][/more].
Автор: sjwrec
Дата сообщения: 10.04.2012 23:38
marineharrison
Попробуйте WAV файлы в OGG перекодировать. Существенно уменьшит размер.
Но кодировать придётся долго.
Автор: Shegorat
Дата сообщения: 11.04.2012 05:28
marineharrison 20:29 10-04-2012
Цитата:
Пробовал, при использовании LZMADictionarySize=262144 выкидывает ошибку компилятора. С использованием остальных настроек сжимает также. Вес тот же - 9,8 гб. А 7z сжимает на 8,5. Черт, я не знаю. какая-то идиотская головоломка, почему не ужимается не понимаю. Может кто сжимал эту игру, подскажет...

sjwrec 00:38 11-04-2012
Цитата:
Попробуйте WAV файлы в OGG перекодировать. Существенно уменьшит размер. Но кодировать придётся долго.

Во-первых сжатие в этой теме не обсуждается.
Во-вторых звуки там лучше не трогать.
В-третьих пусть использует FreeArc и скрипт распаковки архивов.

Pavel0145
Про тег [more] не слышал? Положи скрипты под тег more (не надо создавать новое сообщение - отредактируй старое), а потом тебе помогут.
Автор: RAZOR1212
Дата сообщения: 11.04.2012 08:27
Всем привет можете дать такой инсталлятор http://pix.am/Ewv6.png
Автор: MOD_TEC
Дата сообщения: 11.04.2012 17:55
Покажите пример наложения картинки на весь экран только не через isgsg.dll..
Автор: AntonOVS
Дата сообщения: 11.04.2012 21:22
RAZOR1212
Такой можешь сделать либо сам, либо попросить у самих Оригами.
Есть аналог, сделан по старому инсталлятору каталистов:

http://rghost.ru/5859961
Автор: marineharrison
Дата сообщения: 11.04.2012 21:25
Shegorat
Мне не нужно использовать сторонние архиваторы, я просил подсказать настройки для использования средств сжатия inno setup. я не обсуждаю сжатие. подскажите если сами в курсе какого черта 7z жмет, а inno setup с тем же сдатием 7z так же сжать почему-то не может.
Автор: Sig666
Дата сообщения: 11.04.2012 23:20
marineharrison
LZMADictionarySize=262144
LZMANumFastBytes=128
LZMAUseSeparateProcess=yes

Так же нужно иметь 4gb RAM и x64 ось.
Автор: RAZOR1212
Дата сообщения: 12.04.2012 05:17

Цитата:
RAZOR1212
Такой можешь сделать либо сам, либо попросить у самих Оригами.  
Есть аналог, сделан по старому инсталлятору каталистов:

http://rghost.ru/5859961


Спасибо а как мне сделать что через издан все работало а не через dll
Автор: GDDR7
Дата сообщения: 12.04.2012 08:22
Ребят подскажите как в этой раздаче http://www.bestrepack.net/forum/viewtopic.php?t=2683 прописана последовательность распаковки архивов в скрипте???
Автор: AntonOVS
Дата сообщения: 12.04.2012 14:51
RAZOR1212
Как вариант, попросить знающих людей соединить тебе скрипт. Или же на основе исданского скрипта, сделать подобный этому.
Автор: sega1971
Дата сообщения: 18.04.2012 11:11
Сделал в группе программ иконку на сайт программы. Всё работает. А как сделать так:

1. Чтобы по завершению установки открывался этот сайт
2. Как сделать на экране "Завершения мастера установки" кроме галочек просмотреть Readme и запустить программу ещё и галочку "посетить сайт" ?
Автор: NaMoRZA
Дата сообщения: 18.04.2012 16:40
sega1971
Создать файл "Cайт.url", прописать в нем:

[InternetShortcut]
URL=http://Сайт

В скрипт добавить:
[Run]
Filename: "{app}\Сайт.url"; Flags: postinstall shellexec; Description: "Посетить мой сайт"

Ссылка откроется в браузере по-умолчанию.


Добавлено:
Перелопатил форум и документацию, но не могу решить следующую задачу (может неправильно ищу.. ), - подскажите пож-та, уважаемые спецы решение:
Есть инсталляция программы. В процессе создается ini-файл.
Надо, чтобы в значение ключа "user" прописывалось имя текущего пользователя, полученного, например, командой "set username" ?
Спасибо.
Автор: troyan90
Дата сообщения: 18.04.2012 17:04
NaMoRZA

Код: procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
SetIniString('Settings', 'User', GetUserNameString, ExpandConstant('{app}\str.ini'));
end;
Автор: NaMoRZA
Дата сообщения: 18.04.2012 17:13
troyan90
Спасибо огромное! Супер!
Автор: Kizyak
Дата сообщения: 18.04.2012 18:00
всем привет, такой вопрос игра Batman Arkham Asylum, как ее разбить по архивам, чтоб влезла на 2 DVD 5 ? Вот скрины
[more=Скрины]
[/more]

Как паковать папку BmGame, она весит 7,57 Гб, можно запаковать отдельно папку Movies (2,80 Гб) и все остальное из этой папки, должно получиться 3 архива:
1-ый [more=без папки] [/more]
2-ой [more=в папке BmGame - папка Movies] [/more]
3-ий [more=все остальное без "Movies"] [/more]

Вопрос - данным образом запаковав файлы, при распаковке (установке) как сделать чтоб эти файлы распаковались именно в соответсвующие папки?
Подскажите кто знает....
Автор: alexandrevil
Дата сообщения: 18.04.2012 19:12
не знаю как удалить сообщение, проблема решена)))
Автор: sega1971
Дата сообщения: 19.04.2012 08:46
NaMoRZA
Огромное спасибо, всё получилось

Добавлено:
Есть ещё вопрос от новичка: как сделать так, чтобы инсталлятор проверял: если при установке программы в папку, совпадающую с DefaultDirName, и которая уже существует, запускался бы ещё по окончании установки файл CNV.EXE

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


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