Мужики, подскажите что делать. В общем игра Left 4 Dead 2. 7zip сжимает ее на 8,5 гб, таким образом чтоб на 2 Dvd5 влезло. Но Inno Setup методом сжатия lzma2/ultra64 не сжимает в такой размер, даже с включенным Solidcompression. Подскажите, может что в секции [Setup] для настроек lzma нужно дописать. Мне нужно сжать игру на 8,5, но средствами Inno Setup.
» Inno Setup (создание инсталяционных пакетов)
marineharrison
со словарём поиграйся и посмотри как лучше сжимает
Compression=lzma2/ultra64
LZMAUseSeparateProcess=yes
LZMAMatchFinder=BT
LZMANumFastBytes=273
LZMADictionarySize=262144
///LZMADictionarySize=131072
InternalCompressLevel=ultra64
///SolidCompression=true
MergeDuplicateFiles=true
и на DVD 5 кажется влезает 4.3 гб
со словарём поиграйся и посмотри как лучше сжимает
Compression=lzma2/ultra64
LZMAUseSeparateProcess=yes
LZMAMatchFinder=BT
LZMANumFastBytes=273
LZMADictionarySize=262144
///LZMADictionarySize=131072
InternalCompressLevel=ultra64
///SolidCompression=true
MergeDuplicateFiles=true
и на DVD 5 кажется влезает 4.3 гб
Некто не в курсе почему на Krinkels невозможно зайти жму перейти по ссылке в браузере пишет что страница не найдена...
использую у себя в скрипте 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;
странным образом обычный таймер не работает
этот
[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;
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;
А зачем огород городить? Так не?
[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;
ISForm.dll - Test №2
Не много о библиотеке: Это библиотека загружает нарисованную картинку для формы окна.
Прошу протестировать библиотеку, поправил все ошибки, думаю новых не будет, хочу узнать: Нагрузка на процессор, Система на которой проверялась библиотека (Хотелось бы узнать как она поведет на win XP и win 8) и т.д.
--- Вес библиотеки был снижен почти в 4 раза (90 кб) (Раньше 448 кб)
Скачать
Не много о библиотеке: Это библиотека загружает нарисованную картинку для формы окна.
Прошу протестировать библиотеку, поправил все ошибки, думаю новых не будет, хочу узнать: Нагрузка на процессор, Система на которой проверялась библиотека (Хотелось бы узнать как она поведет на win XP и win 8) и т.д.
--- Вес библиотеки был снижен почти в 4 раза (90 кб) (Раньше 448 кб)
Скачать
nik1967
спасибо
то что нужно.
Просто делаю кнопку "по умолчанию" и нужно чтобы она была активна если путь изменён
спасибо
то что нужно.
Просто делаю кнопку "по умолчанию" и нужно чтобы она была активна если путь изменён
kombat 77
Спасибо буду поправлять
Спасибо буду поправлять
Помогите пожалуйста соединить два скрипта.
Первый
[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]
Первый
[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]
Nasgul1987
Пробовал, при использовании LZMADictionarySize=262144 выкидывает ошибку компилятора. С использованием остальных настроек сжимает также. Вес тот же - 9,8 гб. А 7z сжимает на 8,5. Черт, я не знаю. какая-то идиотская головоломка, почему не ужимается не понимаю. Может кто сжимал эту игру, подскажет...
Пробовал, при использовании LZMADictionarySize=262144 выкидывает ошибку компилятора. С использованием остальных настроек сжимает также. Вес тот же - 9,8 гб. А 7z сжимает на 8,5. Черт, я не знаю. какая-то идиотская головоломка, почему не ужимается не понимаю. Может кто сжимал эту игру, подскажет...
Pavel0145 Скрипт под тег [more][/more].
marineharrison
Попробуйте WAV файлы в OGG перекодировать. Существенно уменьшит размер.
Но кодировать придётся долго.
Попробуйте WAV файлы в OGG перекодировать. Существенно уменьшит размер.
Но кодировать придётся долго.
marineharrison 20:29 10-04-2012
Цитата:
sjwrec 00:38 11-04-2012
Цитата:
Во-первых сжатие в этой теме не обсуждается.
Во-вторых звуки там лучше не трогать.
В-третьих пусть использует FreeArc и скрипт распаковки архивов.
Pavel0145
Про тег [more] не слышал? Положи скрипты под тег more (не надо создавать новое сообщение - отредактируй старое), а потом тебе помогут.
Цитата:
Пробовал, при использовании LZMADictionarySize=262144 выкидывает ошибку компилятора. С использованием остальных настроек сжимает также. Вес тот же - 9,8 гб. А 7z сжимает на 8,5. Черт, я не знаю. какая-то идиотская головоломка, почему не ужимается не понимаю. Может кто сжимал эту игру, подскажет...
sjwrec 00:38 11-04-2012
Цитата:
Попробуйте WAV файлы в OGG перекодировать. Существенно уменьшит размер. Но кодировать придётся долго.
Во-первых сжатие в этой теме не обсуждается.
Во-вторых звуки там лучше не трогать.
В-третьих пусть использует FreeArc и скрипт распаковки архивов.
Pavel0145
Про тег [more] не слышал? Положи скрипты под тег more (не надо создавать новое сообщение - отредактируй старое), а потом тебе помогут.
Всем привет можете дать такой инсталлятор http://pix.am/Ewv6.png
Покажите пример наложения картинки на весь экран только не через isgsg.dll..
RAZOR1212
Такой можешь сделать либо сам, либо попросить у самих Оригами.
Есть аналог, сделан по старому инсталлятору каталистов:
http://rghost.ru/5859961
Такой можешь сделать либо сам, либо попросить у самих Оригами.
Есть аналог, сделан по старому инсталлятору каталистов:
http://rghost.ru/5859961
Shegorat
Мне не нужно использовать сторонние архиваторы, я просил подсказать настройки для использования средств сжатия inno setup. я не обсуждаю сжатие. подскажите если сами в курсе какого черта 7z жмет, а inno setup с тем же сдатием 7z так же сжать почему-то не может.
Мне не нужно использовать сторонние архиваторы, я просил подсказать настройки для использования средств сжатия inno setup. я не обсуждаю сжатие. подскажите если сами в курсе какого черта 7z жмет, а inno setup с тем же сдатием 7z так же сжать почему-то не может.
marineharrison
LZMADictionarySize=262144
LZMANumFastBytes=128
LZMAUseSeparateProcess=yes
Так же нужно иметь 4gb RAM и x64 ось.
LZMADictionarySize=262144
LZMANumFastBytes=128
LZMAUseSeparateProcess=yes
Так же нужно иметь 4gb RAM и x64 ось.
Цитата:
RAZOR1212
Такой можешь сделать либо сам, либо попросить у самих Оригами.
Есть аналог, сделан по старому инсталлятору каталистов:
http://rghost.ru/5859961
Спасибо а как мне сделать что через издан все работало а не через dll
Ребят подскажите как в этой раздаче http://www.bestrepack.net/forum/viewtopic.php?t=2683 прописана последовательность распаковки архивов в скрипте???
RAZOR1212
Как вариант, попросить знающих людей соединить тебе скрипт. Или же на основе исданского скрипта, сделать подобный этому.
Как вариант, попросить знающих людей соединить тебе скрипт. Или же на основе исданского скрипта, сделать подобный этому.
Сделал в группе программ иконку на сайт программы. Всё работает. А как сделать так:
1. Чтобы по завершению установки открывался этот сайт
2. Как сделать на экране "Завершения мастера установки" кроме галочек просмотреть Readme и запустить программу ещё и галочку "посетить сайт" ?
1. Чтобы по завершению установки открывался этот сайт
2. Как сделать на экране "Завершения мастера установки" кроме галочек просмотреть Readme и запустить программу ещё и галочку "посетить сайт" ?
sega1971
Создать файл "Cайт.url", прописать в нем:
[InternetShortcut]
URL=http://Сайт
В скрипт добавить:
[Run]
Filename: "{app}\Сайт.url"; Flags: postinstall shellexec; Description: "Посетить мой сайт"
Ссылка откроется в браузере по-умолчанию.
Добавлено:
Перелопатил форум и документацию, но не могу решить следующую задачу (может неправильно ищу.. ), - подскажите пож-та, уважаемые спецы решение:
Есть инсталляция программы. В процессе создается ini-файл.
Надо, чтобы в значение ключа "user" прописывалось имя текущего пользователя, полученного, например, командой "set username" ?
Спасибо.
Создать файл "Cайт.url", прописать в нем:
[InternetShortcut]
URL=http://Сайт
В скрипт добавить:
[Run]
Filename: "{app}\Сайт.url"; Flags: postinstall shellexec; Description: "Посетить мой сайт"
Ссылка откроется в браузере по-умолчанию.
Добавлено:
Перелопатил форум и документацию, но не могу решить следующую задачу (может неправильно ищу.. ), - подскажите пож-та, уважаемые спецы решение:
Есть инсталляция программы. В процессе создается ini-файл.
Надо, чтобы в значение ключа "user" прописывалось имя текущего пользователя, полученного, например, командой "set username" ?
Спасибо.
NaMoRZA
Код: procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
SetIniString('Settings', 'User', GetUserNameString, ExpandConstant('{app}\str.ini'));
end;
Код: procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
SetIniString('Settings', 'User', GetUserNameString, ExpandConstant('{app}\str.ini'));
end;
troyan90
Спасибо огромное! Супер!
Спасибо огромное! Супер!
всем привет, такой вопрос игра 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]
Вопрос - данным образом запаковав файлы, при распаковке (установке) как сделать чтоб эти файлы распаковались именно в соответсвующие папки?
Подскажите кто знает....
[more=Скрины]
[/more]
Как паковать папку BmGame, она весит 7,57 Гб, можно запаковать отдельно папку Movies (2,80 Гб) и все остальное из этой папки, должно получиться 3 архива:
1-ый [more=без папки] [/more]
2-ой [more=в папке BmGame - папка Movies] [/more]
3-ий [more=все остальное без "Movies"] [/more]
Вопрос - данным образом запаковав файлы, при распаковке (установке) как сделать чтоб эти файлы распаковались именно в соответсвующие папки?
Подскажите кто знает....
не знаю как удалить сообщение, проблема решена)))
NaMoRZA
Огромное спасибо, всё получилось
Добавлено:
Есть ещё вопрос от новичка: как сделать так, чтобы инсталлятор проверял: если при установке программы в папку, совпадающую с DefaultDirName, и которая уже существует, запускался бы ещё по окончании установки файл CNV.EXE
Огромное спасибо, всё получилось
Добавлено:
Есть ещё вопрос от новичка: как сделать так, чтобы инсталлятор проверял: если при установке программы в папку, совпадающую с DefaultDirName, и которая уже существует, запускался бы ещё по окончании установки файл CNV.EXE
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
Предыдущая тема: поиск
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.