1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

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

Тема в разделе "Inno Setup", создана пользователем Edison007, 16 июн 2011.

Статус темы:
Закрыта.
  1. Пользователь

    Регистрация:
    26 дек 2011
    Сообщения:
    19
    Симпатии:
    37
    sergey3695, а проценты как считаются?
    Вроде эта процедура главная SetTaskBarProgressValue(Проценты)
    Я просто добавил в ISDone в функцию ProgressCallback вот это:
    SetTaskBarProgressValue(OveralPct div 10) и всё заработало
     
    Последнее редактирование: 22 фев 2012
  2. Старожил Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    пример http://rghost.ru/36652616
     
  3. Старожил Проверенный

    Регистрация:
    16 июн 2011
    Сообщения:
    219
    Симпатии:
    109
    Пол:
    Мужской
    Gnom
    Никто и не спорит. Я ничего плохого и не хотел сказать. Но впредь не нужно писать в моем сообщение,о том чего ты не понял. Хорошо, я высказал свое мнение. Если сделает и кому то это пригодится, то это будет хорошо.
    [MOD=Gnom]Просто не нужно думать, что если тебе не нужно, то и не кому не нужно.[/MOD]
     
    Последнее редактирование модератором: 22 фев 2012
  4. Пользователь

    Регистрация:
    22 фев 2012
    Сообщения:
    2
    Симпатии:
    0
    Добрый день ! Помогите пожалуйста ламеру. Собрал скрипт в 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}"

    Код (Text):

    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. Очень прошу не отсылать читать хелпы, статьи и тд. а реально помочь. Так же прошу меня сильно не пинать т.к. я в этом пока очень слабо разбираюсь.
     
  5. Старожил Проверенный

    Регистрация:
    1 июл 2011
    Сообщения:
    351
    Симпатии:
    188
    nazbek010, Простой пример:
    [source="iss"]
    Код (Text):

    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]
     
    Adil нравится это.
  6. Пользователь

    Регистрация:
    7 ноя 2011
    Сообщения:
    106
    Симпатии:
    10
    Народ, как сделать так что бы в определённый момент установки StatusLabel с одного менялся на другой.
    ВОТ:
     
  7. Старожил Проверенный

    Регистрация:
    1 июл 2011
    Сообщения:
    351
    Симпатии:
    188
    Лёха, Весь скрипт можно? Так будет легче понять, что к чему...
     
  8. Пользователь

    Регистрация:
    7 ноя 2011
    Сообщения:
    106
    Симпатии:
    10
    Вот
     
  9. Старожил Проверенный

    Регистрация:
    1 июл 2011
    Сообщения:
    351
    Симпатии:
    188
    Лёха
    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.: Думаю мысль понятна...
     
    Последнее редактирование: 22 фев 2012
    Лёха нравится это.
  10. Пользователь

    Регистрация:
    6 фев 2012
    Сообщения:
    33
    Симпатии:
    4
    Мужыки, дайте пожалуйста пример создания Radio Button для компонентов ISDone(по возможности в архиве)
     
  11. Пользователь

    Регистрация:
    15 июл 2011
    Сообщения:
    44
    Симпатии:
    5
    Пол:
    Мужской
    Как убрать иконку в левом вверхнем углу, но оставить кнопку сворачивания?
    Код (Text):
    procedure [B]InitializeWizard[/B]();
     begin
       WizardForm.BorderStyle := bsDialog;
     end;
     
    Последнее редактирование: 23 фев 2012
  12. Борода Модератор

    Регистрация:
    15 июн 2011
    Сообщения:
    723
    Симпатии:
    542
    Пол:
    Мужской
    BlackPhoenix, сам в свое время искал, насколько понял - это свойство самой длл-ки, которая этот плеер создает. посему - без вариантов, решения нет.

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

    Регистрация:
    1 июл 2011
    Сообщения:
    351
    Симпатии:
    188
    Kent, А просто секция [Components] не подойдет?
    Если подойдет, то вот мини-пример:
    [source="iss"]
    [Components]
    Name: Comp1; Description: Компонент 1; Flags: exclusive;
    Name: Comp2; Description: Компонент 2; Flags: exclusive;
    [/source]

    [source="iss"]
    Код (Text):

    //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...
     
    Последнее редактирование: 23 фев 2012
    Kent нравится это.
  14. Пользователь

    Регистрация:
    11 сен 2011
    Сообщения:
    13
    Симпатии:
    4
    Не много не стандартный вопрос. Интересует создание не установщика а только деинсталятора.
    Идея такая создать деинстолятор который считывает список файлов и папок из внешнего файла и удаляет их после должен удалить и себя и файл со списком. Вообще возможно такое.
     
  15. Пользователь

    Регистрация:
    22 фев 2012
    Сообщения:
    2
    Симпатии:
    0
    Gnom,

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

    Регистрация:
    6 фев 2012
    Сообщения:
    33
    Симпатии:
    4
    VinTagE, меня интерисует как накласть картинку на radio button
     
  17. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.320
    Симпатии:
    857
    Как сделать чтобы проценты удаления были поверх прогрессбара деинсталлятора? В исталляторе все ок, а с деинсталлятором загвоздка. Незнаю в чем проблема. Если не трудно, подправьте, что не так. :unknown:
    Код (Text):
    [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;
     
     
    Последнее редактирование: 24 фев 2012
  18. Борода Модератор

    Регистрация:
    15 июн 2011
    Сообщения:
    723
    Симпатии:
    542
    Пол:
    Мужской
    тут пример.
    Просто удаляй из пути подпапку Wow6432Node. ТОесть вместо HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\и так далее, нужно HKEY_LOCAL_MACHINE\SOFTWARE\и так далее.
    х32-х64 инно определяет сама, и в х64 автоматом подставит подпапку Wow6432Node в путь.
     
  19. Знаток Проверенный

    Регистрация:
    21 июн 2011
    Сообщения:
    80
    Симпатии:
    165
    никак, если только длл переписать

    стандартными методами не получится убрать только иконку
    в качестве извращения можно попробовать все скрыть как Gnom посоветовал и свои кнопки нарисовать, правда придется картинки для кнопок тащить с собой, так что действительно проще пустую иконку подставить в окно

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

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

Поделиться этой страницей