Jump to content
Korean Random
EvilAlex

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

Recommended Posts

Привет друзья
Я должен объединить два сценария "inno setup": один со звуком компонента, другой с предварительным просмотром компонента. Могут ли эти два сценария быть объединены ??? Я верю, что могу найти помощь здесь.
С уважением, Дадил

MyProgram :

MyProgram.zip

Share this post


Link to post

Short link
Share on other sites

Одна хорошая новость ..... Наконец, мне удалось получить еще одну комбинацию предварительного просмотра и звука, пометив компонент (нажав на компонент).

Было бы лучше поместить мышь над компонентом = начать воспроизведение.
Отодвиньте мышь = конец воспроизведения.

Тем не менее, я также рад за эту возможность.
Я дам вам рабочий скрипт для скачивания.
Может быть, кто-то рад за нее ......

preview+sound click for component !!!!.iss

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

здравствуйте а можно заменить иконку ноты милодии 29af985ffe78.jpg заменить на другую ad9d51d3367d.jpg

#define USE_BASS


[Files]
#ifdef USE_BASS
Source: {#Way}\bass.dll; flags: dontcopy;
#endif


[Code]

const
  LB_ITEMFROMPOINT  = $01A9;
#ifdef UNICODE
  #define A "W"
  #define Phrase "#$266B"
#else
  #define A "A"
  #define Phrase "'(пример)'"
#endif

type
  TComponentSound = record
    SoundName: String;
    Index: Integer;
  end;
  HSTREAM = Longword;

var
  iSound: array of TComponentSound;
  sndCompOldProc: TNotifyEvent;
#ifdef USE_BASS
  BASS_Handle: HWND;
#endif

function GetCursorPos(var lpPoint: TPoint): BOOL; external 'GetCursorPos@user32.dll stdcall';
function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints: TPoint; cPoints: UINT): Integer; external 'MapWindowPoints@user32.dll stdcall';
#ifdef USE_BASS
  function BASS_Init(device: LongInt; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
  function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset1, offset2, length1, length2: DWORD; flags: DWORD): HSTREAM; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
  function BASS_StreamFree(handle: HSTREAM): BOOL; external 'BASS_StreamFree@files:BASS.dll stdcall delayload';
  function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
  function BASS_Start(): Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
  function BASS_Stop(): Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
  function BASS_Free(): Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
#else
  function sndPlaySound(lpszSoundName: String; fuSound: UINT): BOOL; external 'sndPlaySound{#A}@winmm.dll stdcall';
#endif

#ifdef USE_BASS
procedure bassPlaySound(Filename: AnsiString);
begin
  if (BASS_Handle <> -1) then begin
    BASS_Stop();
    BASS_StreamFree(BASS_Handle);
    BASS_Handle:= -1;
  end;
  BASS_Handle:= BASS_StreamCreateFile(false, PAnsiChar(Filename), 0, 0, 0, 0, 0);
  BASS_Start();
  BASS_ChannelPlay(BASS_Handle, false);
end;
#endif

procedure PlaySound(Sender: TObject);
var
  i, f, lParam, ids: Integer;
  p: TPoint;
  s: String;
  box: TNewCheckListBox;
begin
  box:= TNewCheckListBox(Sender);

  GetCursorPos(p);
  MapWindowPoints(0, box.Handle, p, 1);

  lParam:= p.x or (p.y shl 16);
  i:= SendMessage(WizardForm.ComponentsList.Handle, LB_ITEMFROMPOINT, 0, lParam);
  if ((i shr 16) = 1) or ((i and $FFFF) < 0) then Exit;
  i:= i and $FFFF;

  if (i < 0) or (i >= box.Items.Count) then Exit;

  ids:= i;
  f:= -1;
  for i:= 0 to GetArrayLength(iSound)-1 do begin
    if (ids = iSound[i].Index) then begin
      f:= i;
      Break;
    end;
  end;

  if (f < 0) then Exit;

  s:= box.ItemCaption[ids];
  if (Pos({#Phrase}, s) <= 0) then Exit;

  if FileExists(iSound[f].SoundName) then
#ifdef USE_BASS
    bassPlaySound(iSound[f].SoundName);
#else
    sndPlaySound(iSound[f].SoundName, 0);
#endif

  if (sndCompOldProc <> nil) then
    sndCompOldProc(Sender);
end;

procedure AddItemSound(AIndex: Integer; AFilename: String);
var
  i: Integer;
begin
  i:= GetArrayLength(iSound);
  SetArrayLength(iSound, i+1);
  iSound[i].Index:= AIndex-1;
  iSound[i].SoundName:= ExpandConstant(AFilename);
  WizardForm.ComponentsList.ItemCaption[AIndex-1]:= WizardForm.ComponentsList.ItemCaption[AIndex-1] + ' '+{#Phrase};
end;

procedure InitializeWizard10();
begin
#ifdef USE_BASS
  BASS_Init(-1, 44100, 0, 0, 0);
  BASS_Start();
  BASS_Handle:= -1;
#endif

  WizardForm.ComponentsList.Width := ScaleX(483);
  WizardForm.ComponentsList.Height := ScaleY(270);

  sndCompOldProc:= WizardForm.ComponentsList.OnClick;
  WizardForm.ComponentsList.OnClick:= @PlaySound;


  ExtractTemporaryFile('Озвучка Фрагов в бою.mp3');
  AddItemSound(2, '{tmp}\Озвучка Фрагов в бою.mp3');
end;

#ifdef USE_BASS
procedure DeinitializeSetup();
begin
  BASS_Stop();
  BASS_Free();
end;
#endif

 

 

Edited by hevi

Share this post


Link to post

Short link
Share on other sites
03.04.2019 в 15:13, Draugd сказал:

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

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

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

D Mod White v.5.2.exe 24 MB · 6 скачиваний

 


#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 'GetCursorPos@user32.dll stdcall';
function SetLayeredWindowAttributes(Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll 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 'SetFocus@user32.dll 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;

 

Попробуй вот это

Desktop.rar

Edited by hevi

Share this post


Link to post

Short link
Share on other sites

Привет друзья
Мне нужен совет о том, как центрировать увеличенное окно инсталлятора Inno.

Заранее спасибо ...
И я желаю вам здоровья и благополучия.

 

PREVIEW.jpg

Share this post


Link to post

Short link
Share on other sites
5 minutes ago, Dadil said:

Мне нужен совет о том, как центрировать увеличенное окно инсталлятора Inno.

Для расширенной версии компилятора:

WizardForm.Center();

Для стандартной:

WizardForm.Position := poDesktopCenter;

 

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites
2 hours ago, Kotyarko_O said:

Для расширенной версии компилятора:


Для стандартной:


 

Спасибо большое....

Теперь все хорошо
Хороший совет больше, чем золото ...

Храни вас бог .....

Share this post


Link to post

Short link
Share on other sites

Доброго времени суток.

Может кому то пригодится  настройка регулятора в 30 процентов звука изначальна с ползунком   bass.zip

 

151725278_bandicam2019-07-0901-10-49-904.jpg.e682d34e12c7f089af95a4cfb80e8d24.jpg

Edited by P.S.Enot
  • Upvote 1
  • Downvote 1

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.

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.

×