Shift85
Старожил
sergey3695, Кнопка обзор слетает: http://rghost.ru/52222726
procedure ShowComponents(CurPageID: Integer);
begin
SetStateNewButtons(CurPageID); // ОБНОВЛЯЕМ ТЕКСТУРЫ КНОПОК
case CurPageID of
wpSelectDir: // СТРАНИЦА ВЫБОРА ПАПКИ НАЗНАЧЕНИЯ
begin
GetFreeSpaceCaption(nil)
WizardForm.DirEdit.Show;
WizardForm.DirBrowseButton.Show;
[B]UpdateButton(WizardForm.DirBrowseButton,3);[/B]
NeedSpaceLabel.Show;
FreeSpaceLabel.Show;
end;
end;
end;
procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonPanel[AButtonIndex].Visible := [B]AButton.Visible;[/B]
...
Нужна подсказка. делаю рэпак программы, хочу совместить x86, x64 в одном инсталляторе. Проблема в том что у обоих версий все dll и exe имеют разное название. т.е. в х86 имеют такой вид "name_x86.exe, name_x86.dll" а в х64 "name_x64.exe, name_64.dll", как сделать чтобы автоматически распаковывался нужный набор? Была идея с распаковкой в temp с последующим перемещением нужного набора, но почему-то не получилось.
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: dll_x64.dll; DestDir: {app}; Check: ISWIN64;
Source: dll_x86.dll; DestDir: {app}; Check: not ISWIN64;
[Setup]
AppId={{701B0003-9114-4402-B8B8-95EA3796FA7C}
AppName=GTA4
AppVersion=1.0.0
AppVerName=GTA4 1.0.0
AppPublisher=Gabriel
DefaultDirName={pf}\GTA4
DefaultGroupName=GTA4
AllowNoIcons=yes
OutputBaseFilename=GTA4
SetupIconFile=C:\Users\Gabriel\Desktop\_jpg.ico
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\GTAIV\GTAIV.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\GTA4"; Filename: "{app}\GTAIV.exe"
Name: "{group}\{cm:UninstallProgram,GTA4}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\GTA4"; Filename: "{app}\GTAIV.exe"; Tasks: desktopicon
[Run]
Filename: "{app}\GTAIV.exe"; Description: "{cm:LaunchProgram,GTA4}"; Flags: nowait postinstall skipifsilent
Спасибо за совет, вообщем переделал я скрипт и ура все заработало...инстал создался и запустился и даже игра установилась, но не запустилась-отсутствует "bink32.dl". Я его скачал отдельно и скопировал в папку с установленной игрой и в папку windows/system32, но это не решило проблему:cry:Gabriel, ошибся разделом.
Ну уж так и быть[Setup]: DiskSpanning
Возможные значения:
yes или no
Значение по умолчанию:
no
Описание:
При значении yes будет производиться разбиение на диски. Определяет, создавать ли компилятору один файл SETUP.EXE, или делить его на файлы (SETUP-*.BIN), которые помещаются на дискету, CD-ROM, DVD-ROM или другой носитель. Каждый файл в своем имени будет содержать номер, по которому можно будет определить на какой диск его следует скопировать. Скопируйте SETUP.EXE и SETUP-1.BIN на первый диск, SETUP-2.BIN на второй и т. д.
В этом случае размер каждого файла и число файлов, создаваемых для каждого диска, диктуется директивой DiskSliceSize и SlicesPerDisk секции [Setup]. Другие директивы, отвечающие за разбиение на диски, которые вы захотите внедрить, должны включать директивы DiskClusterSize и ReserveBytes.
Обратите внимание, что нужно обязательно задать этим директивам значение yes, если размер сжатого файла инсталлятора превышает 2,100,000,000 байт, даже если вы не планируете разбивать инсталлятор на диски. (Инсталлятор будет работать правильно, даже если все SETUP-*.BIN файлы будут размещены на одном диске).
[Setup]: DiskSliceSize
Возможные значения:
262144 до 2100000000, или max
Значение по умолчанию:
max (2100000000)
Описание:
Определяет максимальное количество байтов на дисковую часть (SETUP-*.BIN файл). Обычно, оно должно быть установлено в общее количество байтов, доступных на дисковых носителях, разделенных на значение директивы SlicesPerDisk секции [Setup], значение которого по умолчанию 1.
Директива игнорируется, если разбиение на диски не включено (директива DiskSpanning секции [Setup]).
Чтобы оптимально заполнить DVD диск размером 4.7 Гбайт, используйте:
SlicesPerDisk=3
DiskSliceSize=1566000000
Чтобы оптимально заполнить DVD диск размером 8.5 Гбайт, используйте:
SlicesPerDisk=5
DiskSliceSize=1708200000
Чтобы оптимально заполнить CD (80-минутные) диск размером 700 Мбайт, используйте:
SlicesPerDisk=1
DiskSliceSize=736000000
Чтобы оптимально заполнить 1.44MБ гибкие диски, используйте:
SlicesPerDisk=1
DiskSliceSize=1457664
Скачай русскую справку к InnoSetup - там много интересного и полезного.
[Setup]
DiskSpanning=true
DiskSliceSize=1566000000
AppId={{701B0003-9114-4402-B8B8-95EA3796FA7C}
AppName=GTA4
AppVersion=1.0.0
AppVerName=GTA4 1.0.0
AppPublisher=Gabriel
DefaultDirName={pf}\GTA4
DefaultGroupName=GTA4
AllowNoIcons=yes
OutputBaseFilename=GTA4
SetupIconFile=C:\Users\Gabriel\Desktop\_jpg.ico
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\GTAIV\GTAIV.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\Installers\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\GTA4"; Filename: "{app}\GTAIV.exe"
Name: "{group}\{cm:UninstallProgram,GTA4}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\GTA4"; Filename: "{app}\GTAIV.exe"; Tasks: desktopicon
[Run]
Filename: "{app}\GTAIV.exe"; Description: "{cm:LaunchProgram,GTA4}"; Flags: nowait postinstall skipifsilent
А возможно посмотреть пример ?EvilAlex, с помощью библиотек вставить gif изображение (gifctrl.dll к примеру (fayri.dll не советую)) или разбить анимацию на картинки и сделать слайдшоу с таким же интервалом как в анимации.
type
TALabel = array of TLabel;
var
SystemPage, SelectTasksPage: TWizardPage;
RequirementsLbl, ProcessorLbl, VideoCardLbl, SoundCardLbl, RAMLbl, SystemLbl,
ProcessorNameLbl, VideoCardNameLbl, SoundCardNameLbl, RAMTotalLbl, SystemNameLbl: TLabel;
Keys: TArrayOfString;
ASysReq: TALabel;
function DetectHardware: Integer; external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';
function GetProcessorName: PAnsiChar; external 'hwc_GetProcessorName@files:get_hw_caps.dll stdcall';
function GetProcessorFreq: Integer; external 'hwc_GetProcessorFreq@files:get_hw_caps.dll stdcall';
function GetVideoCardName: PAnsiChar; external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
function GetVidMemLocal: Integer; external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';
function GetPdmWidth: Integer; external 'hwc_GetPdmWidth@files:get_hw_caps.dll stdcall';
function GetPdmHeight: Integer; external 'hwc_GetPdmHeight@files:get_hw_caps.dll stdcall';
function GetSoundCards: Integer; external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';
function GetSoundCardName: PAnsiChar; external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';
function GetSystemPhys: Integer; external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';
function GetWindowsName: PAnsiChar; external 'hwc_GetWindowsName@files:get_hw_caps.dll stdcall';
function DelSp(s: string): string;
begin
while Pos(' ',s)>0 do StringChange(s,' ',' ');
Result:=Trim(s);
end;
function GetElementIndex(a:TALabel; lbl:TLabel):integer;
var
i:integer;
f:boolean;
begin
Result:=-1;
f:=False;
for i:=0 to GetArrayLength(a)-1 do
if a[i]=lbl then begin
f:=True;
Break;
end;
if f then Result:=i;
end;
procedure AddLabelToArray(var a:TALabel; lbl:TLabel);
begin
if GetElementIndex(a,lbl)=-1 then begin
SetArrayLength(a,GetArrayLength(a)+1);
a[GetArrayLength(a)-1]:=lbl;
end;
end;
procedure InitializeWizard();
var
Pdm: string;
vr,VidRam : Longint;
Version: TWindowsVersion;
begin
WizardForm.Color:=clBlack
WizardForm.ClientWidth:=ScaleX(798);
WizardForm.ClientHeight:=ScaleY(543);
WizardForm.Center;
WizardForm.OuterNotebook.Hide;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel.Hide;
with WizardForm.CancelButton do
begin
Top := ScaleY(500);
end;
with WizardForm.NextButton do
begin
Top := ScaleY(500);
end;
with WizardForm.BackButton do
begin
Top := ScaleY(500);
end;
////////////////////// SystemPage //////////////////////
SystemPage:=CreateCustomPage(wpLicense, ExpandConstant('{cm:Requirements1}'), ExpandConstant('{cm:Requirements2}'));
RequirementsLbl := TLabel.Create(WizardForm);
with RequirementsLbl do begin
AutoSize:=False;
SetBounds(ScaleX(100), ScaleY(250), ScaleX(605), ScaleY(50));
Transparent:=True;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold, fsItalic];
Caption := ExpandConstant('{cm:Requirements3}');
Parent:=WizardForm;
end;
//================= Начало - Процессор =================//
ProcessorLbl := TLabel.Create(WizardForm);
with ProcessorLbl do begin
AutoSize:=False;
SetBounds(ScaleX(107), ScaleY(296), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := ExpandConstant('{cm:Processor}');
Parent := WizardForm;
end;
ProcessorNameLbl := TLabel.Create(WizardForm);
with ProcessorNameLbl do begin
AutoSize:=False;
SetBounds(ScaleX(278), ScaleY(296), ScaleX(400), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := DelSP(GetProcessorName) + ' @' + IntToStr(GetProcessorFreq) + ' MHz';
Parent := WizardForm;
end;
RegGetSubkeyNames(HKLM, 'Hardware\Description\System\CentralProcessor', Keys)
if (GetProcessorFreq*GetArrayLength(Keys)) < {#Processor} then
begin
RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
AddLabelToArray(AsysReq,ProcessorNameLbl);
end;
//================= Конец - Процессор =================//
//================= Начало - Видеоадаптер =================//
VideoCardLbl := TLabel.Create(WizardForm);
with VideoCardLbl do begin
AutoSize:=False;
SetBounds(ScaleX(107), ScaleY(327), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := ExpandConstant('{cm:VideoCard}');
Parent := WizardForm;
end;
VideoCardNameLbl := TLabel.Create(WizardForm);
with VideoCardNameLbl do begin
AutoSize:=False;
SetBounds(ScaleX(280), ScaleY(327), ScaleX(400), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := GetVideoCardName;
Parent := WizardForm;
end;
Pdm:=' ['+IntToStr(GetPdmWidth)+'x'+IntToStr(GetPdmHeight)+']';
VidRam:=GetVidMemLocal/1000000;
if (VidRam<63) or (VidRam>1100) then vr:=VidRam
else if VidRam<100 then vr:=64
else if VidRam<200 then vr:=128
else if VidRam<300 then vr:=256
else if VidRam<400 then vr:=384
else if VidRam<600 then vr:=512
else if VidRam<800 then vr:=792
else if VidRam>800 then vr:=1024;
if VidRam=0 then VideoCardNameLbl.Caption:=ExpandConstant('{cm:DeviceDriver}')
else VideoCardNameLbl.Caption:=DelSp(VideoCardNameLbl.Caption)+' ~'+IntToStr(vr)+' MB'+Pdm;
if vr<{#VideoCard} then begin
RequirementsLbl.Caption:=ExpandConstant('{cm:Requirements4}');
AddLabelToArray(ASysReq,VideoCardNameLbl);
end;
//================= Конец - Видеоадаптер =================//
//================= Начало - Звуковая карта =================//
SoundCardLbl := TLabel.Create(WizardForm);
with SoundCardLbl do begin
AutoSize:=False;
SetBounds(ScaleX(107), ScaleY(358), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := ExpandConstant('{cm:SoundCard}');
Parent := WizardForm;
end;
SoundCardNameLbl := TLabel.Create(WizardForm);
with SoundCardNameLbl do begin
AutoSize:=False;
SetBounds(ScaleX(278), ScaleY(358), ScaleX(400), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := GetSoundCardName;
Parent := WizardForm;
end;
if GetSoundCards = 0 then begin
RequirementsLbl.Caption:= ExpandConstant('{cm:Requirements4}');
SoundCardNameLbl.Caption:= ExpandConstant('{cm:DeviceDriver}');
AddLabelToArray(ASysReq,SoundCardNameLbl);
end;
//================= Конец - Звуковая карта =================//
//================= Начало - ОЗУ =================//
RAMLbl := TLabel.Create(WizardForm);
with RAMLbl do begin
AutoSize:=False;
SetBounds(ScaleX(107), ScaleY(389), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := ExpandConstant('{cm:RAM}');
Parent := WizardForm;
end;
RAMTotalLbl := TLabel.Create(WizardForm);
with RAMTotalLbl do begin
AutoSize:=False;
SetBounds(ScaleX(279), ScaleY(389), ScaleX(400), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := IntToStr(GetSystemPhys + 1) + ' MB';
Parent := WizardForm;
end;
if (GetSystemPhys+1)<{#RAM} then begin
RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
AddLabelToArray(ASysReq,RAMTotalLbl);
end;
//================= Конец - ОЗУ =================//
//================= Начало - Операционная система =================//
SystemLbl := TLabel.Create(WizardForm);
with SystemLbl do begin
AutoSize:=False;
SetBounds(ScaleX(107), ScaleY(420), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := ExpandConstant('{cm:OperationSystem}');
Parent := WizardForm;
end;
SystemNameLbl := TLabel.Create(WizardForm);
with SystemNameLbl do begin
AutoSize:=False;
SetBounds(ScaleX(279), ScaleY(420), ScaleX(400), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 9;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := GetWindowsName;
Parent := WizardForm;
end;
GetWindowsVersionEx(Version);
if not Version.NTPlatform or
(Version.NTPlatform and (Version.Major<{#WinVerMajor})) or
(Version.NTPlatform and (Version.Major={#WinVerMajor}) and (Version.Minor<{#WinVerMinor})) or
(Version.NTPlatform and (Version.Major={#WinVerMajor}) and (Version.Minor={#WinVerMinor}) and (Version.ServicePackMajor<{#ServicePack})) then begin
RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
AddLabelToArray(ASysReq,SystemNameLbl);
end;
//================= Конец - Операционная система =================//
////////////////////// SystemPage //////////////////////
end;
procedure HideComponents;
begin
RequirementsLbl.Hide;
ProcessorLbl.Hide;
ProcessorNameLbl.Hide;
VideoCardLbl.Hide;
VideoCardNameLbl.Hide;
SoundCardLbl.Hide;
SoundCardNameLbl.Hide;
RAMLbl.Hide;
RAMTotalLbl.Hide;
SystemLbl.Hide;
SystemNameLbl.Hide;
end;
procedure ShowComponents(CurPageID: Integer);
begin
case CurPageID of
SystemPage.ID:
begin
RequirementsLbl.Show;
ProcessorLbl.Show;
ProcessorNameLbl.Show;
VideoCardLbl.Show;
VideoCardNameLbl.Show;
SoundCardLbl.Show;
SoundCardNameLbl.Show;
RAMLbl.Show;
RAMTotalLbl.Show;
SystemLbl.Show;
SystemNameLbl.Show;
end;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
HideComponents;
ShowComponents(CurPageID);
end;[/SPOILER]