Jump to content
Korean Random
EvilAlex

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

Recommended Posts

@odesskin, ошибка говорит, что у вас была процедура InitializeWizard. Последние две строки из моего примера скопируйте и вставьте в уже имеющуюся процедуру. А ту, которую вставляли (опять-таки, из моего примера выше) - удалите.

Спасибо огромное, разобрался!

Share this post


Link to post

Short link
Share on other sites

Уважаемые, очередной вопрос по шрифту.

WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline];

Это мы его сделали жирным и с подчеркиванием (первая строка в данном примере). А как ему цвет сменить? Пытался прикрутить нечто подобное:

WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline, clMaroon];

но на последнюю константу ругается. Может кто умный чего подсказать? Что я не так делаю?

Share this post


Link to post

Short link
Share on other sites

Уважаемые, очередной вопрос по шрифту.

WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline];

Это мы его сделали жирным и с подчеркиванием (первая строка в данном примере). А как ему цвет сменить? Пытался прикрутить нечто подобное:

WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline, clMaroon];

но на последнюю константу ругается. Может кто умный чего подсказать? Что я не так делаю?

 

fsXXX это константы для свойств шрифта FontStyle,

а clYYY это константы цвета шрифта, там свойство другое должно быть подозреваю FontColor

Share this post


Link to post

Short link
Share on other sites

fsXXX это константы для свойств шрифта FontStyle,

а clYYY это константы цвета шрифта, там свойство другое должно быть подозреваю FontColor

WizardForm.ComponentsList.ItemFontColor[0] := [clGrayText];

пишет, что не может идентифицировать FontColor

Это я уже пробовал :-)

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@ventura69, цвет нельзя менять

Мдэ... Печально. Спасибо. Значит пойдем другим путем, как обещал своей маме величайший махинатор. :ok:

Edited by ventura69

Share this post


Link to post

Short link
Share on other sites

Добрый день, уважаемые знатоки  :ok:

Сварганил себе очень ценную програмулю для работы (с вашей помощью). По долгу службы приходится работать с огромным количеством документации, от которой в глазах рябит (модели, чертежи, развертки, изменения, дополнения и пр.). Функции данного инсталятора (установщика): выдрать нужную документацию (при наведении на строку выводится картинка детали) и разложить по нужным папкам для дальнейшей работы с ними. Жизнь облегчилась сразу весьма солидно! Запихал в него порядка 300мБ инфы, на выходе получился шустрый файлик в 6,4 мБ.

Знатоки, гляньте, какие комментарии? Где мог накосячить или есть лучшее решение?

Прилагаю сам скриптик. Естественно не весь (выдрал сами ресурсы, чтобы не выводилась на экран портянка...

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Мультипродукт"
#define MyAppVersion "1.5"
#define MyAppPublisher "ХХХ"
#define MyAppURL "http://www.ХХХ.ru/"

[setup]
WizardImageFile=Files\fonstola.ru-81854.bmp
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{ХХХХХХ-174F-4677-AB73-3C3980F5299A}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=c:\Заказ\{#MyAppName}
SetupIconFile=Files\wot_ico.ico
//====={ Лицензия }=====\\
LicenseFile=licensia.txt
//===={ Отключение диалога }====\\
DirExistsWarning=no
//===={ Не создавать запись в меню Установка и удаление программ Панели управления }==== \\
CreateUninstallRegKey=no
//===={ Не создавать унинстал }====\\
Uninstallable=no
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=Мультипродукт
//====={ Отключение последней страницы}====\\
DisableFinishedPage=yes
;Compression=lzma
;SolidCompression=yes
//====={ Сжатие сетапа }=====\\
InternalCompressLevel=ultra64
Compression=lzma2/ultra64
SolidCompression=true

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

//====={ Сюда прописываем те файлы и папки которые закинул в Mods }=====\\
[Types]
Name: custom; Description: Full installation; Flags: iscustom

[Components]
//Стойка 1\\
Name: KMP; Description: Стойка; Types: custom; Flags: fixed
Name: KMP\DV; Description: 1. Декор верхний; Flags: checkablealone ;
// Здесь много - много буковков и позиций........................


//Стойка 2\\
Name: KMN; Description: Вторая стойка; Types: custom; Flags: fixed
Name: KMN\DG; Description: 1. Декорпанель гидромодуля; Flags: checkablealone ;
// Здесь много - много буковков и позиций........................


//Гидромодуль\\
Name: KMG; Description: Гидромодуль; Types: custom; Flags: fixed
Name: KMG\GO; Description: 1. Основание гидромодуля; Flags: checkablealone ;
// Здесь много - много буковков и позиций........................


//Блок электроники\\
Name: KME; Description: Блок электроники; Types: custom; Flags: fixed
Name: KME\EB; Description: 1. Корпус блока электроники; Flags: checkablealone ;
// Здесь много - много буковков и позиций........................



[Files]
;{ ISFormDesignerFilesBegin } // Не удалять эту строку!
;// Не изменять эту секцию. Она создана автоматически.
DestName: "WizardForm.BitmapImage1.bmp"; Source: "Files\logo.bmp"; Flags: dontcopy solidbreak
;// Не изменять эту секцию. Она создана автоматически.
;{ ISFormDesignerFilesEnd } // Не удалять эту строку!

//Картинки\\
Source: c:\Мультипродуктовые\files\01 декор верхний.bmp; Flags: dontcopy noencryption noencryption
// Здесь ооооочень много - много буковков и позиций........................




//Стойка 1\\
Source: "MODS\ 01 декор верхний\*"; DestDir: "{app}\Стойка 1"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\DV;
// Здесь много - много буковков и позиций........................

//Стойка 2\\
Source: "MODS\Декорпанель гидромодуля\*"; DestDir: "{app}\Стойка 2"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMN\DG;
// Здесь много - много буковков и позиций........................


//Гидромодуль\\
Source: "MODS\01.001-02 фундрама без пуклевки\*"; DestDir: "{app}\Гидромодуль"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMG\GO;
// Здесь много - много буковков и позиций........................


//Блок электроники\\
Source: "MODS\03.15 корпус блока электроники\*"; DestDir: "{app}\Блок электроники\Корпус блока электроники"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KME\EB;
// Здесь много - много буковков и позиций........................

[Run]
Filename: "{app}"; Flags: nowait shellexec skipifsilent


{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.

var
BitmapImage1: TBitmapImage;
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', '{#MyAppURL}', '' , '', SW_SHOW, ewNoWait, ResCode)
end;
procedure CompOnMouseLeave(Sender: TObject); forward;


procedure RedesignWizardForm;
begin
{ BitmapImage1 }
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Parent := WizardForm;
Left := ScaleX(0);
Top := ScaleY(320);
Width := ScaleX(233);
Height := ScaleY(41);
Cursor := crHand;
ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));
OnClick := @LogoOnClick;
end;

WizardForm.WizardBitmapImage.Width := ScaleX(497);
WizardForm.WizardBitmapImage.Height := ScaleY(312);

WizardForm.WelcomeLabel2.Enabled := False;
WizardForm.WelcomeLabel2.Height := ScaleY(0);

WizardForm.WelcomeLabel1.Enabled := False;
WizardForm.WelcomeLabel1Height := ScaleY(0);

WizardForm.WizardBitmapImage2.Width := ScaleX(500);

WizardForm.RunList.Height := ScaleY(0);

WizardForm.NoRadio.Height := ScaleY(0);

WizardForm.YesRadio.Height := ScaleY(0);

WizardForm.FinishedLabel.Enabled := False;
WizardForm.FinishedLabel.Width := ScaleX(0);
WizardForm.FinishedLabel.Height := ScaleY(0);

WizardForm.FinishedHeadingLabel.Enabled := False;
WizardForm.FinishedHeadingLabel.Height := ScaleY(0);

{ ReservationBegin }
// Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!

#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 MyDirName(S:String): String;
var
InsPath: String;
er: boolean;
myFile:String;
begin

WizardForm.WizardBitmapImage.Width := ScaleX(502);

WizardForm.WelcomeLabel2.Visible := False;

WizardForm.WelcomeLabel1.Visible := False;

WizardForm.WizardSmallBitmapImage.Left := ScaleX(0);
WizardForm.WizardSmallBitmapImage.Width := ScaleX(502);
WizardForm.WizardSmallBitmapImage.Height := ScaleY(70);

WizardForm.PageDescriptionLabel.Visible := False;

WizardForm.PageNameLabel.Visible := False;

WizardForm.WizardBitmapImage2.Width := ScaleX(502);

WizardForm.FinishedLabel.Visible := False;

WizardForm.FinishedHeadingLabel.Visible := False;
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(pt.x + 16), ScaleY(pt.y + 7), 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 := '01 декор верхний.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
WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[41] := [fsBold, fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[71] := [fsBold, fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[99] := [fsBold, fsUnderline];
RedesignWizardForm;
InitInfo();
end;

[iSFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030102804000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F202010C544269746D6170496D6167650C4269746D6170496D61676531044C656674020003546F7003400105576964746803E90006486569676874022906437572736F72070B637248616E64506F696E740A4269746D617046696C65060E46696C65735C6C6F676F2E626D70074F6E436C69636B0710436F6D704F6E4D6F7573654C656176650000F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544269746D6170496D6167651157697A6172644269746D6170496D61676505576964746803F101064865696768740338010D4578706C69636974576964746803F1010E4578706C696369744865696768740338010000F10E544E6577537461746963546578740D57656C636F6D654C6162656C3206486569676874020007456E61626C6564080E4578706C6963697448656967687402000000F10E544E6577537461746963546578740D57656C636F6D654C6162656C3106486569676874020007456E61626C6564080E4578706C696369744865696768740200000000F110544E65774E6F7465626F6F6B506167650C46696E6973686564506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544269746D6170496D6167651257697A6172644269746D6170496D6167653205576964746803F4010D4578706C69636974576964746803F4010000F110544E6577436865636B4C697374426F780752756E4C6973740648656967687402000E4578706C6963697448656967687402000000F10F544E6577526164696F427574746F6E074E6F526164696F0648656967687402000E4578706C6963697448656967687402000000F10F544E6577526164696F427574746F6E08596573526164696F0648656967687402000E4578706C6963697448656967687402000000F10E544E6577537461746963546578740D46696E69736865644C6162656C055769647468020006486569676874020007456E61626C6564080D4578706C69636974576964746802000E4578706C6963697448656967687402000000F10E544E6577537461746963546578741446696E697368656448656164696E674C6162656C06486569676874020007456E61626C6564080E4578706C6963697448656967687402000000000000
 

 

Если кому пригодится какой кусок из кода - буду весьма рад!

Персональная ОГРОМНЕЙШАЯ благодарность Kotyarko_O и StranikS_Scan за помощь, комментарии и кучу толковых подсказок!!!

Edited by ventura69

Share this post


Link to post

Short link
Share on other sites

@ventura69, вот такое:

with WizardForm.FinishedHeadingLabel do
begin
Enabled := False;
Height := ScaleY(0);
end;

 

with WizardForm.WizardBitmapImage do
begin
Width := ScaleX(502);
end;

 

with WizardForm.WelcomeLabel2 do
begin
Visible := False;
end;

 

with WizardForm.WelcomeLabel1 do
begin
Visible := False;
end;

 

with WizardForm.WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Width := ScaleX(502);
Height := ScaleY(70);
end;

 

with WizardForm.PageDescriptionLabel do
begin
Visible := False;
end;

 

with WizardForm.PageNameLabel do
begin
Visible := False;
end;

 

with WizardForm.WizardBitmapImage2 do
begin
Width := ScaleX(502);
end;

 

with WizardForm.FinishedLabel do
begin
Visible := False;
end;

 

with WizardForm.FinishedHeadingLabel do
begin
Visible := False;
end;
end;

 Лучше (а главное - экономнее) будет прописать так:

procedure InitializeWizard();
begin
WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[41] := [fsBold, fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[71] := [fsBold, fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[99] := [fsBold, fsUnderline];

//

WizardForm.FinishedLabel.Visible:=False;

WizardForm.FinishedHeadingLabel.Visible:=False;

WizardForm.WizardBitmapImage.Width:=502;

WizardForm.WelcomeLabel1.Visible:=False;

WizardForm.WelcomeLabel2.Visible:=False;

WizardForm.WizardSmallBitmapImage.Width:=502;

WizardForm.WizardSmallBitmapImage.Height:=70;

WizardForm.WizardSmallBitmapImage.Left:=0;

WizardForm.PageDescriptionLabel.Visible:=False;

WizardForm.PageNameLabel.Visible:=False;

WizardForm.WizardBitmapImage2.Width:=502;

WizardForm.FinishedLabel.Visible:=False;

WizardForm.FinishedHeadingLabel.Visible:=False;

//.. и так далее..

RedesignWizardForm;
InitInfo();
end;

Так можно прописать всё подобное. Действительно меньше места будет занимать.

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

Парни вот что я наковырял может как можно всё это упростить или сделать лучше.

Скачать архив весит 18.9 МБ с рисунками и музыкой.

Share this post


Link to post

Short link
Share on other sites

 

 

сделать лучше

MP3 - в топку! OGG Vorbis обеспечивает более лучшее качество звучания, при меньшем весе.

bass.dll оправьте вслед за MP3, так как OGG Vorbis можно воспроизводить более лёгкими библиотеками.

.bmp лучше заменить .png - на качество не повлияет, но вес снизится значительно.

world of tanks песня mp3 скачать бесплатно и без регистрации на Muzofon.com Качай бесплатно любую музыку в формате mp3 и слушай онлайн..MP3 - вы серьёзно?

Share this post


Link to post

Short link
Share on other sites

 

 

world of tanks песня mp3 скачать бесплатно и без регистрации на Muzofon.com Качай бесплатно любую музыку в формате mp3 и слушай онлайн..MP3 - вы серьёзно?
тоже улыбнуло)

Share this post


Link to post

Short link
Share on other sites

[member='Ventura6

Так можно прописать всё подобное. Действительно меньше места будет занимать.

Угу. Понял. Я не трогал эти строки - их создавал в редакторе форм. Ну и кое что правил, так как по умолчанию лезли лишние окошки и на отключение не хотели реагировать. Пришлось размер делать 0.

Плохой я видать ученик: Вы мне уже указывали на это, а я тупанул и не попробовал применить Ваши слова на практике... Спасибо за науку! В понедельник на работе буду править. По Вашему действительно красивее и короче.

Может еще подскажете (я пока не разобрался): Run - выполняется в конце инсталлятора, но до закрытия оного. А как запустить процесс вместе (и параллельно) с запуском инсталлятора? К примеру: запустили инстал и пошло проигрывание музыки/открытие текстового файла/запуск приложения, не имеющего расширения .exe и пр.

P. S. В предыдущем посте подкорректировал строки в соответствии с Вашим комментарием. Правда, появилось еще несколько вопросов по некоторым другим строкам, но это попробую сам проработать и разобраться  :ok:

Edited by ventura69

Share this post


Link to post

Short link
Share on other sites
Может еще подскажете (я пока не разобрался): Run - выполняется в конце инсталлятора, но до закрытия оного. А как запустить процесс вместе (и параллельно) с запуском инсталлятора? К примеру: запустили инстал и пошло проигрывание музыки/открытие текстового файла/запуск приложения, не имеющего расширения .exe и пр.

Здесь нужно сделать кое-что подобное:

[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=(*ID*) then
 begin
.....
.....
end;

где: (*ID*) - это название страницы, переходя на которую, инсталл будет выполнять какое-то действие.

'Вот список ID всех страниц (по названиям интуитивно понятно, что за что отвечает. На крайняк есть гугл-транслейт)):'

wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

 

А какое именно действие тебе нужно сюда впиндюхать?

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

 

 

А какое именно действие тебе нужно сюда впиндюхать?

Если честно: пока не знаю. Просто интересно. Как запускать по окончании установки понял, а как перед началом - не понял. Для общего развития.

Или вот: при запуске инсталятора запускать mp3 Вивальди-Времена года (под него думается хорошо). А процесс выбора у меня может тянуться долго...

Share this post


Link to post

Short link
Share on other sites

 

 

Как запускать по окончании установки понял, а как перед началом - не понял.
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpWelcome then
 begin
.....
.....
end;

 

 

при запуске инсталятора запускать mp3 Вивальди-Времена года (под него думается хорошо).
Тут бросали скрипт, с подключенной библиотекой проигрывания *.mp3.

Share this post


Link to post

Short link
Share on other sites
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpWelcome then
 begin
.....
.....
end;
Тут бросали скрипт, с подключенной библиотекой проигрывания *.mp3.

 

Дадада! Именно его сейчас и изучаю. Спасибо!

Share this post


Link to post

Short link
Share on other sites

Разобрался, как запускается музыка в скрипте из поста от Ckaym. В данном виде, как он выложен, скрипт не работает.

Нашел одну ошибку в нем: тип PChar (он не поддерживается прогой) надо заменить на тип PAnsiChar. И тогда он начинает работать.


Тут бросали скрипт, с подключенной библиотекой проигрывания *.mp3.

Вот такая штука получилась в результате для запуска музыки при старте инсталлятора. Гляньте, уважаемый. Комментарии и корректировки будут? :ok:

//подключаем ресурсы и библиотеки\\

[Files]
Source: "bass.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "innocallback.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "Music.MP3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

 

//задаем процедуры, переменные и константы\\
type
HSTREAM=DWORD;
TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
const
Indent=25;
var
MP3List:TStringList;
CurrentMP3:integer;
hMP3:HWND;
TimerID:LongWord;

//создаем функции\\
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT; external '[email protected] stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PAnsiChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

 

//ну, и сам код запуска музыки\\
procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
if BASS_ChannelIsActive(hMP3)=0 then begin
BASS_Stop;
BASS_StreamFree(hMP3);
hMP3:=BASS_StreamCreateFile(False,PAnsiChar(MP3List.Strings[CurrentMP3]),0,0,0);
BASS_Start;
if hMP3<>0 then
if BASS_ChannelPlay(hMP3,True) then begin
CurrentMP3:=CurrentMP3+1;
if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
end;
end;
end;
function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Music.MP3');
MP3List:=TStringList.Create;
MP3List.Add(ExpandConstant('{tmp}')+'\Music.MP3');
CurrentMP3:=0;
Result:=True;
end;
procedure InitializeWizard;
begin
TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
BASS_Init(-1,44100,0,0,0);
BASS_SetConfig(5,100);
BASS_SetConfig(6,100);
end;
procedure DeinitializeSetup;
begin
BASS_Stop;
BASS_Free;
MP3List.Free;
end;

Edited by ventura69
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

Вот такая штука получилась в результате для запуска музыки при старте инсталлятора. Гляньте, уважаемый. Комментарии и корректировки будут? :ok:
Внешне всё норм)

Share this post


Link to post

Short link
Share on other sites

Внешне всё норм)

Да оно еще и работает, только у меня уже отпала охота засовывать mp3 в установщик: слишком он пухнет от него. Понял принцип, разобрался что к чему, оно и ладно - мне и этого хватит  :ok:

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...