Собираем RuPack

Пишу по просьбе Veikko мануал по созданию RuPack-а Photo-Brush 5Что за программа...Mediachance Photo Brush -
  1. Оффлайн

    Автор темы

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2195

    Создано тем: 317

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3580

    Был: 2024-11-18 08:59

    Лайков: 202



    Пишу по просьбе Veikko мануал по созданию RuPack-а Photo-Brush 5

    Что за программа...

    Mediachance Photo Brush - многофункциональный графический редактор с функциями рисования картин и ретуширования цифровых фотографий. В Photo-Brush с помощью текстурных, артистических, натуральных или 3D кистей можно создать оригинальную картину. Есть также функция преобразования фотографий в картины.

    Что для этого надо:

    ISPack_5.3.9_Full_Unicode_FULL+Plugs-I-S
    Universal Extractor 1.6 или Inno Setup Unpacker v0.31


    Ну, вроде все есть, начнем…

    Правый клик по photobrush5.exe и выбираем программу для распаковки установщика



    Здесь выбираем Выделить все и жмем кнопочку Извлечь
    В Universal Extractor 1.6 ничего выбирать не надо, он сам все сделает.
    Важно – в первом случае имя файла сценария на русском, во втором на енг.



    Теперь у нас есть файлы сценария и файлы для установки. Для украшательства установщикаскачайте здесь с новой заставкой. Я опишу два метода с эффектами, но все по порядку. Запустите файл сценария. Его нужно перед компиляцией полечить. Будем работать с именем сценария install_script.iss. После копирования будет такой вид файлов.



    Делаем правый клик и выбираем Open with ISTool. Теперь начинаем искать ошибки.
    Для этого жмите кнопку Компиляции



    Вот и первая ошибка, нажмите кнопку Найти ошибку и указатель станет на этой беде.



    Это сжатие не поддерживается в Inno Setup, Нажмите кнопку Options и выберите нужное сжатие.



    Теперь запускаете опять компиляцию. И о чудо! Сборка произошла без ошибок и установщик готов! Но еще рано радоваться. Надо еще пошевелить ручками.
    Параметр OutputBaseFilename=photobrush5 – это выходное имя установщика, меняем как надо, например - OutputBaseFilename= Photo-Brush_5.30_RuPack by Viekko.
    Параметр LicenseFile=embeddedLicense.txt меняем на LicenseFile=embeddedLicense. rtf, тогда ваша лицензия будет в цвете. Теперь полечим запуск программы, это надо для того, чтобы не запускался без спроса пользователя. Нажмите кнопку Выполнить слева



    Теперь двойной клик по {app}PhotoBrush.exe или правый клик и выбрать Свойства
    Поставьте галки в чекбоксы как на скрине. Эти параметры надо ставить в любых собираемых программах. Да, везде есть контекстное меню. Наведите на чекбокс и читайте.



    Теперь остались Сообщения и Язык. Так как во всех программах они одинаковые, просто скопируйте внизу и вставьте в свой сценарий


    [CustomMessages]Russian.NameAndVersion=%1, версия %2
    Russian.AdditionalIcons=Дополнительные значки:
    Russian.CreateDesktopIcon=Создать значок на Рабочем столе
    Russian.CreateQuickLaunchIcon=Создать значок в Панели быстрого запуска
    Russian.ProgramOnTheWeb=Сайт %1 в Интернете
    Russian.UninstallProgram=Деинсталлировать %1
    Russian.LaunchProgram=Запустить %1
    Russian.AssocFileExtension=Связать %1 с файлами, имеющими расширение %2
    Russian.AssocingFileExtension=Связывание %1 с файлами %2...
    [Languages]; These files are stubs
    ; To achieve better results after recompilation, use the real language files
    Name: Russian; MessagesFile: compiler:LanguagesRussian.isl
    [Messages]BeveledLabel=Мой RuPack, никому не отдам...


    Будет вот так у вас в сценарии. Внизу, я думаю, знаете что писать.



    Для этой программы нужно еще внести изменения в реестр. Можно конечно просто сбросить его, но зачем огород городить…
    Нажмите слева функцию Реестр по чистому полю правый клик. Выберите функцию Импортировать из файла. Файл реестра в наличии - photobrush5.reg. После внесения данных в реестр сохраните проект.



    Запускайте компиляцию и можете насладиться своей работой! Я думаю, что вы не забыли поменять енг файлы на рус? Если забыли, то сделайте это! Теперь у вас рабочий сценарий, но давайте украсим установку. Вот это вставьте в разрыв между [Files] и [Registry]

    Source: embeddedlogo.bmp; Flags: dontcopy
    ; начальная заставка:
    Source: embeddedlogo.wav; Flags: dontcopy
    ; музон
    Source: embeddedWizModernImage-Is.bmp; Flags: dontcopy
    ; картинка слева:
    Source: filtersInnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
    Source: filterscallnsis.dll; Flags: dontcopy
    Source: filtersAdvSplash.dll; Flags: dontcopy
    Source: filterswaterctrl.dll; Flags: dontcopy
    ; эффекты
    [INI]Filename: {app}wylek.ru.url; Section: InternetShortcut; Key: URL; String: http://www.wylek.ru


    Вот как на скрине. Раздел  [INI]вставляем как тайный агент рекламы. После установки в папке с программой будет линк на наш сайт.



    Дальше, слева войдите в Код и вставьте это

    type
         TTimerProc = procedure(h:longword; msg:longword; idevent:longword; dwTime:longword);
    function WrapTimerProc(callback:TTimerProc; paramcount:integer):longword;
            external 'wrapcallback@files:innocallback.dll stdcall';
    function SetTimer(hWnd: longword; nIDEvent, uElapse: longword; lpTimerFunc: longword): longword;
            external 'SetTimer@user32.dll stdcall';
    function enablewater(ParentWnd: HWND; Left, Top: integer; Bmp: HBITMAP;
            WaterRadius, WaterHeight: integer): BOOL; external 'enablewater@files:waterctrl.dll stdcall';
    function waterblob(x, y: integer; radius, height: integer): BOOL; external 'waterblob@files:waterctrl.dll stdcall';
    function flattenwater(): BOOL; external 'flattenwater@files:waterctrl.dll stdcall';
    function disablewater(): BOOL; external 'disablewater@files:waterctrl.dll stdcall';
    function setwaterparent(ParentWnd: HWND): BOOL; external 'setwaterparent@files:waterctrl.dll stdcall';
    var
         bmp: TBitmap;
    procedure mytimerproc(h:longword; msg:longword; idevent:longword; dwTime:longword);
    begin
         waterblob(random(162), random(289), random(5), random(200));
    end;
    procedure InitializeWizard1();
    var
         timercallback: longword;
    begin
         ExtractTemporaryFile('WizModernImage-Is.bmp');
         bmp := TBitmap.create;
         bmp.LoadFromFile(ExpandConstant('{tmp}WizModernImage-Is.bmp'));
         enablewater(WizardForm.WelcomePage.Handle, 0, 0, bmp.Handle, 3, 50);
         timercallback := WrapTimerProc(@mytimerproc,4);
         settimer(0, 0, 200, timercallback);
    end;
    procedure CurPageChanged1(CurPageID: Integer);
    begin
         if CurPageID = wpWelcome then
         begin
           setwaterparent(WizardForm.WelcomePage.Handle);
    //    waterblob(70, 198, 10, 1000);
         end else
         if CurPageID = wpFinished then
         begin
           setwaterparent(WizardForm.FinishedPage.Handle);
    //    waterblob(70, 198, 10, 1000);
         end else
           flattenwater();
    end;
    procedure DeinitializeSetup1();
    begin
         disablewater();
         bmp.Free;
    end;
    function callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PAnsiChar): Integer;
    external 'callplug@files:callnsis.dll stdcall';
    procedure InitializeWizard2();
    var
         val: Integer;
    begin
         ExtractTemporaryFile('AdvSplash.dll');
         ExtractTemporaryFile('logo.bmp');
         ExtractTemporaryFile('logo.wav');
         val:=callplug(0,ExpandConstant('{tmp}AdvSplash.dll'),'show','2800','1400','1200','-1',ExpandConstant('{tmp}logo'),'','','','','');
    end;
    procedure InitializeWizard();
    begin
         InitializeWizard1();
         InitializeWizard2();
    end;
    procedure CurPageChanged(CurPageID: Integer);
    begin
         CurPageChanged1(CurPageID);
    end;
    procedure DeinitializeSetup();
    begin
         DeinitializeSetup1();
    end;


    Жмите кнопку Сохранить скрипт и закройте его. Кнопка вверху слева. Зайдите в папку embedded и сделайте себе лицензию – файл  License.rtf и графику. Прикол, но скрин должен выглядеть вот так



    Всё!!! Теперь запускайте сценарий и делайте компиляцию. Готовый установщик будет в папке Output

    При запуске будет выведена заставка и звук. Теперь второй эффект. Мы сделаем название нашей команды шапкой на окне установщика. Будет вот так.



    Для этого небольшие переделки. Вставьте как на скрине эту запись - #include "fairy.iss"



    Вот это вставьте в разрыв между [Files] и [Registry] – прежнее удалите

    Source: embeddedwylek.png; Flags: dontcopy
    [INI]Filename: {app}wylek.ru.url; Section: InternetShortcut; Key: URL; String: http://www.wylek.ru




    Нажмите слева функцию Код и удалите оттуда все. Скопируйте ниже код и вставьте туда.

    function GetSysColor(nIndex: Integer): DWORD; external 'GetSysColor@user32.dll stdcall';
    var
         GifFrameCount: Integer;
    function ColorToRGB(Color: TColor): Longint;
    begin
         if Color < 0 then
           Result := GetSysColor(Color and $000000FF)
         else
           Result := Color;
    end;
    procedure PlayListCallback(LastImgIndex: Integer);
    begin
    //  ShowFairyEx(0);
         AnimateFairy('(0-'+IntToStr(LastImgIndex)+')', nil);
    end;
    procedure InitializeWizard();
    var
         Btn: TNewButton;
         ImgFile: AnsiString;
         S: AnsiString;
         x, y: Integer;
         BAlpha, TransparentColor: Integer;
    begin
         InitFairy(WizardForm.Handle, 0, 30);
         ImgFile := 'wylek.png';
         ExtractTemporaryFile(ImgFile);
         x := (WizardForm.Width - 350) div 2; // Расположение изображения (горизонталь [X]). По умолчанию 275.
         y := -96;                            // Расположение изображения (Вертикаль [Y]). По умолчанию -96.
         BAlpha := 255;                       // Прозрачность изображения. По умолчанию 255.
         TransparentColor := ColorToRGB(clWhite);
         S := S + IntToStr(x) + '|' + IntToStr(y) + '|' + IntToStr(BAlpha) + '|' + IntToStr(TransparentColor) + '|' + ExpandConstant('{tmp}'+ImgFile);
         AddImgsToList(S, @PlayListCallback);
    end;
    procedure DeinitializeSetup();
    begin
         HideFairy;
         WizardForm.Hide;
         UninitFairy;
    end;


    Запускайте компиляцию и наслаждайтесь своей работой!
    Сообщение отредактировал 4 августа 2018 - 22:01

    25 апреля 2011 - 14:20 / #1
  2. Оффлайн

    Stalevar

    Звание: Эксперт

    Команда

    Сообщений: 488

    Создано тем: 85

    Рейтинг: 6

    Репа: (59|59|0)

    Баллы: 51

    Страна: не указана!

    Был: 2015-05-25 08:56

    Лайков: 22

    Геннадий Спасибо!!!!
    Тут нахрапом не возьмёшь, прочитал три раза, что то уложилось, что то не допер.
    Буду пробовать, иначе ничего не получится.

    Храни меня Господь от тех, кому я верю. Кому не верю - тех остерегусь я сам.

    25 апреля 2011 - 22:44 / #2
  3. Оффлайн

    Stalevar

    Звание: Эксперт

    Команда

    Сообщений: 488

    Создано тем: 85

    Рейтинг: 6

    Репа: (59|59|0)

    Баллы: 51

    Страна: не указана!

    Был: 2015-05-25 08:56

    Лайков: 22

    Inno Setup Unpacker у меня не распаковал, говорит мол не тот экзешник. Universal Extractor распаковал и выдал следующую картину.


    И ни одного скрипта установки. Захожу в папку data, там ещё папки


    Захожу в папку OFFLINE вижу море папок и только тут нахожу нужные мне файлы для замены, но каждый файл идёт в отдельной паке, к чему бы это? А мне нужно вкинуть вместо одного в папке 34, как быть или это не влияет?


    Ну вот заменил я файлы и всё на этом, нет скриптов, нет ничего, сижу курю, что делать дальше незнаю.
    Как это всё собрать до кучи, обратно в инсталлятор.
    Сообщение отредактировал 4 августа 2018 - 22:02

    Храни меня Господь от тех, кому я верю. Кому не верю - тех остерегусь я сам.

    25 апреля 2011 - 23:30 / #3
  4. Оффлайн

    Автор темы

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2195

    Создано тем: 317

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3580

    Был: 2024-11-18 08:59

    Лайков: 202

    Цитата: Stalevar
    Ну вот заменил я файлы и всё на этом, нет скриптов, нет ничего, сижу курю, что делать дальше незнаю.



    Кинь линк в личку

    я гляну что к чему
    Сообщение отредактировал 4 августа 2018 - 22:03

    25 апреля 2011 - 23:41 / #4
  5. Оффлайн

    Stalevar

    Звание: Эксперт

    Команда

    Сообщений: 488

    Создано тем: 85

    Рейтинг: 6

    Репа: (59|59|0)

    Баллы: 51

    Страна: не указана!

    Был: 2015-05-25 08:56

    Лайков: 22

    Спасибо Гена!!!
    Я тебе на Facebook скину, за одно и с днюхой поздравлю.

    Храни меня Господь от тех, кому я верю. Кому не верю - тех остерегусь я сам.

    25 апреля 2011 - 23:48 / #5
  6. Оффлайн

    Fiks

    Звание: Сталкер

    Участники

    Сообщений: 108

    Создано тем: 35

    Рейтинг: 3

    Репа: (15|15|0)

    Баллы: 96

    Страна: не указана!

    Был: 2013-05-27 13:45

    Лайков: 7

    WYLEK, с каждым днем все интереснее surprised будем изучать happy
    26 апреля 2011 - 05:15 / #6
  7. Оффлайн

    Автор темы

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2195

    Создано тем: 317

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3580

    Был: 2024-11-18 08:59

    Лайков: 202

    Цитата: Stalevar
    Inno Setup Unpacker у меня не распаковал, говорит мол не тот экзешник. Universal Extractor распаковал и выдал следующую картину.



    Я посмотрел, это не Inno Setup установщик.
    здесь надо другой подход. Надо прогу для отслеживания реестра и папок.
    Узнать куда закидает файлы и что в реестр.
    Лучше сделать на такое русификатор.
    Вечером посмотрю что до чего.
    Сообщение отредактировал 4 августа 2018 - 22:03

    26 апреля 2011 - 12:43 / #7
  8. Оффлайн

    Stealthmax

    Звание: Новичок

    Участники

    Сообщений: 30

    Создано тем: 0

    Рейтинг: 2

    Репа: 0

    Баллы: 51

    Был: 2019-02-06 19:58

    Inno Script Studio сразу ошибки подчеркивает, синтаксис вроде пашет норм. По сути неплохой продукт.
    8 июня 2013 - 03:45 / #8

Статистика форума, пользователей онлайн: 2 (за последние 20 минут)

Создано тем
1197
Всего сообщений
15762
Пользователей
18014
Новый участник
Markhabayev