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

Статус
В этой теме нельзя размещать новые ответы.

ShuToff

Новичок
sergey3695, а проценты как считаются?
Вроде эта процедура главная SetTaskBarProgressValue(Проценты)
Я просто добавил в ISDone в функцию ProgressCallback вот это:
SetTaskBarProgressValue(OveralPct div 10) и всё заработало
 
Последнее редактирование:

Winst@n

Участник
Проверенный
Gnom
Никто и не спорит. Я ничего плохого и не хотел сказать. Но впредь не нужно писать в моем сообщение,о том чего ты не понял. Хорошо, я высказал свое мнение. Если сделает и кому то это пригодится, то это будет хорошо.
[MOD=Gnom]Просто не нужно думать, что если тебе не нужно, то и не кому не нужно.[/MOD]
 
Последнее редактирование модератором:

BlackPhoenix

Мимокрокодил
Добрый день ! Помогите пожалуйста ламеру. Собрал скрипт в IS GameScript generator и не пойму как сделать так что-бы плеер был все время виден ? В IS GameScript generator не нашел такой опции. Там есть время отображения окошка с названием песни а по поводу плеера там только показать или нет, но при включении "Показывать Mp3 плеер" он все равно через какое то время исчезает. Просто он мне идеально подходит. Ведь там прогресс бар в правом нижнем углу. Мне и нужно что-бы экран был практически весь открыт. Если можно то объясните поподробнее вплоть до того что и после какой строки вставлять и чего где править.

[Setup]
SourceDir=.
OutputDir=Setup
AppName=The Book of Unwritten Tales
AppVerName=The Book of Unwritten Tales
AppVersion=The Book of Unwritten Tales
AppPublisher=HMN Interactive
AppCopyright=HMN Interactive
DefaultDirName={pf}\The Book of Unwritten Tales
DefaultGroupName=The Book of Unwritten Tales
AllowNoIcons=yes
InfoBeforeFile=D:\Картинки\Лицензия.rtf
OutputBaseFilename=setup
WizardImageFile=D:\Картинки\InstallLeft.bmp
WizardSmallImageFile=D:\Картинки\InstallCorner.bmp
SetupIconFile=C:\Program Files (x86)\The Book of Unwritten Tales\Book.ico
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/ultra
DiskSpanning=yes
DiskSliceSize=524288000
SlicesPerDisk=1

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

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

[Files]
Source: "D:\Картинки\1.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Картинки\10.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Картинки\2.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Картинки\3.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Картинки\4.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Картинки\5.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Картинки\6.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Картинки\7.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Картинки\8.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Картинки\9.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "bass.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "T:\The Book of Unwritten Tales\Soundtarck\OST-The_Book_Of_Unwritten_Tales-READNFO-2011-I_KnoW\20-abspann-ik.mp3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "T:\The Book of Unwritten Tales\Soundtarck\OST-The_Book_Of_Unwritten_Tales-READNFO-2011-I_KnoW\08-erzmagier_alastair-ik.mp3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "T:\The Book of Unwritten Tales\Soundtarck\OST-The_Book_Of_Unwritten_Tales-READNFO-2011-I_KnoW\10-das_lied_vom_tod-ik.mp3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "T:\The Book of Unwritten Tales\Soundtarck\OST-The_Book_Of_Unwritten_Tales-READNFO-2011-I_KnoW\12-unknown-ik.mp3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "T:\The Book of Unwritten Tales\Soundtarck\OST-The_Book_Of_Unwritten_Tales-READNFO-2011-I_KnoW\15-unknown-ik.mp3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "T:\The Book of Unwritten Tales\Soundtarck\OST-The_Book_Of_Unwritten_Tales-READNFO-2011-I_KnoW\16-ivo-ik.mp3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: C:\Users\SASHA\Desktop\Game.reg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: "C:\Program Files (x86)\The Book of Unwritten Tales\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: "{group}\The Book of Unwritten Tales"; Filename: "{app}\bout.exe"; WorkingDir: "{app}";
Name: "{userdesktop}\The Book of Unwritten Tales"; Filename: "{app}\bout.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{group}\{cm:UninstallProgram,The Book of Unwritten Tales}"; Filename: "{uninstallexe}"

[Run]
Description: "{cm:LaunchProgram, The Book of Unwritten Tales}"; Filename: "{app}\bout.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent unchecked
Filename: {win}\regedit.exe; Parameters: /s {tmp}\Game.reg; StatusMsg: "Вносим изменения в реестр ..."; Flags: waituntilterminated runasoriginaluser

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

Код:
const
Indent=25;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PAnsiChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
procedure ShowMP3Panel(hMainFrm:HWND;StartVolume:integer;DefMP3Dir,BASSDir,MLabel:PAnsiChar;IsShowMP3Info,IsBk gFrmVisible:boolean;ShowTimeMP3Info:integer;dBottom:integer);external 'ShowMP3Panel@files:isgsg.dll stdcall';
procedure KillMP3Panel;external 'KillMP3Panel@files:isgsg.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Game.reg');
ExtractTemporaryFile('20-abspann-ik.mp3');
ExtractTemporaryFile('08-erzmagier_alastair-ik.mp3');
ExtractTemporaryFile('10-das_lied_vom_tod-ik.mp3');
ExtractTemporaryFile('12-unknown-ik.mp3');
ExtractTemporaryFile('15-unknown-ik.mp3');
ExtractTemporaryFile('16-ivo-ik.mp3');
ExtractTemporaryFile('bass.dll');
Result:=True;
end;

procedure InitializeWizard;
begin
ShowMP3Panel(WizardForm.Handle,80,ExpandConstant('{tmp}'),ExpandConstant('{tmp}'),'Repack by BlackPhoenix',True,True,7000,Indent);
ssInitialize(GetWindowLong(MainForm.Handle,-8),10,False,1,$FF000000);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then begin
ExtractTemporaryFile('1.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\1.jpg');
ExtractTemporaryFile('2.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\2.jpg');
ExtractTemporaryFile('3.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\3.jpg');
ExtractTemporaryFile('4.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\4.jpg');
ExtractTemporaryFile('5.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\5.jpg');
ExtractTemporaryFile('6.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\6.jpg');
ExtractTemporaryFile('7.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\7.jpg');
ExtractTemporaryFile('8.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\8.jpg');
ExtractTemporaryFile('9.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\9.jpg');
ExtractTemporaryFile('10.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\10.jpg');
ssStartShow;
end;
if CurStep=ssPostInstall then ssStopShow;
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(GetSystemMetrics(0)-WizardForm.Width-Indent);
WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
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) or (CurPageID=wpInfoAfter) then begin
if WizardForm.Width<>502 then begin
WizardForm.Visible:=False;
WizardForm.Width:=ScaleX(502);
WizardForm.Height:=ScaleY(392);
WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
WizardForm.MainPanel.Visible:=True;
WizardForm.Bevel1.Visible:=True;
WizardForm.InnerNotebook.Left:=ScaleX(40);
WizardForm.InnerNotebook.Top:=ScaleY(72);
WizardForm.InnerNotebook.Width:=ScaleX(417);
WizardForm.Visible:=True;
end;
end;
end;

procedure DeinitializeSetup;
begin
KillMP3Panel;
ssDeInitialize;
end;[/spoiler]


P.S. Очень прошу не отсылать читать хелпы, статьи и тд. а реально помочь. Так же прошу меня сильно не пинать т.к. я в этом пока очень слабо разбираюсь.
 

GVS276

Старожил
Проверенный
nazbek010, Простой пример:
[source="iss"]
Код:
function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFileA@kernel32.dll stdcall'; 
 
procedure BackupFile(const Mydir,BackDir: string; MyFiles: array of String); 
var 
 i: Integer; 
 FindFiles: TFindRec; 
begin 
for i:=0 to GetArrayLength(MyFiles)-1 do begin 
if FindFirst(MyDir+MyFiles[i], FindFiles) then begin 
if not DirExists(BackDir) then CreateDir(BackDir); 
repeat MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name) until not FindNext(FindFiles); 
 FindClose(FindFiles); 
 RemoveDir(MyDir) 
end; 
end; 
end;

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
 BackupFile(ExpandConstant('{app}\CSS\Data\'), ExpandConstant('{app}\Backup\'),['Ts3.exe','CssFile.txt','*.precomp','*.bmp']); 
end; 
   
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 
begin 
if CurUninstallStep = usPostUninstall then begin 
 BackupFile(ExpandConstant('{app}\Backup\'), ExpandConstant('{app}\CSS\Data\'),['*']); 
end; 
end;
[/source]
 
  • Like
Реакции: Adil

Лёха

Участник
Народ, как сделать так что бы в определённый момент установки StatusLabel с одного менялся на другой.
ВОТ:
 

GVS276

Старожил
Проверенный
Лёха, Весь скрипт можно? Так будет легче понять, что к чему...
 

GVS276

Старожил
Проверенный
Лёха
1 Можно создать процедуру / функцию для вашей "Декодирование Звука" или "Упаковка файлов в архивы" там сменить сам CAPTION лэйбла на новый CPATION лаэбла (CAPTION = Текст). Вот мини-пример, я не знаю что и какие вы функции будете использовать но это лишь с ogg пример..:
[source="iss"]
procedure DecodeFileOgg_ISDone(OggFileExe, OggFormat, OggApp, OggTmp, DecodeCaption: AnsiString; Error: Boolean);
var
FindHandle1,ColFiles1,CurIndex1,tmp: integer;
InFilePath,OutFilePath,OutFileName: PAnsiChar;
begin
StatusLabel.Caption:= DecodeCaption;
FindHandle1:=ISFindFiles(0,OggFormat,ColFiles1);
Error:=false;
while not Error and ISPickFilename(FindHandle1,OggApp,CurIndex1,true) do begin
InFilePath:=ISGetName(0);
OutFilePath:=ISGetName(1);
OutFileName:=ISGetName(2);
Error:=not ISExec(0, 0, 0, OggFileExe, '"'+InFilePath+'" "'+OutFilePath+'"',OggTmp,OutFileName,false);
end;
ISFindFree(FindHandle1);
if Error then Exit;
end;

//Сама процедура использование:
//DecodeFileOgg_ISDone(ExpandConstant('{tmp}\oggdec.exe'), ExpandConstant('{app}\*.ogg'), ExpandConstant('{app}\'), ExpandConstant('{tmp}'), 'Декодирование Звука', ExecError);
//ExecError можно заменить на ISDoneError - но не нужно!
[/source]
P.S.: Добавь это в ISDone.iss - если нужно конечно...
P.S.S.: Думаю мысль понятна...
 
Последнее редактирование:

Kent

Новичок
Мужыки, дайте пожалуйста пример создания Radio Button для компонентов ISDone(по возможности в архиве)
 

AlexandR

Новичок
Как убрать иконку в левом вверхнем углу, но оставить кнопку сворачивания?
Код:
procedure [B]InitializeWizard[/B]();
 begin
   WizardForm.BorderStyle := bsDialog;
 end;
 
Последнее редактирование:

LexBell

Борода
Супер модератор
BlackPhoenix, сам в свое время искал, насколько понял - это свойство самой длл-ки, которая этот плеер создает. посему - без вариантов, решения нет.

WizardForm.BorderStyle := bsDialog;
это значение по умолчанию. Единственный способ убрать иконку окна выглядит так:
[SOURCE="iss"]procedure InitializeWizard();
begin
WizardForm.BorderIcons := [];
end;[/SOURCE]Но он скроет все кнопки, вместе с иконкой. вернуть назад кнопки, у меня не получилось. Поиски в интернете говорят, что это невозможно. Отсюда решение - в заголовок окна поместить пустую иконку, правда текст останется сдвинутым, на ширину иконки, и в инно, это иконка самого инсталла, так что иконка самого инсталла, станет похожа на иконку консоли.
 
Последнее редактирование:

GVS276

Старожил
Проверенный
Kent, А просто секция [Components] не подойдет?
Если подойдет, то вот мини-пример:
[source="iss"]
[Components]
Name: Comp1; Description: Компонент 1; Flags: exclusive;
Name: Comp2; Description: Компонент 2; Flags: exclusive;
[/source]

[source="iss"]
Код:
//procedure CurStepChanged(CurStep: TSetupStep);
//Вариант 1:
//if IsComponentSelected('Comp1') then
//if not IS7ZipExtract   ( 0, 0, ExpandConstant('{src}\Comp1.7z'), ExpandConstant('{app}'), false, '') then break;
//if IsComponentSelected('Comp2') then
//if not IS7ZipExtract   ( 0, 0, ExpandConstant('{src}\Comp2.7z'), ExpandConstant('{app}'), false, '') then break;

//Вариант 2:
//TmpValue:=1;
//if IsComponentSelected('Comp1') then Comps1:=Comps1+TmpValue;     //компонент 1
//TmpValue:=TmpValue*2;
//if IsComponentSelected('Comp2') then Comps1:=Comps1+TmpValue;     //компонент 2
//TmpValue:=TmpValue*2;
//if not IS7ZipExtract   ( 1, 0, ExpandConstant('{src}\Comp1.7z'), ExpandConstant('{app}'), false, '') then break;
//if not IS7ZipExtract   ( 2, 0, ExpandConstant('{src}\Comp2.7z'), ExpandConstant('{app}'), false, '') then break;
[/source]
[HR][/HR]
Пример с TRadioButton:
[source="iss"]
[Code]
var
 RadioButton1, RadioButton2: TRadioButton;

procedure InitializeWizard();
begin
 WizardForm.OuterNotebook.Hide;
 WizardForm.InnerNotebook.Hide;

 RadioButton1:= TRadioButton.Create(WizardForm);
 RadioButton1.SetBounds(10, 10, 200, 15);
 RadioButton1.Caption:= 'Компонент 1';
 RadioButton1.Parent:= WizardForm;
 RadioButton1.Checked:= True;

 RadioButton2:= TRadioButton.Create(WizardForm);
 RadioButton2.SetBounds(10, 25, 200, 15);
 RadioButton2.Caption:= 'Компонент 2';
 RadioButton2.Parent:= WizardForm;
 RadioButton2.Checked:= False;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
//if RadioButton1.Checked then
//if not IS7ZipExtract   ( 0, 0, ExpandConstant('{src}\Comp1.7z'), ExpandConstant('{app}'), false, '') then break;
//if RadioButton2.Checked then
//if not IS7ZipExtract   ( 0, 0, ExpandConstant('{src}\Comp2.7z'), ExpandConstant('{app}'), false, '') then break;
end;
[/source]
P.S.: Думаю намёк ясен... Эти примеры только для ISDone...
 
Последнее редактирование:
  • Like
Реакции: Kent

Stalkersof

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

BlackPhoenix

Мимокрокодил
Gnom,

Спасибо ! А не подскажите еще по поводу реестра. Просто у меня стоит Windows 7 x64, и у меня все игрушки пишутся вот в эту ветку реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\
И так как я добавляю реестр из reg - файла то будут ли эти игрушки после установки работать скажем на Win XP x32 или на Win 7 x32. Или надо добавлять в скрип какую то проверку на разрядность системы. Если надо то что и куда добавить. А главное, как ?
 

Kent

Новичок
VinTagE, меня интерисует как накласть картинку на radio button
 

sergey3695

Ветеран
Модератор
Как сделать чтобы проценты удаления были поверх прогрессбара деинсталлятора? В исталляторе все ок, а с деинсталлятором загвоздка. Незнаю в чем проблема. Если не трудно, подправьте, что не так. :unknown:
Код:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: Files\1.jpg; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system; 
Source: Files\botva2.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system; 
Source: Files\CallbackCtrl.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system; 
Source: Files\Button.png; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system; 
Source: Files\ProgressBackground.png; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system; 
Source: Files\ProgressImg.png; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system; 

[code\]
function ImgLoadBotvaU(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
function BtnCreateBotvaU(hParent :HWND; Left, Top, Width, Height :integer; FileName :PAnsiChar; ShadowWidth :integer; IsCheckBtn :boolean) :HWND; external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetPositionBotvaU(img :Longint; NewLeft, NewTop, NewWidth, NewHeight :integer); external 'ImgSetPosition@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetVisiblePartU(img:Longint; NewLeft, NewTop, NewWidth, NewHeight : integer); external 'ImgSetVisiblePart@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetTextBotvaU(h :HWND; Text :PAnsiChar); external 'BtnSetText@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFontU(h :HWND; Font :Cardinal); external 'BtnSetFont@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFontColorBotvaU(h :HWND; NormalFontColor, FocusedFontColor, PressedFontColor, DisabledFontColor :Cardinal); external 'BtnSetFontColor@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEnabledBotvaU(h :HWND; Value :boolean); external 'BtnSetEnabled@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChangesBotvaU(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdownBotvaU; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';

type
  TImgPBun = record Left, Top, Width, Height, MaxWidth: integer; img1,img2: Longint; end;
  TPBProc = function (h:hWnd;Msg,wParam,lParam:Longint):Longint;

function ImgPBCreateUn(hParent :HWND; bk, pb :ansistring; Left, Top, Width, Height :integer):TImgPBun;
begin
  Result.Left:=Left+1;
  Result.Top:=Top+1;
  Result.Width:=0;
  Result.Height:=Height-2;
  Result.MaxWidth:=Width-2;
if Length(pb)>0 then Result.img1:=ImgLoadBotvaU(hParent,pb,Result.Left,Result.Top,Result.Width,Result.Height,True,False) else Result.img1:=0;
if Length(bk)>0 then Result.img2:=ImgLoadBotvaU(hParent,bk,Left,Top,Width,Height,True,False) else Result.img2:=0;
end;

procedure ImgPBSetPositionUn(var PB :TImgPBun; Percent :Extended);
var
  NewWidth:integer;
begin
if PB.img1<>0 then begin
  NewWidth:=Round(PB.MaxWidth*Percent/100);
if PB.Width<>NewWidth then begin
  PB.Width:=NewWidth;
  ImgSetPositionBotvaU(PB.img1,PB.Left,PB.Top,PB.Width,PB.Height);
  ImgSetVisiblePartU(PB.img1,ScaleX(0),ScaleY(0),ScaleX(PB.Width),ScaleY(PB.Height));
end;
end;
end;

function InitializeUninstall: Boolean; 
begin 
  FileCopy(ExpandConstant('{app}\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), False);
  FileCopy(ExpandConstant('{app}\CallbackCtrl.dll'), ExpandConstant('{tmp}\CallbackCtrl.dll'), False);
  FileCopy(ExpandConstant('{app}\1.jpg'), ExpandConstant('{tmp}\1.jpg'), False);
  FileCopy(ExpandConstant('{app}\ProgressBackground.png'), ExpandConstant('{tmp}\ProgressBackground.png'), False);
  FileCopy(ExpandConstant('{app}\ProgressImg.png'), ExpandConstant('{tmp}\ProgressImg.png'), False);
  FileCopy(ExpandConstant('{app}\Button.png'), ExpandConstant('{tmp}\Button.png'), False);
  Result:=True; 
end; 

var
  UnLabelPct: Tlabel;   
  UninstPB: TImgPBun;
  UninstPBOldProc:Longint;
  hCancelUninstBtn: HWND;
  WFButtonUninstFont: TFont;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
function CallBackProc(P:TPBProc;ParamCount:integer):LongWord; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';

function UninstPBProc(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
  pr,i1,i2:Extended;
  p:string;
begin
if Msg=$2 then SetWindowLong(h,-4,UninstPBOldProc);
  Result:=CallWindowProc(UninstPBOldProc,h,Msg,wParam,lParam);
if (Msg=$402) and (UninstallProgressForm.ProgressBar.Position>UninstallProgressForm.ProgressBar.Min) then begin
  i1:=UninstallProgressForm.ProgressBar.Position-UninstallProgressForm.ProgressBar.Min;
  i2:=UninstallProgressForm.ProgressBar.Max-UninstallProgressForm.ProgressBar.Min;
  pr:=(i1*100)/i2;
  p:=+Format('%f',[pr])+'%';
  UnLabelPct.Caption:=p;
  StringChange(p,',','.');
  ImgPBSetPositionUn(UninstPB,pr);
  ImgApplyChangesBotvaU(UninstallProgressForm.Handle);
end;
end;

procedure InitializeUninstallProgressForm(); 
begin 
with UninstallProgressForm do begin
  Bevel.Hide;
  InnerNotebook.Hide;
  OuterNotebook.Hide;
  ClientWidth := ScaleX(497);
  ClientHeight := ScaleY(368);
  BorderStyle := bsSingle;
end;
  UnLabelPct := TLabel.Create(UninstallProgressForm);
  with UnLabelPct do begin
    Parent := UninstallProgressForm;
    SetBounds(ScaleX(207),ScaleY(117),ScaleX(80),ScaleY(20));
    AutoSize:=True;
    Alignment := taCenter;
    Transparent := True;
    Font.Name:='Tahoma';
    Font.Size:= 8;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
  end;

  ImgLoadBotvaU(UninstallProgressForm.Handle,ExpandConstant('{tmp}\1.jpg'),0,0,UninstallProgressForm.ClientWidth,UninstallProgressForm.ClientHeight,True,True);

  WFButtonUninstFont:=TFont.Create;

  UninstallProgressForm.CancelButton.Visible:=False;
with UninstallProgressForm.CancelButton do begin
  hCancelUninstBtn:=BtnCreateBotvaU(UninstallProgressForm.Handle,371,322,110,39,ExpandConstant('{tmp}\button.png'),18,False);
  BtnSetTextBotvaU(hCancelUninstBtn, UninstallProgressForm.CancelButton.Caption);
  BtnSetFontU(hCancelUninstBtn,WFButtonUninstFont.Handle);
  BtnSetFontColorBotvaU(hCancelUninstBtn,$ffffff,$000000,$ffffff,$B6B6B6);
  BtnSetEnabledBotvaU(hCancelUninstBtn,False);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usUninstall then begin
  UninstallProgressForm.ProgressBar.Visible:=False;
  UninstPB:=ImgPBCreateUn(UninstallProgressForm.Handle,ExpandConstant('{tmp}\ProgressBackground.png'),ExpandConstant('{tmp}\ProgressImg.png'),ScaleX(38), ScaleY(114), UninstallProgressForm.ProgressBar.Width, ScaleY(20));
  ImgApplyChangesBotvaU(UninstallProgressForm.Handle);
  UninstPBOldProc:=SetWindowLong(UninstallProgressForm.ProgressBar.Handle,-4,CallBackProc(@UninstPBProc,4));
end;
end;

procedure DeinitializeUninstall;
begin
  gdipShutdownBotvaU;
end;
 
Последнее редактирование:

LexBell

Борода
Супер модератор
меня интерисует как накласть картинку на radio button
тут пример.
все игрушки пишутся вот в эту ветку реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\
Просто удаляй из пути подпапку Wow6432Node. ТОесть вместо HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\и так далее, нужно HKEY_LOCAL_MACHINE\SOFTWARE\и так далее.
х32-х64 инно определяет сама, и в х64 автоматом подставит подпапку Wow6432Node в путь.
 

South

Знаток
Проверенный
Собрал скрипт в IS GameScript generator и не пойму как сделать так что-бы плеер был все время виден ?
никак, если только длл переписать

Как убрать иконку в левом вверхнем углу, но оставить кнопку сворачивания?
Единственный способ убрать иконку окна выглядит так:
procedure InitializeWizard();
begin
WizardForm.BorderIcons := [];
end;
Но он скроет все кнопки, вместе с иконкой. вернуть назад кнопки, у меня не получилось.
стандартными методами не получится убрать только иконку
в качестве извращения можно попробовать все скрыть как Gnom посоветовал и свои кнопки нарисовать, правда придется картинки для кнопок тащить с собой, так что действительно проще пустую иконку подставить в окно

и в инно, это иконка самого инсталла, так что иконка самого инсталла, станет похожа на иконку консоли.
не совсем так. если под пустой иконкой подразумевать файл .ico, 32-бит, полностью прозрачный, то такую иконку можно сунуть в заголовок окна, при этом иконка самого приложения не поменяется. т.е. иконку меняем только у WizardForm. ну и еще останется системная менюшка
 

murlakatamenka

Новичок
Хочу сделать красивый splash для Mass Effect 3, что-то похожее можно было видеть концовках трейлеров Mass Effect 2: сначала плавно появляется надпись Mass Effect, потом цифра 2, потом всё вместе исчезает.
Делаю через callnsis + advsplash.
>>но в этом случае сначала появляется и исчезает "Mass Effect", а потом появляется и исчезает "3", что логично, т.к. 2-ая процедура callplug вызывается после завершения первой. а надо чтобы обе процедуры вызывались одновременно (времена в параметрах процедур именно для этого и подобраны). как быть?
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху