D
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
const
AviFrameWidth = 500; // ширина кадра
AviFrameHeight = 500; // высота кадра
var
CommandString: String;
FileName: String;
AviFrameTop: Integer;
AviFrameLeft: Integer;
function mciSendString(lpstrCommand: string; lpstrReturnString: PChar; uReturnLength:integer; hwndCallback:integer):integer;
external 'mciSendStringA@winmm.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('clock.avi'));
FileName:= ExpandConstant('{tmp}\clock.avi');
AviFrameTop:= GetSystemMetrics(17) / 2 - AviFrameHeight / 2;
AviFrameLeft:= GetSystemMetrics(16) / 2 - AviFrameWidth / 2;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then
begin
CommandString:= 'Open ' + FileName + ' type AVIVideo alias AVIFile parent ' + IntToStr(MainForm.Handle) + ' style child';
mciSendString(CommandString, '', 0, 0);
CommandString:= 'put AVIFile window at ' +
IntToStr(AviFrameLeft) + ' ' + IntToStr(AviFrameTop) + ' ' +
IntToStr(AviFrameWidth) + ' ' + IntToStr(AviFrameHeight);
mciSendString(CommandString, '', 0, 0);
//CommandString:= 'Play AVIFile fullscreen'; // полноэкранный режим
CommandString:= 'Play AVIFile repeat';
mciSendString(CommandString, '', 0, 0);
end;
end;
procedure DeinitializeSetup();
begin
CommandString:= 'Close AVIFile'; // закрываем при выходе
mciSendString(CommandString, '', 0, 0);
end;
procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
begin
ExtractTemporaryFile('My_Image.bmp'); //My_Image.bmp - указываемое изображение в секции [Files]
s:=ExpandConstant('{tmp}')+'\My_Image.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
end;
Или с DLL-кай
[Setup]
WindowVisible=no
[Files]
Source: "C:\background.bmp"; DestDir: "{tmp}"; Flags: dontcopy
[Code]
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeWizard();
var
width,height: Integer;
BackgroundBitmapImage: TBitmapImage;
s: string;
begin
ExtractTemporaryFile('background.bmp');
s:=ExpandConstant('{tmp}')+'\background.bmp';
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
end;
Слайд через dll-ку isxbb.dll
[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no
[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
//Это файлы для слайд-шоу (может быть больше)
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy
[Code]
const
BACKGROUND=6;
TIMER=16;
function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';
function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';
function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';
function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';
procedure InitializeWizard();
begin
ExtractTemporaryFile('1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
//В начале этапа установки запускаем слайд-шоу
if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//Таймер показа изображений, в секундах
isxbb_StartTimer(3,BACKGROUND)
end
//На завершающем этапе останавливаем таймер, при этом возвращается фоновое изображение по умолчанию
else if CurStep=ssPostInstall then
isxbb_KillTimer(BACKGROUND);
end;
Без неё
[Setup]
;Здесь так нужно, поскольку показ изображений реализуем через системную функцию
WindowVisible=no
[Files]
Source: " D:\GAME\* "; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
;Здесь определяем файлы, перед установкой которых будет выполнена процедура смены изображения
Source: "D:\GAME\MOVIES\Intro.bik"; DestDir: "{app}\MOVIES"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: bbrd1;
Source: "D:\GAME\SOUNDS\Effects.pak"; DestDir: "{app}\SOUNDS"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: bbrd2;
Source: "D:\GAME\Core.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: bbrd3;
Source: "D:\GAME\TEXTURES\Models.pak"; DestDir: "{app}\TEXTURES"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: bbrd4;
;Указываем основное фоновое и дополнительные изображения, показ которых будет выполнен через процедуры.
Source: C:\Background.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\bbrd1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\bbrd2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\bbrd3.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\bbrd4.bmp; DestDir: {tmp}; Flags: dontcopy
[Code]
//Все как обычно
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
var
BackgroundBitmapImage: TBitmapImage;
s:string;
width, height: Integer;
//Пишем процедуру для показа основного фонового изображения
procedure wizimage;
begin
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
s:=ExpandConstant('{tmp}')+'\Background.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('Background.bmp');
//Выполнение процедуры показа фонового изображения
wizimage;
end;
//Определяем размеры и параметры дополнительных изображений
procedure ImgSetting;
begin
MainForm.BORDERSTYLE:=bsNone;
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.AutoSize := False;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:= False;
MainForm.Visible:=True;
end;
//Процедуры показа изображений
procedure bbrd1;
begin
ExtractTemporaryFile('bbrd1.bmp');
s:=ExpandConstant('{tmp}')+'\bbrd1.bmp';
//Вставляем вышеуказанную процедуру
ImgSetting;
end;
procedure bbrd2;
begin
ExtractTemporaryFile('bbrd2.bmp');
s:=ExpandConstant('{tmp}')+'\bbrd2.bmp';
ImgSetting;
end;
procedure bbrd3;
begin
ExtractTemporaryFile('bbrd3.bmp');
s:=ExpandConstant('{tmp}')+'\bbrd3.bmp';
ImgSetting;
end;
procedure bbrd4;
begin
ExtractTemporaryFile('bbrd4.bmp');
s:=ExpandConstant('{tmp}')+'\bbrd4.bmp';
ImgSetting;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
WizardForm.CancelButton.BringToFront;
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(MainForm.Width-420);
WizardForm.Top:=ScaleY(MainForm.Height-170);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
//Вставляем процедуру для показа первоначально фонового изображения
wizimage;
end
end;
вставить музон
[Files]
Source: "C:\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\01-OVERSEER-Doomsday.mp3"; DestDir: "{tmp}"; Flags: dontcopy
[Code]
//большее указание смотрите в дельфийских исходниках в архиве с библиотекой
сonst
BASS_SAMPLE_LOOP = 4; //повторение
type
HSTREAM = DWORD; //тип звукового потока
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
procedure InitializeWizard();
var
Name1: string;
i: Integer;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('01-OVERSEER-Doomsday.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\01-OVERSEER-Doomsday.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;
Ето проигруерт WAV/AIFF/MP3/MP2/MP1/OGG
Если возникнут проблемы с библиотеками DLL у меня есть все оброщайтесь !!!
Volkogriz@ya.ru
С уважением Volkogriz!!!
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
var
MyProgChecked: Boolean;
MyProgCheckResult: Boolean;
FinishedInstall: Boolean;
const
BASS_SAMPLE_LOOP = 4;
BACKGROUND=6;
TIMER=16;
type
HSTREAM = DWORD;
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';
function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';
function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';
function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall
then
begin
ExtractTemporaryFile('Atreides_lrg.gif');
ExtractTemporaryFile('Ordos_lrg.gif');
ExtractTemporaryFile('Harkonnen_lrg.gif');
ExtractTemporaryFile('planets.jpg');
ExtractTemporaryFile('sector_map.jpg');
ExtractTemporaryFile('runes.jpg');
ExtractTemporaryFile('ring.jpg');
ExtractTemporaryFile('starscape.jpg');
ExtractTemporaryFile('atreides_nebula.jpg');
ExtractTemporaryFile('galaxy_nebula.jpg');
ExtractTemporaryFile('harkonnen_nebula.jpg');
ExtractTemporaryFile('hiliner.jpg');
ExtractTemporaryFile('mcv.jpg');
ExtractTemporaryFile('shot_03.jpg');
ExtractTemporaryFile('atr_pallace.JPG');
ExtractTemporaryFile('hark_dawn.jpg');
ExtractTemporaryFile('hark_pallace.JPG');
ExtractTemporaryFile('atr_sniper.JPG');
ExtractTemporaryFile('atr_soldier.JPG');
ExtractTemporaryFile('atr_sonic.JPG');
ExtractTemporaryFile('hark_engineer.JPG');
ExtractTemporaryFile('hark_infantry.JPG');
ExtractTemporaryFile('buzzsaw.jpg');
ExtractTemporaryFile('hark_tank.JPG');
ExtractTemporaryFile('leachattack.jpg');
ExtractTemporaryFile('ord_mortar.JPG');
ExtractTemporaryFile('ord_duster.JPG');
ExtractTemporaryFile('sardauk.JPG');
ExtractTemporaryFile('shot_01.jpg');
ExtractTemporaryFile('shot_02.jpg');
ExtractTemporaryFile('shot_04.jpg');
ExtractTemporaryFile('shot_05.jpg');
ExtractTemporaryFile('shot_06.jpg');
ExtractTemporaryFile('shot_07.jpg');
ExtractTemporaryFile('shot_08.jpg');
ExtractTemporaryFile('shot_09.jpg');
ExtractTemporaryFile('shot_10.jpg');
ExtractTemporaryFile('humor_dp.jpg');
ExtractTemporaryFile('humor_dq.jpg');
ExtractTemporaryFile('humor_dr.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\Atreides_lrg.gif',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\Ordos_lrg.gif',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\Harkonnen_lrg.gif',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\planets.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\sector_map.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\runes.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\ring.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\starscape.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\atreides_nebula.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\galaxy_nebula.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\harkonnen_nebula.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\hiliner.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\mcv.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_03.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\atr_pallace.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\hark_dawn.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\hark_pallace.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\atr_sniper.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\atr_soldier.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\atr_sonic.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\hark_engineer.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\hark_infantry.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\buzzsaw.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\hark_tank.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\leachattack.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\ord_mortar.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\ord_duster.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\sardauk.JPG',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_01.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_02.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_04.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_05.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_06.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_07.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_08.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_09.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\shot_10.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\humor_dp.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\humor_dq.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\humor_dr.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
isxbb_StartTimer(3,BACKGROUND)
end
else if CurStep=ssPostInstall then
isxbb_KillTimer(BACKGROUND);
end;
procedure DeInitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;
procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('Класс.', mbInformation, mb_Ok);
end;
procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('Открыть', 'http://www.Westwood.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
function InitializeUninstall(): Boolean;
begin
MsgBox('Внимание! Сейчас ,будит производится удаление Emperor, все файлы игры, включая сохранения могут быть удолины автомотически. Внимательно читайте действия придлогаймые прграммой!!!', mbError, MB_OK)
Result:=True
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpWelcome then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Вперёд >>>';
If WizardForm.FindComponent('CancelButton') is TButton
then
TButton(WizardForm.FindComponent('CancelButton')).Caption:='Отмена';
begin
If CurPageID=wpLicense then
begin
WizardForm.BackButton.Enabled := False;
end
else
If CurPageID=wpInfoBefore then
begin
WizardForm.BackButton.Enabled := True;
end;
end;
end;
end;
function InitializeSetup(): Boolean;
begin
Result := MsgBox('Вы приступили к установки: Emperor: Battle for Dune' #13#13 'Установка Emperor: Battle for Dune Актмвизирована продолжить?', mbConfirmation, MB_YESNO) = idYes;
if Result = False then
MsgBox('Вы отказались от устоновки:' #13#13 'Для выхода нажмите ok.', mbInformation, MB_OK);
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
If DirExists(ExpandConstant('{app}')+'')
then
case MsgBox('Папка Emperor не пуста.'#13#13 +
'"Да" – Полное удоление всех файлов, включая саму папку Emperor.' #13#13 +
'"Нет" – Открыть папку Emperor в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалю папку Emperor позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
of IDYES:
begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True)
then
MsgBox('Папка Emperor не удалена.' #13#13 'папка Emperor илиодин из файлов вней задействованы другим приложением.', mbError, MB_OK);
end
IDNO:
begin
if not ShellExec('Открыть', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res)
then
MsgBox('Ошибка открытия.' #13#13 'Папка Emperor не найдена.', mbError, MB_OK);
end
IDCANCEL:
begin
end;
end;
end;
end;
end;
procedure PauseButtonOnClick(Sender: TObject);
begin
BASS_Stop;
end;
procedure InitializeWizard();
var
Name1: string;
i: Integer;
width,height: Integer;
BackgroundBitmapImage: TBitmapImage;
s: string;
PlayButton, PauseButton, StopButton, RewButton: TButton;
Text: TNewStaticText;
Panel1: TPanel;
res:Integer;
s, ResultStr:string;
begin
ExtractTemporaryFile('humor_dp.bmp');
s:=ExpandConstant('{tmp}')+'\humor_dp.bmp';
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('(AT07)Ride_the_Worm.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\(AT07)Ride_the_Worm.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
begin
PauseButton := TButton.Create(WizardForm);
PauseButton.Left := 58;
PauseButton.Top := 335;
PauseButton.Width := 50;
PauseButton.Height := 20;
PauseButton.Caption := 'выкл.';
PauseButton.OnClick := @PauseButtonOnClick;
PauseButton.Parent := WizardForm;
PauseButton.Cursor := crHand;
PauseButton.Hint := 'Приостановить музыку';
PauseButton.ShowHint := True;
Text := TNewStaticText.Create(WizardForm);
Text.Caption := 'Приостановить музыку';
Text.Parent := WizardForm;
Text.Font.Style := Text.Font.Style + [fsUnderline];
Text.Font.Color := clNavy;
Text.Top := 319;
Text.Left :=26;
Text.Color := clWhite;
begin
ExtractTemporaryFile('humor_do.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\humor_do.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
begin
with WizardForm do begin
Position:=poScreenCenter
ClientWidth:=690
ClientHeight:=496
Font.Color:=65280
Font.Name:='MS Sans Serif'
Font.Style:=[]
with Bevel do begin
Left:=0
Top:=313
Width:=497
Height:=2
Visible:=False
end
with CancelButton do begin
Left:=576
Top:=465
Width:=78
Height:=20
BringToFront
end
with NextButton do begin
Left:=429
Top:=465
Width:=78
Height:=20
BringToFront
end
with BackButton do begin
Left:=303
Top:=465
Width:=78
Height:=20
BringToFront
end
with OuterNotebook do begin
Left:=0
Top:=0
Width:=690
Height:=496
with WelcomePage do begin
Color:=0
with WizardBitmapImage do begin
Left:=0
Top:=0
Width:=690
Height:=496
end
with WelcomeLabel2 do begin
Left:=205
Top:=230
Width:=465
Height:=200
end
with WelcomeLabel1 do begin
Left:=205
Top:=190
Width:=465
Height:=28
Font.Color:=65280
Font.Size:=8
end
end
with InnerPage do begin
with Bevel1 do begin
Left:=0
Top:=58
Width:=499
Height:=3
Visible:=False
end
with InnerNotebook do begin
Left:=205
Top:=79
Width:=465
Height:=354
BringToFront
Color:=0
with LicensePage do begin
with LicenseNotAcceptedRadio do begin
Left:=0
Top:=338
Width:=465
Height:=17
Checked:=True
Color:=clWindow
end
with LicenseAcceptedRadio do begin
Left:=0
Top:=321
Width:=465
Height:=17
Color:=clWindow
end
with LicenseMemo do begin
Left:=0
Top:=38
Width:=465
Height:=282
ReadOnly:=True
ScrollBars:=ssVertical
end
with LicenseLabel1 do begin
Left:=0
Top:=0
Width:=465
Height:=28
end
end
with PasswordPage do begin
with PasswordEdit do begin
Left:=0
Top:=50
Width:=465
Height:=21
Font.Color:=clWindowText
end
with PasswordEditLabel do begin
Left:=0
Top:=34
Width:=465
Height:=14
end
with PasswordLabel do begin
Left:=0
Top:=0
Width:=465
Height:=28
end
end
with InfoBeforePage do begin
with InfoBeforeMemo do begin
Left:=0
Top:=24
Width:=465
Height:=327
ScrollBars:=ssVertical
end
with InfoBeforeClickLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with UserInfoPage do begin
with UserInfoSerialEdit do begin
Left:=0
Top:=120
Width:=465
Height:=21
Font.Color:=clWindowText
end
with UserInfoSerialLabel do begin
Left:=0
Top:=104
Width:=465
Height:=14
end
with UserInfoOrgEdit do begin
Left:=0
Top:=68
Width:=465
Height:=21
Font.Color:=clWindowText
end
with UserInfoOrgLabel do begin
Left:=0
Top:=52
Width:=465
Height:=14
end
with UserInfoNameEdit do begin
Left:=0
Top:=16
Width:=465
Height:=21
Font.Color:=clWindowText
end
with UserInfoNameLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with SelectDirPage do begin
with SelectDirBitmapImage do begin
Left:=0
Top:=0
Width:=32
Height:=32
Visible:=False
end
with DiskSpaceLabel do begin
Left:=0
Top:=340
Width:=465
Height:=14
end
with DirBrowseButton do begin
Left:=387
Top:=289
Width:=78
Height:=23
end
with DirEdit do begin
Left:=0
Top:=290
Width:=377
Height:=21
Font.Color:=clWindowText
end
with SelectDirBrowseLabel do begin
Left:=0
Top:=24
Width:=465
Height:=28
end
with SelectDirLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with SelectComponentsPage do begin
with ComponentsDiskSpaceLabel do begin
Left:=0
Top:=340
Width:=417
Height:=14
end
with ComponentsList do begin
Left:=0
Top:=48
Width:=465
Height:=275
Font.Color:=65280
Color:=0
end
with TypesCombo do begin
Left:=0
Top:=24
Width:=465
Height:=21
Font.Color:=65280
Color:=0
end
with SelectComponentsLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with SelectProgramGroupPage do begin
with SelectGroupBitmapImage do begin
Left:=0
Top:=0
Width:=32
Height:=32
Visible:=False
end
with NoIconsCheck do begin
Left:=0
Top:=312
Width:=377
Height:=20
Color:=clWindow
end
with GroupBrowseButton do begin
Left:=387
Top:=289
Width:=78
Height:=23
end
with GroupEdit do begin
Left:=0
Top:=290
Width:=377
Height:=21
Font.Color:=clWindowText
end
with SelectStartMenuFolderBrowseLabel do begin
Left:=0
Top:=24
Width:=465
Height:=28
end
with SelectStartMenuFolderLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
with SelectTasksPage do begin
with TasksList do begin
Left:=0
Top:=34
Width:=465
Height:=317
Color:=0
end
with SelectTasksLabel do begin
Left:=0
Top:=0
Width:=465
Height:=28
end
end
with ReadyPage do begin
with ReadyMemo do begin
Left:=0
Top:=34
Width:=465
Height:=317
Color:=0
end
with ReadyLabel do begin
Left:=0
Top:=0
Width:=465
Height:=28
end
end
with PreparingPage do begin
with PreparingErrorBitmapImage do begin
Left:=0
Top:=0
Width:=16
Height:=16
Visible:=False
end
with PreparingLabel do begin
Left:=24
Top:=0
Width:=393
Height:=14
Visible:=False
end
end
with InstallingPage do begin
with FilenameLabel do begin
Left:=0
Top:=16
Width:=465
Height:=16
end
with StatusLabel do begin
Left:=0
Top:=0
Width:=465
Height:=16
end
with ProgressGauge do begin
Left:=0
Top:=42
Width:=465
Height:=21
Min:=0
Max:=100
end
end
with InfoAfterPage do begin
with InfoAfterMemo do begin
Left:=0
Top:=24
Width:=465
Height:=327
ScrollBars:=ssVertical
end
with InfoAfterClickLabel do begin
Left:=0
Top:=0
Width:=465
Height:=14
end
end
end
with MainPanel do begin
Left:=0
Top:=0
Width:=690
Height:=496
with WizardSmallBitmapImage do begin
Left:=0
Top:=0
Width:=690
Height:=496
end
with PageDescriptionLabel do begin
Left:=25
Top:=25
Width:=500
Height:=14
Color:=0
Font.Color:=65280
end
with PageNameLabel do begin
Left:=15
Top:=7
Width:=500
Height:=14
Color:=0
Font.Color:=65280
end
end
end
with FinishedPage do begin
Color:=0
with WizardBitmapImage2 do begin
Left:=0
Top:=0
Width:=690
Height:=496
end
with NoRadio do begin
Left:=205
Top:=227
Width:=465
Height:=17
end
with YesRadio do begin
Left:=205
Top:=199
Width:=465
Height:=17
end
with RunList do begin
Left:=205
Top:=199
Width:=465
Height:=149
BorderStyle:=bsNone
end
with FinishedLabel do begin
Left:=205
Top:=119
Width:=465
Height:=53
end
with FinishedHeadingLabel do begin
Left:=205
Top:=79
Width:=465
Height:=24
Font.Color:=65280
Font.Size:=8
end
end
end
with BeveledLabel do begin
Left:=10
Top:=478
Width:=150
Height:=14
Enabled:=False
Color:=0
end
end;
end;
end;
end;
end;
end;
end;
end;
[Components]
Name: "RUS"; Description: "Русская версия игры"; Flags: exclusive
Name: "ENG"; Description: "Английская версия игры"; Flags: exclusive
Name: "setup"; Description: Установить основные файлы игры
Name: "Editor"; Description: Установить Редактор карт DuneMapEditor
Name: "Packer"; Description: Установить Упаковщик карт MapPacker
Name: "Tool"; Description: Установить Архиватор Файлов Bag 'BagTool'
Name: "Video"; Description: Установить Видео за все дома
Name: "Karti"; Description: Установить дополнительные карты для одиночнай игры
[Types]
Name: "custom"; Description: "Не совсем полная установка"; Flags: iscustom
[Tasks]
Name: "desktopicon"; Description: "Создать иконки на рабочем столе"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "Создать иконки в панели быстрого запуска"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Components: Video; Source: "{src}\Component\Video\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external
Components: Karti; Source: "{src}\Component\Karti\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external
Components: Tool; Source: "{src}\Component\Tool\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external
Components: Packer; Source: "{src}\Component\Packer\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external
Components: Editor; Source: "{src}\Component\Editor\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external
Components: ENG; Source: "{src}\Leng\ENG\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external
Components: setup; Source: "{src}\setup\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external
Components: RUS; Source: "{src}\Leng\RUS\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\humor_do.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\humor_dp.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\humor_dq.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\humor_dr.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\atr_pallace.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\atr_sniper.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\atr_soldier.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\atr_sonic.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\atreides_nebula.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\starscape.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\Atreides_lrg.gif; DestDir: {tmp}; Flags: dontcopy
Source: C:\buzzsaw.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\galaxy_nebula.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\hark_dawn.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\hark_engineer.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\hark_infantry.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\hark_pallace.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\hark_tank.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\Harkonnen_lrg.gif; DestDir: {tmp}; Flags: dontcopy
Source: C:\harkonnen_nebula.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\hiliner.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\leachattack.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\mcv.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\ord_duster.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\ord_mortar.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\Ordos_lrg.gif; DestDir: {tmp}; Flags: dontcopy
Source: C:\planets.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\ring.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\runes.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\sardauk.JPG; DestDir: {tmp}; Flags: dontcopy
Source: C:\sector_map.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_01.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_02.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_03.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_04.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_05.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_06.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_07.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_08.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_09.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\shot_10.jpg; DestDir: {tmp}; Flags: dontcopy
Source: "C:\Westwood\Emperor\DATA\UI\MAPINFO.INI "; DestDir: "{app}\DATA\UI\"; Flags: ignoreversion
Source: "C:\humor_dp.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\bass.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\(AT07)Ride_the_Worm.mp3"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\Westwood\Emperor\LAUNCHER.TXT"; DestDir: "{tmp}"; Flags: ignoreversion
Source: "C:\Westwood\Emperor\EMPEROR.EXE"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Westwood\Emperor\README.TXT"; DestDir: "{tmp}"; Flags: ignoreversion
Source: "C:\Westwood\Emperor\setupreg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Westwood\Emperor\Emperor.rtf"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Westwood\Emperor\InfoAfter.rtf"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Westwood\Emperor\Icon Entry_1.ico"; DestDir: "{tmp}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[INI]
Filename: "{app}\EMPEROR.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.Westwood.com"
[Registry]
;Buka
Root: HKLM; Subkey: "Software\Westwood"; Flags: uninsdeletekey
[Icons]
Name: "{group}\EMPEROR"; Filename: "{app}\EMPEROR.EXE"; WorkingDir: "{app}";
Name: "{group}\PATCH"; Filename: "{app}\PATCH.DOC"; WorkingDir: "{app}"; Parameters: "TubeStartup.fuk USERINI=TubeUser.ini INI=TubePostal2.ini"
Name: "{group}\Удоление"; Filename: "{app}\unins000.exe"; WorkingDir: "{app}";
Name: "{group}\Удоление"; Filename: "{app}\unins000.exe"; WorkingDir: "{app}";
Name: "{group}\советы"; Filename: "{app}\Emperor.rtf"; WorkingDir: "{app}";
Name: "{group}\работа с MapEditor"; Filename: "{app}\InfoAfter.rtf"; WorkingDir: "{app}";
Name: "{userdesktop}\EMPEROR"; Filename: "{app}\EMPEROR.EXE"; Tasks: desktopicon; WorkingDir: "{app}"; Parameters: "TubeStartup.fuk USERINI=TubeUser.ini INI=TubePostal2.ini"
Name: "{userdesktop}\советы"; Filename: "{app}\Emperor.rtf"; Tasks: desktopicon; WorkingDir: "{app}"; Parameters: "TubeStartup.fuk USERINI=TubeUser.ini INI=TubePostal2.ini"
Name: "{userdesktop}\работа с MapEditor"; Filename: "{app}\InfoAfter.rtf"; Tasks: desktopicon; WorkingDir: "{app}"; Parameters: "TubeStartup.fuk USERINI=TubeUser.ini INI=TubePostal2.ini"
[Run]
Filename: "{app}\EMPEROR.EXE";Description: "Запустить Игру"; Flags: nowait postinstall skipifsilent
Filename: "{app}\setupreg.exe"; Parameters: "/q"; StatusMsg: "";Flags: waituntilterminated
[UninstallDelete]
Type: files; Name: "{app}\EMPEROR.url"
________________________________________________________________________________
___________-
Во время установки показуют картинки а их плохо видна иза огромной страницы с индикатором выполнения установки
пробовал так
________________________________________________________________________________
___________
procedure InitializeWizard();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
//Здесь смещение страницы установки (в верхний левый угол)
WizardForm.Left:=ScaleX(0);
WizardForm.Top:=ScaleY(0);
{Внимание! Нижеописанные способы смещения работают только когда вставлено фоновое изображение или WindowVisible=yes}
{Выводит в правом верхнем углу экрана}
//WizardForm.Left:=ScaleX(MainForm.Width-420);
//WizardForm.Top:=ScaleY(MainForm.Left+20);
________________________________________________________________________________
_________
нифига не выходит по человечиски Во время возврата страници на место, сушествует только 1\4
страницы икнопок ни какмх нет прихоца убивать процес а обычный юзор пади дагадается нажать три кнопки!!!
Чё делать ребята подскажите!!!
Сетапчик со скином у меня здоров сабака и изо него то инеработает Уменьшение страницы.
Я с этим уже баротся устал!!!
А всё равно хоца зделать красива!!!
Памагите кто чем может!!!
Я дам откомпелированый файл посмотрите вроде ничё но вот есть ета проблемма!!!
Вот добавь в секцию [Setup]После установки остаётся много мусора как собрать Униинсталяшку каторая б спрашивала пользователя удолить временные файлы ну и соответствена удаляла весь мусор!!!
[Setup]
;Означает создавать ли автоматический деинсталлятор. При значении "yes" он создается. При значении "no" автоматическое удаление будет невозможно, так что пользователь должен будет вручную удалять программу.
Uninstallable=yes
;Изменяет иконку на странице "Установка и удаление программ" в Панели управления
UninstallDisplayIcon={app}\ICONS\UnInstall.ico
;Место расположения деинсталлятора (по умолчанию значение - UninstallFilesDir={app})
UninstallFilesDir={app}\Uninstall
;Режим создания "лога" для деинсталлятора
UninstallLogMode=overwrite
Код:должен запускаться мастер инсталляции, а если ключ не существует, то должна вылетать мессага, что прога не найдена - жмите OK чтобы покинуть мастер (ну или другой текст). Вобщем вы программеры - для вас скриптик или только секцию кода написать не составит труда. Поможете такому как мне? Этакая комбинированная проверка. При инициализации проверяется присутствие определенного ключа, если его нету - выдается соответствующее сообщение и на этом действия прекращаются, если ключ присутствует, то появится сообщение об удачном обнаружении программы, также проверяется присутствие уже установленной программы, с предложением ее удалить. Вы можете проверять также присутствие определенного файла_(ов) в папке с программой, либо размер, исходя из значений реестра. Просто установите нижеописанные проверки на присутствие и размер, с указанием в качестве константы данные ResultStr. Код: function InitializeSetup(): Boolean; var ResultCode: Integer; s, ResultStr:string; Result:=True; begin Result:=True; If not RegKeyExists(HKLM, 'SOFTWARE\MY_PROGRAM') then begin MsgBox('Программа MY_PROGRAM не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok); Result:=False; end else begin MsgBox('Программа MY_PROGRAM успешно обнаружена.' #13#13 'Установка полностью автоматическая.', mbInformation, mb_Ok); begin If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My_Program_v1.0_is1', 'UninstallString', ResultStr) then begin If ResultStr<>'' then begin ResultStr:=RemoveQuotes(ResultStr); if MsgBox('Программа установки обнаружила уже установленную программу ранней версии.' #13#13 'Вы желаете предварительно удалить ее?', mbInformation, MB_YESNO) = idYes then if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK); end; end; end; end; end; Для: [b]Kindly[/b] Я как зелёный попробую помочь !!![quote][code]должен запускаться мастер инсталляции, а если ключ не существует, то должна вылетать мессага, что прога не найдена - жмите OK чтобы покинуть мастер (ну или другой текст). Вобщем вы программеры - для вас скриптик или только секцию кода написать не составит труда. Поможете такому как мне? Этакая комбинированная проверка. При инициализации проверяется присутствие определенного ключа, если его нету - выдается соответствующее сообщение и на этом действия прекращаются, если ключ присутствует, то появится сообщение об удачном обнаружении программы, также проверяется присутствие уже установленной программы, с предложением ее удалить. Вы можете проверять также присутствие определенного файла_(ов) в папке с программой, либо размер, исходя из значений реестра. Просто установите нижеописанные проверки на присутствие и размер, с указанием в качестве константы данные ResultStr. Код: function InitializeSetup(): Boolean; var ResultCode: Integer; s, ResultStr:string; Result:=True; begin Result:=True; If not RegKeyExists(HKLM, 'SOFTWARE\MY_PROGRAM') then begin MsgBox('Программа MY_PROGRAM не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok); Result:=False; end else begin MsgBox('Программа MY_PROGRAM успешно обнаружена.' #13#13 'Установка полностью автоматическая.', mbInformation, mb_Ok); begin If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My_Program_v1.0_is1', 'UninstallString', ResultStr) then begin If ResultStr<>'' then begin ResultStr:=RemoveQuotes(ResultStr); if MsgBox('Программа установки обнаружила уже установленную программу ранней версии.' #13#13 'Вы желаете предварительно удалить ее?', mbInformation, MB_YESNO) = idYes then if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK); end; end; end; end; end;
Обучение наступательной кибербезопасности в игровой форме. Начать игру!