Jump to content
Korean Random
EvilAlex

Создание инсталляторов для модпаков на базе Inno Setup

Recommended Posts

Подскажите,  как эти функции подключить, хотя бы, как папки mods и res_mods очищать перед установкой

 

3.png.dc0fdd55ac4a75ba092b86fa426064fd.png

Share this post


Link to post

Short link
Share on other sites

@liga1006 

#define ModDirVersion "1.4.1.0"

[Tasks]
Name: "taskDeleteCache"; Description: "Очистить кеш/логи"
Name: "taskDeleteMods"; Description: "Удалить установленные моды"

[InstallDelete]
Type: files; Name: "{app}\*.log"; Tasks: taskDeleteCache;
Type: files; Name: "{app}\*.bak"; Tasks: taskDeleteCache;
Type: files; Name: "{app}\*.cache"; Tasks: taskDeleteCache;
Type: files; Name: "{app}\*.killme"; Tasks: taskDeleteCache;
Type: files; Name: "{app}\*.grd"; Tasks: taskDeleteCache;
Type: files; Name: "{app}\client_service.xml"; Tasks: taskDeleteCache;
Type: files; Name: "{app}\hd_service.xml"; Tasks: taskDeleteCache;
Type: files; Name: "{app}\sd_service.xml"; Tasks: taskDeleteCache;
Type: files; Name: "{app}\WorldOfTanks_error_report_*.zip"; Tasks: taskDeleteCache;

[Code]
procedure DeleteMods();
begin
  if IsComponentSelected('taskDeleteMods') then
  begin
    DelTree(ExpandConstant('{app}\mods\*'), false, true, true);
    DelTree(ExpandConstant('{app}\res_mods\*'), false, true, true);
    CreateDir(ExpandConstant('{app}\mods\{#ModDirVersion}'));
    CreateDir(ExpandConstant('{app}\res_mods\{#ModDirVersion}'));
  end;
end;

procedure DeleteCache();
begin
  if IsComponentSelected('taskDeleteCache') then
  begin
    DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\account_caches'), true, true, true);
    DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\battle_results'), true, true, true);
    DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\clan_cache'), true, true, true);
    DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\custom_data'), true, true, true);
    DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\dossier_cache'), true, true, true);
    DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\messenger_cache'), true, true, true);
    DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\profile'), true, true, true);
    //DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\tutorial_cache'), true, true, true);
    DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\veh_cmp_cache'), true, true, true);
    DelTree(ExpandConstant('{userappdata}\Wargaming.net\WorldOfTanks\web_cache'), true, true, true);
    DelTree(ExpandConstant('{app}\logs'), true, true, true);
    DelTree(ExpandConstant('{app}\Reports'), true, true, true);
    DelTree(ExpandConstant('{app}\Reports_XFW'), true, true, true);
    DelTree(ExpandConstant('{app}\Updates'), true, true, true);
    DelTree(ExpandConstant('{app}\UpdatesData'), true, true, true);
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep=ssInstall then
  begin
    DeleteMods();
    DeleteCache();
  end;
end;

 

Самый простой бекап.

Edited by night_dragon_on
Обновление ...
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@night_dragon_on выкинуло ошибку, я в этом деле нуб, собираем рабочие моды 0.9.22.0.1 для китайского сервера, у них патч не 1.4.1.0, а 0.9.22.0.1, там подсадки живые и многие скалолазы переходят на китайский первый сервер

1.png

скрипт_2.iss

Share this post


Link to post

Short link
Share on other sites
2 минуты назад, liga1006 сказал:

выкинуло ошибку

 

Конечно, сами задачи то нужно создать перед их выполнением

[Tasks]
Name: "taskDeleteCache"; Description: "Очистить кеш/логи"
Name: "taskDeleteMods"; Description: "Удалить установленные моды"
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@night_dragon_on посмотрите пожалуйста весь файл, там опять ошибки вываливаются, я же говорю, что нуб и без вашей помощи не сделать, а мододелы не хотят сборки собирать для патча 0.9.22.0.1 вот и приходится как то самим кумекать

скрипт_2.iss

Share this post


Link to post

Short link
Share on other sites

@night_dragon_on спасибо вам,теперь всё работает, но осталась ещё одна проблема

Если до этого установил все моды, а в следующий раз я снимаю галочки и ставлю уже их меньше то вылетают вот такие окна, причём второе окно огромное и до кнопки ДАне добраться и приходится убивать процесс установки 

1.png

2.png

скрипт_2.iss

Edited by liga1006

Share this post


Link to post

Short link
Share on other sites

@liga1006 , смотри где у тебя вызывается соответствующий MsgBox и отключай его или меняй его отображение.

Share this post


Link to post

Short link
Share on other sites

Флаг на компоненты нужно накинуть:

Flags: disablenouninstallwarning;

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Дорогие форумчане, а так же: @AtotIK, @night_dragon_on
 

Уже с неделю делаю модпак, и вот возникла проблема. Хочу прикрутить (без ботвы) отображение картинки вблизи курсора (при выборе компонента), который не будет привязан к инсталлятору.

Нашел (на другом сайте) пример такого кода (прикреплю его ниже вместе с картинкой).

[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
    UNDEF_INDEX = -777;
    ALPHA_BLEND_LEVEL = 128; // max=Byte=255

    WS_EX_LAYERED = $80000;
    WS_EX_TRANSPARENT = $20;
    LWA_COLORKEY = 1;
    LWA_ALPHA = 2;
    GWL_EXSTYLE = (-20);


var
    InfoPic: TBitmapImage;
    LastIndex: Integer;
    TempPath: String;
    PicForm: TForm;


type
    COLORREF = DWORD;


function GetCursorPos(var lpPoint: TPoint): BOOL; external '[email protected] stdcall';
function SetLayeredWindowAttributes(Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; external '[email protected] stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function SetFocus(hWnd: HWND): HWND; external '[email protected] stdcall';


procedure ShowPicHint(const PicFilePath: String);
var
    pt: TPoint;
begin
    if not GetCursorPos(pt) then Exit;
    InfoPic.Bitmap.LoadFromFile(PicFilePath);
    try
        with PicForm do
        begin
            SetBounds(ScaleX(pt.x + 50), ScaleY(pt.y - InfoPic.Height), InfoPic.Width, InfoPic.Height);
            Show;
        end;
    finally
        SetFocus(WizardForm.Handle);
    end;
end;


procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
var
    UndefPic: String;
begin
    if Index = -1 then Exit;
    if Index = LastIndex then Exit;
    try
        case TNewCheckListBox(Sender).ItemCaption[Index] of
            'Half-Life 2': UndefPic := '404_preview.bmp';
            'Half-Life 2 Episode One': UndefPic := '404_preview.bmp';
            'Half-Life 2 Episode Two': UndefPic := '404_preview.bmp';
            'Portal': UndefPic := '404_preview.bmp';
        else
            begin
                LastIndex := UNDEF_INDEX;
                PicForm.Hide;
                Exit;
            end;
        end;
        if not FileExists(TempPath + UndefPic) then ExtractTemporaryFile(UndefPic);
        ShowPicHint(TempPath + UndefPic);
    finally
        LastIndex := Index;
    end;
end;


procedure CompOnMouseLeave(Sender: TObject);
begin
    PicForm.Hide;
    LastIndex := -1;
end;


procedure InitInfo();
begin
    WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove;
    WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
    TempPath := AddBackslash(ExpandConstant('{tmp}'));
    LastIndex := UNDEF_INDEX;
    PicForm := TForm.Create(WizardForm)
    with PicForm do
    begin
        BorderStyle := bsNone;
        FormStyle := fsStayOnTop;
        InfoPic := TBitmapImage.Create(PicForm)
        with InfoPic do
        begin
            Parent := PicForm;
            AutoSize := True;
        end;
    end;
    SetWindowLong(PicForm.Handle, GWL_EXSTYLE, GetWindowLong(PicForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
    SetLayeredWindowAttributes(PicForm.Handle, 0, ALPHA_BLEND_LEVEL, LWA_ALPHA);
end;


procedure InitializeWizard();
begin
    InitInfo();
end;


Вопросы:
1) Как пофиксить утечку памяти в данном скрипте?
Поясняю: При быстром перемещении курсора между компонентами (к которым привязана картинка) увеличивается нагрузка на проц.

Цитата

177235397_.jpg.c38bbe6157836f3164c01bc80cf9825c.jpg


2) Как убрать мерцание (я так полагаю он автообновляется при каждом выборе компонента).

images.rar

Edited by UI3

Share this post


Link to post

Short link
Share on other sites

@AtotIK благодарю помогло)))

А что делать в таком случае? где уже стоит Flags: exclusive

Цитата

Name: KMP\5; Description: 4. Заблокированный бронёй урон.; Flags: disablenouninstallwarning;
Name: KMP\21; Description: 5. Панель урона.; Flags: disablenouninstallwarning;
Name: KMP\13; Description: 6. Статус выполнения ЛБЗ в бою.; Flags: disablenouninstallwarning;
Name: KMP\27; Description: 1. Счётчик нанесённого урона.Минималистичный лог.; Flags: exclusive
Name: KMP\28; Description: 2. Счётчик нанесённого урона.Подробный лог.; Flags: exclusive

 

5.png

Edited by liga1006

Share this post


Link to post

Short link
Share on other sites
3 minutes ago, liga1006 said:

А что делать в таком случае? где уже стоит Flags: exclusive

Flags: exclusive disablenouninstallwarning;

 

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Добрый вечер, помогите переделать условие выполнения скрипта.
Именно, данный скрипт позволяет увеличивать окно инсталлятора, с учетом отступов, единственное что нужно поменять это значения "GrowWizard(ScaleX(100), ScaleY(80))";

 

Вопрос:

Как прописать условие, чтобы настройки которые мы изменяем в "GrowWizard" применялись НЕ ДЛЯ ВСЕГО инсталлятора, а ТОЛЬКО для определенной страницу (В моём случае это страница компонентов).

 

ПОМОГИТЕ изменить условия выполнения алгоритма. Как я полагаю за это отвечает секция "procedure GrowWizard".

 

P.S: Мне нужен данный скрипт, т.к он максимально кратко расписан, без лишних наворотов.

P.S.S: Если изменять WizardForm, то скрипт не понимает к какой именно странице обращается пользователь,  т.к нарушается последовательность обращения DeltaX и Y.

 

procedure ShiftDown(Control: TControl; DeltaY: Integer);
begin
  Control.Top := Control.Top + DeltaY;
end;

procedure ShiftRight(Control: TControl; DeltaX: Integer);
begin
  Control.Left := Control.Left + DeltaX;
end;

procedure ShiftDownAndRight(Control: TControl; DeltaX, DeltaY: Integer);
begin
  ShiftDown(Control, DeltaY);
  ShiftRight(Control, DeltaX);
end;

procedure GrowDown(Control: TControl; DeltaY: Integer);
begin
  Control.Height := Control.Height + DeltaY;
end;

procedure GrowRight(Control: TControl; DeltaX: Integer);
begin
  Control.Width := Control.Width + DeltaX;
end;

procedure GrowRightAndDown(Control: TControl; DeltaX, DeltaY: Integer);
begin
  GrowRight(Control, DeltaX);
  GrowDown(Control, DeltaY);
end;

procedure GrowRightAndShiftDown(Control: TControl; DeltaX, DeltaY: Integer);
begin
  GrowRight(Control, DeltaX);
  ShiftDown(Control, DeltaY);
end;

procedure GrowWizard(DeltaX, DeltaY: Integer);
begin
  GrowRightAndDown(WizardForm, DeltaX, DeltaY);

  with WizardForm do
  begin
    GrowRightAndShiftDown(Bevel, DeltaX, DeltaY);
    ShiftDownAndRight(CancelButton, DeltaX, DeltaY);
    ShiftDownAndRight(NextButton, DeltaX, DeltaY);
    ShiftDownAndRight(BackButton, DeltaX, DeltaY);
    GrowRightAndDown(OuterNotebook, DeltaX, DeltaY);
    GrowRight(BeveledLabel, DeltaX);

    { WelcomePage }
    GrowDown(WizardBitmapImage, DeltaY);
    GrowRight(WelcomeLabel2, DeltaX);
    GrowRight(WelcomeLabel1, DeltaX);

    { InnerPage }
    GrowRight(Bevel1, DeltaX);
    GrowRightAndDown(InnerNotebook, DeltaX, DeltaY);

    { LicensePage }
    ShiftDown(LicenseNotAcceptedRadio, DeltaY);
    ShiftDown(LicenseAcceptedRadio, DeltaY);
    GrowRightAndDown(LicenseMemo, DeltaX, DeltaY);
    GrowRight(LicenseLabel1, DeltaX);

    { SelectDirPage }
    GrowRightAndShiftDown(DiskSpaceLabel, DeltaX, DeltaY);
    ShiftRight(DirBrowseButton, DeltaX);
    GrowRight(DirEdit, DeltaX);
    GrowRight(SelectDirBrowseLabel, DeltaX);
    GrowRight(SelectDirLabel, DeltaX);

    { SelectComponentsPage }
    GrowRightAndShiftDown(ComponentsDiskSpaceLabel, DeltaX, DeltaY);
    GrowRightAndDown(ComponentsList, DeltaX, DeltaY);
    GrowRight(TypesCombo, DeltaX);
    GrowRight(SelectComponentsLabel, DeltaX);

    { SelectTasksPage }
    GrowRightAndDown(TasksList, DeltaX, DeltaY);
    GrowRight(SelectTasksLabel, DeltaX);

    { ReadyPage }
    GrowRightAndDown(ReadyMemo, DeltaX, DeltaY);
    GrowRight(ReadyLabel, DeltaX);

    { InstallingPage }
    GrowRight(FilenameLabel, DeltaX);
    GrowRight(StatusLabel, DeltaX);
    GrowRight(ProgressGauge, DeltaX);

    { MainPanel }
    GrowRight(MainPanel, DeltaX);
    ShiftRight(WizardSmallBitmapImage, DeltaX);
    GrowRight(PageDescriptionLabel, DeltaX);
    GrowRight(PageNameLabel, DeltaX);

    { FinishedPage }
    GrowDown(WizardBitmapImage2, DeltaY);
    GrowRight(RunList, DeltaX);
    GrowRight(FinishedLabel, DeltaX);
    GrowRight(FinishedHeadingLabel, DeltaX);
  end;
end;

procedure InitializeWizard();
begin
  GrowWizard(ScaleX(100), ScaleY(80));
end;

 

Share this post


Link to post

Short link
Share on other sites
3 hours ago, UI3 said:

P.S.S: Если изменять WizardForm, то скрипт не понимает к какой именно странице обращается пользователь,  т.к нарушается последовательность обращения DeltaX и Y.

Бессмыслица какая-то.

WizardForm - это ваше окно. Изменяя его размеры, страницы не затрагиваются.

 

3 hours ago, UI3 said:

Как прописать условие, чтобы настройки которые мы изменяем в "GrowWizard" применялись НЕ ДЛЯ ВСЕГО инсталлятора, а ТОЛЬКО для определенной страницу (В моём случае это страница компонентов).

Ну так оставьте в процедуре GrowWizard только операции с SelectComponentsPage (комментарии же есть).

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

можно ли сделать чтоб картинки формата пнг или джепег отображались в установщике при наведении?

а то .BMP весят каждая как мр3 (((

и можно ли как нибудь исправить такие жуткие подвисания установщика при выборе модов? (((

D Mod White v.5.2.exe

 

#include "Addons\botva2.iss"
#include "Addons\BASS_Module.iss"

[Code]                            
#ifdef UNICODE
  #define A "W"
#else
  #define A "A"
#endif

const
  UNDEF_INDEX = -777;
  ALPHA_BLEND_LEVEL = 255; // max=Byte=255
  WS_EX_LAYERED = $80000;
  WS_EX_TRANSPARENT = $20;
  LWA_COLORKEY = 1;
  LWA_ALPHA = 2;
  GWL_EXSTYLE = (-20);

var
  InfoPic: TBitmapImage;
  LastIndex: Integer;
  TempPath: String;
  PicForm: TForm;

type
  COLORREF = DWORD;

function GetCursorPos(var lpPoint: TPoint): BOOL; external '[email protected] stdcall';
function SetLayeredWindowAttributes(Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; external '[email protected] stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function SetFocus(hWnd: HWND): HWND; external '[email protected] stdcall';
function WOT_GetClientsCount(): Integer;
external 'WOT_GetClientsCount@files:FindWot.dll cdecl';
function WOT_GetClientBranch(ClientIndex: Integer): Integer;
external 'WOT_GetClientBranch@files:FindWot.dll cdecl';
procedure WOT_GetClientPathW(Buffer: String; BufferSize: Integer; ClientIndex: Integer);
external 'WOT_GetClientPathW@files:FindWot.dll cdecl';

function DefaultDirName(Param: String): String;
var
  ClientsCount, Index: Integer;
  FoundDir: String;
begin
  SetLength(FoundDir, 1024);
  ClientsCount:=WOT_GetClientsCount();
  if ClientsCount > 0 then
  begin
    for Index:=0 to ClientsCount-1 do
    begin
      if WOT_GetClientBranch(Index) = 1 then
        begin
          WOT_GetClientPathW(FoundDir, Length(FoundDir)-1, Index);
          Result:=ExpandConstant(FoundDir);
        end;
    end;
  end else
    Result:=ExpandConstant('{sd}\Games\World_of_Tanks');
end;

procedure ShowPicHint(const PicFilePath: String);
var
  pt: TPoint;
begin
  if not GetCursorPos(pt) then Exit;
  InfoPic.Bitmap.LoadFromFile(PicFilePath);
  try
    with PicForm do
    begin
      SetBounds(ScaleX(WizardForm.Left + 509), ScaleY(WizardForm.Top + 80), InfoPic.Width, InfoPic.Height);
      Show;
    end;
    finally
    SetFocus(WizardForm.Handle);
  end;
end;

procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
var
  UndefPic: String;
begin
  if Index = -1 then Exit;
  if Index = LastIndex then Exit;
  try
    case TNewCheckListBox(Sender).ItemCaption[Index] of
      '1.Командирская камера.': UndefPic := 'KK.bmp';
      '2.Винтик.': UndefPic := 'VNT.bmp';
      '3.Панель урона.': UndefPic := 'PY.bmp';
      '4.AutoEquip авто установка/снятие оборудования.': UndefPic := 'AO.bmp';
      '5.Калькулятор эффективности в бою.': UndefPic := 'KEB.bmp';
      '6.Таймер сведения орудия в бою.': UndefPic := 'TS.bmp';
      '7.Увеличенное время лампы засвета.': UndefPic := 'LZ.bmp';
      '8.Статистика за сессию YasenKrasen Vanilla.': UndefPic := 'SS.bmp';
      '9.Шанс на победу + хп команд.': UndefPic := 'SHP.bmp';
      '10.Рейтинг отметок на стволе.': UndefPic := 'ML.bmp';
      '11.Углы горизонтальной наводки.': UndefPic := 'YGN.bmp';
      '12.Радар.': UndefPic := 'TLS.bmp';
      '1.Гарпун мини + сведение Fatality.': UndefPic := 'PGM.bmp';
      '2.Прицел Taipan (мини) настройка Draug.': UndefPic := 'TS.bmp';
      '3.Прицел OverCross + сведение MeltyMaps.': UndefPic := 'OC.bmp';
      '4.Прицел Гарпун Lite.': UndefPic := 'PGL.bmp';
      '5.Улучшенный прицел J1mb0 мини.': UndefPic := 'PJ.bmp';
      '6.Прицел Ахиллес.': UndefPic := 'PAH.bmp';
      '7.Прицел минималистичный.': UndefPic := 'PMI.bmp';
      '1.Минималистичный лог.': UndefPic := 'ML.bmp';
      '2.Подробный лог.': UndefPic := 'PL.bmp';
      '1.Стволик хаоса.': UndefPic := 'SH.bmp';
      '2.Блокировка выстрела по союзникам и трупам.': UndefPic := 'BV.bmp';
      '3.Зум х30 старт х2 + улучшенная видимость.': UndefPic := 'YGN.bmp';
      '4.Пересадка экипажа.': UndefPic := 'AVE.bmp';
      '5.Направление стволов на миникарте.': UndefPic := 'NSM.bmp';
      '6.Калькулятор бронепробития.': UndefPic := 'KB.bmp';
      '7.Мульти клиент.': UndefPic := 'MK.bmp';
      '8.Отключение тумана.': UndefPic := 'OT.bmp';
      '9.Засвет в ушах.': UndefPic := 'ZY.bmp';
      '10.Места пассивного засвета (Spoter).': UndefPic := 'MZ.bmp';
      '11.ЛБЗ в бою.': UndefPic := 'LBZ.bmp';
      '12.Рейтинг игроков в бою.': UndefPic := 'RI.bmp';
      '13.Сумарный WN8 комманд (Ekspoint).': UndefPic := 'PPB.bmp';
      '14.ХП противников в ушах.': UndefPic := 'HP.bmp';
      '15.Информатор засвета.': UndefPic := 'IZ.bmp';
      '16.Информационная панель.': UndefPic := 'IP.bmp';
      '17.Маркер автоприцела.': UndefPic := 'IA.bmp';
      '18.Оповещения союзников о засвете.': UndefPic := 'OZ.bmp';
      '1.Свободное вращение камеры.': UndefPic := 'RK.bmp';
      '2.Полное отключение ручника.': UndefPic := 'RK.bmp';
        else
          begin
            LastIndex := UNDEF_INDEX;
            PicForm.Hide;
            Exit;
           end;
    end;
      if not FileExists(TempPath + UndefPic) then ExtractTemporaryFile(UndefPic);
      ShowPicHint(TempPath + UndefPic);
      finally
      LastIndex := Index;
  end;
end;

procedure CompOnMouseLeave(Sender: TObject);
begin
  PicForm.Hide;
  LastIndex := -1;
end;

procedure InitInfo();
begin
  WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove;
  WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
  TempPath := AddBackslash(ExpandConstant('{tmp}'));
  LastIndex := UNDEF_INDEX;
  PicForm := TForm.Create(WizardForm)
  with PicForm do
    begin
    BorderStyle := bsNone;
    FormStyle := fsStayOnTop;
    InfoPic := TBitmapImage.Create(PicForm)
    with InfoPic do
      begin
      Parent := PicForm;
      AutoSize := True;
      end;
    end;
  SetWindowLong(PicForm.Handle, GWL_EXSTYLE, GetWindowLong(PicForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  SetLayeredWindowAttributes(PicForm.Handle, 0, ALPHA_BLEND_LEVEL, LWA_ALPHA);
end;

procedure InitializeWizard1();
begin
  InitInfo();
end;

function NextButtonclick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then
begin
MsgBox('Не верно указана папка World of Tanks!', mbError, MB_OK);
Result := False;
end;
end;
end;

 

Share this post


Link to post

Short link
Share on other sites
3 hours ago, Draugd said:

можно ли сделать чтоб картинки формата пнг или джепег отображались в установщике при наведении?

Используйте модуль "botva2". Пример:

  1. Оформление событий: https://bitbucket.org/Kotyarko_O/kmp/src/a492ce0f6c2f552fe9ae624d555b04384f8318dd/Resourses/CheckListBoxSrc.iss#lines-94
  2. Привязка изображений: https://bitbucket.org/Kotyarko_O/kmp/src/master/ComponentsInfo.iss
3 hours ago, Draugd said:

и можно ли как нибудь исправить такие жуткие подвисания установщика при выборе модов?

Подозреваю, выводимые изображения сжаты (вероятно и зашифрованы).

Есть 2 выхода: используйте более лайтовое сжатие установщика вцелом; не сжимайте выводимые в процессе установки изображения (соответственно и не шифруйте).

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites
1 час назад, Kotyarko_O сказал:

Используйте модуль "botva2". Пример:

  1. Оформление событий: https://bitbucket.org/Kotyarko_O/kmp/src/a492ce0f6c2f552fe9ae624d555b04384f8318dd/Resourses/CheckListBoxSrc.iss#lines-94
  2. Привязка изображений: https://bitbucket.org/Kotyarko_O/kmp/src/master/ComponentsInfo.iss

Подозреваю, выводимые изображения сжаты (вероятно и зашифрованы).

Есть 2 выхода: используйте более лайтовое сжатие установщика вцелом; не сжимайте выводимые в процессе установки изображения (соответственно и не шифруйте).

спс за помощь, все супер!!! )))

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...