Ru-Board.club
← Вернуться в раздел «Программы»

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

Автор: ZONE51
Дата сообщения: 29.05.2008 16:05
Народ скажите пожалуйста как сделать вложенную инсталляцию? То есть запускаю инсталл своей проги,но по ходу инсталляции в автоматическом режиме должны установиться еще пару прог из своих инсталляционных пакетов(которые скачаны и не мои) как это сделать? Я не имею ввиду читобы инсталляции ниче не спрашивали это я уже сам. Как это хотя бы сделать? Спасибо большое
Автор: Genri
Дата сообщения: 29.05.2008 16:37
antifire -- тогда function Ord(C: Char): Byte;

procedure ReadFromFile();
var
FS: TFileStream;
str: string;
i: integer;
begin
str:= StringOfChar(' ',1);
FS := TFileStream.Create(ExpandConstant('{src}\struct.dat'), fmOpenReadWrite);
try
FS.Seek(21,soFromBeginning);
FS.ReadBuffer(str, 1);
i:= Ord(str[1]);
MsgBox(IntToStr(i), mbInformation, MB_OK);
finally
FS.Free;
end;
end;

Автор: Vitalliano
Дата сообщения: 29.05.2008 19:07
Sampron

Если можеш помогите еще. Мне необходимо устранить еще одну проблему, которая указана на картинке снизу.

У меня это ссобщение как {cm:LaunchGame} в CustomMessages

Автор: Genri
Дата сообщения: 29.05.2008 19:08
ZONE51 -- если секция [Run] по каким-либо причинам не устраивает, можно использовать функцию Exec. Описание и пример есть в хелпе.
Автор: Sampron
Дата сообщения: 29.05.2008 19:17
Vitalliano
WizardForm.RunList.Left:=WizardForm.WizardBitmapImage2.Width + 10
Автор: Vitalliano
Дата сообщения: 29.05.2008 19:38
Sampron

Благодарю!
Автор: antifire
Дата сообщения: 30.05.2008 10:01
Genri

Отлично!!! Все работает как надо!!! Огромное спасибо!!!
Автор: kserg1983
Дата сообщения: 30.05.2008 14:37
Здравствуйте, с Inno Setup работаю очень мало, поэтому возникла трудность: нужно где нибудь по ходу установки задать конфигурацию настроек приложения из нескольких параметров и потом запихнуть их в xml файл настроек. Заранее благодарен за ответы, советы...
Автор: SotM
Дата сообщения: 30.05.2008 15:22
kserg1983
Лучше тебе по форуму поискать. Что-то подобное уже обсуждалось, вот [more=пример]

Код:
procedure InitializeWizard();
var
rootNode, subNode, xmlParser, Fragment: Variant;
begin
xmlParser := CreateOleObject('MSXML2.DOMDocument');
//'Создание объявления XML
xmlParser.appendChild(xmlParser.createProcessingInstruction('xml', 'version="1.0" encoding="windows-1251"'));
//'Создание комментария
xmlParser.appendChild(xmlParser.createComment('Текст комментария'));
//'Создание корневого элемента
rootNode:= xmlParser.appendChild(xmlParser.createElement('ROOT'));

//'Создание первого вложенного элемента
subNode:= rootNode.appendChild(xmlParser.createElement('SUB'));
subNode.text:= 'Текст первого вложенного элемента';

//'Создание второго вложенного элемента
subNode:= rootNode.appendChild(xmlParser.createElement('SUB'));
//'Создание раздела CDATA
subNode.appendChild(xmlParser.createCDATASection('<<< >>> &&& Произвольные текстовые данные'));
//'Создание ссылки на примитив
subNode.appendChild(xmlParser.createEntityReference('amp'));
//'Создание текстового узла
subNode.appendChild(xmlParser.createTextNode('Текст второго вложенного элемента'));

//'Создание третьего вложенного элемента с использованием пространства имён
subNode:= rootNode.appendChild(xmlParser.createNode(1, 'html:H1', 'http://www.w3c.org/TR/REC-html40/'));
subNode.text:= 'Заголовок HTML';

//'Создание четвёртого и пятого вложенных элементов с использованием фрагмента
Fragment:= xmlParser.createDocumentFragment;
Fragment.appendChild(xmlParser.createElement('SUB'));
Fragment.appendChild(xmlParser.createElement('SUB'));
rootNode.appendChild(Fragment);

xmlParser.save('C:\Test.xml')
end;
Автор: kserg1983
Дата сообщения: 30.05.2008 17:42
SotM, спасибо за ссылку, буду пробовать, должно помочь.
Автор: Kutsenko
Дата сообщения: 30.05.2008 19:44
Увидел в одной игре такую фишку что авторан и инстал это был один и тотже файл, но как это сделать к сожалению незнаю, помогите. + Помогите через INNO Setup сделать такой авторан как и на картинке (хотябы основное только - пару кнопок и разместить картинку, а остальное я сам отредактирую). Размер авторана 590 на 390, размер картинки 220 на 340. Заранее спасибо.

А также забыл дописать чтобы была проверка реестра. Если будет ключ то тогда уже небудет кнопки "Установка", а будет кнопка "Играть" - (и соответственно будет запускать ехе файл игры), и ниже чтобы появлялась кнопка "Удалить".
Автор: braunberg
Дата сообщения: 31.05.2008 06:06
Kutsenko
А как ты собираешься из Inno авторан сделать, если по-нормальному?
Если хочешь сделать инсталлятор - сделай его в Inno, хочешь сделать авторан - сделай авторан.
Можно (если я тебя правильно понял, и ты действительно хочешь использовать IS) попробовать разбить это на две части: первая собственно - инсталлятор, и вторая - авторан. То есть, сначала делаешь авторан с кнопкой "Играть", которая и будет запускать .exe игры, и другими нужными тебе кнопками, картинками и скинами. А потом доводишь свой инсталлятор с кнопкой "Установить", до полного визуального сходства с автораном, изменяя стандартный размер

procedure InitializeWizard();
begin
WizardForm.Height := WizardForm.Height + H; // H = увеличение стандартной высоты на cтолько-то пикселей
WizardForm.Width := WizardForm.Width + W; // W = увеличение стандартной ширины на cтолько-то пикселей
end;

,убирая лишние страницы, выравниваешь все как тебе нужно, с помощью библиотеки ISSkin.dll ставишь нужный скин, такой как на авторане. В итоге все воспримется как один файл установки/запуска.
Автор: Kutsenko
Дата сообщения: 31.05.2008 08:37
braunberg
В кратце то я понял как это сделать, но к сожалению знаний на такое нехватает, а скрипт не помешал бы. Кто может помочь - отзовитесь.
Автор: Raf_SE
Дата сообщения: 31.05.2008 22:37
Ктонить может переделать код так, чтобы слайдшу было не по центру, а растянутым на весь экран?

[more]
[Code]
type TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var Form : TSetupForm;
BackImage, SlideImage: TBitmapImage;
TimerID: LongWord;
S : String;
Width, Height:Integer;


function WrapTimerProc(callback:TProc; 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 KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';


function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
begin
Result:=(Position-Min)/((Max - Min)/100)
end
end;


procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);

var Percent: Integer;

begin
Percent:= PercentProgress;
with SlideImage do
begin
if ((percent>0) and (percent<4) and (Tag<>1)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd1.bmp')
Tag:=1
end
else
if ((percent>5) and (percent<8) and (Tag<>2)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd2.bmp')
Tag:=2
end
else
if ((percent>9) and (percent<13) and (Tag<>3)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd3.bmp')
Tag:=3
end
else
if ((percent>14) and (percent<18) and (Tag<>4)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd4.bmp')
Tag:=4
end
else
if ((percent>19) and (percent<23) and (Tag<>5)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd5.bmp')
Tag:=5
end
else
if ((percent>24) and (percent<28) and (Tag<>6)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd6.bmp')
Tag:=6
end
else
if ((percent>32) and (percent<36) and (Tag<>7)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd7.bmp')
Tag:=7
end
else
if ((percent>37) and (percent<41) and (Tag<>8)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd8.bmp')
Tag:=8
end
else
if ((percent>42) and (percent<46) and (Tag<>9)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd9.bmp')
Tag:=9
end
else
if ((percent>47) and (percent<51) and (Tag<>10)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd10.bmp')
Tag:=10
end
else
if ((percent>52) and (percent<56) and (Tag<>11)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd11.bmp')
Tag:=11
end
else
if ((percent>57) and (percent<61) and (Tag<>12)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd12.bmp')
Tag:=12
end
else
if ((percent>62) and (percent<66) and (Tag<>13)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd13.bmp')
Tag:=13
end
else
if ((percent>67) and (percent<71) and (Tag<>14)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd14.bmp')
Tag:=14
end
else
if ((percent>72) and (percent<76) and (Tag<>15)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd15.bmp')
Tag:=15
end
else
if ((percent>77) and (percent<81) and (Tag<>16)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd16.bmp')
Tag:=16
end
else
if ((percent>82) and (percent<86) and (Tag<>17)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd17.bmp')
Tag:=17
end
else
if ((percent>87) and (percent<91) and (Tag<>18)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd18.bmp')
Tag:=18
end
else
if ((percent>92) and (percent<96) and (Tag<>19)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd19.bmp')
Tag:=19
end
else
if ((percent>97) and (percent<100) and (Tag<>20)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd20.bmp')
Tag:=20
end
end
end;


procedure InitializeWizard();
begin
WizardForm.Position:= poScreenCenter;
Width:= GetSystemMetrics(0);
Height:= GetSystemMetrics(1);
MainForm.BorderStyle:= bsNone;
MainForm.Left:= 0;
MainForm.Top:= 0;
MainForm.Width:= Width;
MainForm.Height:= Height;

ExtractTemporaryFile('1.bmp');
S:= (ExpandConstant('{tmp}')+'\1.bmp');

BackImage:=TBitmapImage.Create(MainForm);
BackImage.Bitmap.LoadFromFile(S);
BackImage.Align:= alClient;
BackImage.Parent:= MainForm;
BackImage.Stretch:= True;
MainForm.Visible:= True;

ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('bbrd1.bmp');
ExtractTemporaryFile('bbrd2.bmp');
ExtractTemporaryFile('bbrd3.bmp');
ExtractTemporaryFile('bbrd4.bmp');
ExtractTemporaryFile('bbrd5.bmp');
ExtractTemporaryFile('bbrd6.bmp');
ExtractTemporaryFile('bbrd7.bmp');
ExtractTemporaryFile('bbrd8.bmp');
ExtractTemporaryFile('bbrd9.bmp');
ExtractTemporaryFile('bbrd10.bmp');
ExtractTemporaryFile('bbrd11.bmp');
ExtractTemporaryFile('bbrd12.bmp');
ExtractTemporaryFile('bbrd13.bmp');
ExtractTemporaryFile('bbrd14.bmp');
ExtractTemporaryFile('bbrd15.bmp');
ExtractTemporaryFile('bbrd16.bmp');
ExtractTemporaryFile('bbrd17.bmp');
ExtractTemporaryFile('bbrd18.bmp');
ExtractTemporaryFile('bbrd19.bmp');
ExtractTemporaryFile('bbrd20.bmp');
end;


procedure CurPageChanged(CurPageID: Integer);
var Pfunc : LongWord;
begin
If CurPageID = wpInstalling then
begin
Form := CreateCustomForm();

Form.ClientWidth := ScaleX(800);
Form.ClientHeight := ScaleY(600);
Form.Width:= 800;
Form.Height:= 600;
Form.BorderStyle := bsNone;
Form.Color:=clBlack;
Form.Parent:=MainForm;
Form.Position:=poScreenCenter;

Form.Show();

pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 500, pfunc)

S:= (ExpandConstant('{tmp}') + '\bbrd1.bmp');

SlideImage:= TBitmapImage.Create(Form);
with SlideImage do
begin
Align:= alClient;
Stretch:= True;
Bitmap.LoadFromFile(S);
Parent:= Form;
Tag:= 1;
end

with WizardForm do
begin
MainPanel.Hide;
Bevel1.Hide;
Width:= ScaleX(395);
Height:= ScaleY(142);
Left:= ScaleX(0);
Top:= ScaleY(0);
Left:= ScaleX(MainForm.Left+20);
Top:= ScaleY(MainForm.Height-170);
InnerNotebook.Left:= ScaleX(10);
InnerNotebook.Top:= ScaleY(10);
InnerNotebook.Width:= ScaleX(370);
StatusLabel.Left:= ScaleX(0);
StatusLabel.Top:= ScaleY(0);
StatusLabel.Width:= WizardForm.InnerNotebook.Width;
FileNameLabel.Left:= ScaleX(0);
FileNameLabel.Top:= ScaleY(20);
FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
ProgressGauge.Top:= ScaleY(40);
ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
CancelButton.BringToFront;
CancelButton.Left:= ScaleX(154);
CancelButton.Top:= ScaleY(80);
end
end

begin
if CurPageID = wpFinished then
begin
Form.Free;
KillTimer(0, TimerID);
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end
end
end;


procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
[/more]
Автор: serg_aka_lain
Дата сообщения: 01.06.2008 00:20
Raf_SE
Конечно может.,
убери Form: TSetupForm , а SlideImage паренти на MainForm,

или в этом месте Form := CreateCustomForm();, не убирая Form
(Так будет меньше мерцания между переключениями картинок)
Form := CreateCustomForm();
Form.Width:= MainForm.Width; - размер по MainForm
Form.Height:= MainForm.Height; - размер по MainForm
Form.BorderStyle := bsNone;
Form.Color:=clBlack;
Form.Parent:=MainForm;
Form.Position:=poScreenCenter;

ps: на широких экранах картинка будет растягиваться.
Автор: Diawer
Дата сообщения: 01.06.2008 17:46
Помогите решить такую задачу, а именно изменить иконку в левом верхнем углу (инсталлятора и деинсталлятора) и НИГДЕ больше, обычными средствами не получается, наверное надо через секцию [Код].
Автор: alfonser
Дата сообщения: 01.06.2008 17:53
Подскажите, пожалуйста, как разбить надпись в "ReadyLabel1" (Программа установки готова начать установку [name] на Ваш компьютер.) на две строчки, а то надпись не помещается.
Автор: Raf_SE
Дата сообщения: 01.06.2008 19:59
Ктонить может объединить [more=этот код][Code]
type TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var Form : TSetupForm;
BackImage, SlideImage: TBitmapImage;
TimerID: LongWord;
S : String;
Width, Height:Integer;


function WrapTimerProc(callback:TProc; 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 KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';


function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
begin
Result:=(Position-Min)/((Max - Min)/100)
end
end;


procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);

var Percent: Integer;

begin
Percent:= PercentProgress;
with SlideImage do
begin
if ((percent>0) and (percent<4) and (Tag<>1)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd1.bmp')
Tag:=1
end
else
if ((percent>5) and (percent<8) and (Tag<>2)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd2.bmp')
Tag:=2
end
else
if ((percent>9) and (percent<13) and (Tag<>3)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd3.bmp')
Tag:=3
end
else
if ((percent>14) and (percent<18) and (Tag<>4)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd4.bmp')
Tag:=4
end
else
if ((percent>19) and (percent<23) and (Tag<>5)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd5.bmp')
Tag:=5
end
else
if ((percent>24) and (percent<28) and (Tag<>6)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd6.bmp')
Tag:=6
end
else
if ((percent>32) and (percent<36) and (Tag<>7)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd7.bmp')
Tag:=7
end
else
if ((percent>37) and (percent<41) and (Tag<>8)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd8.bmp')
Tag:=8
end
else
if ((percent>42) and (percent<46) and (Tag<>9)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd9.bmp')
Tag:=9
end
else
if ((percent>47) and (percent<51) and (Tag<>10)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd10.bmp')
Tag:=10
end
else
if ((percent>52) and (percent<56) and (Tag<>11)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd11.bmp')
Tag:=11
end
else
if ((percent>57) and (percent<61) and (Tag<>12)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd12.bmp')
Tag:=12
end
else
if ((percent>62) and (percent<66) and (Tag<>13)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd13.bmp')
Tag:=13
end
else
if ((percent>67) and (percent<71) and (Tag<>14)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd14.bmp')
Tag:=14
end
else
if ((percent>72) and (percent<76) and (Tag<>15)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd15.bmp')
Tag:=15
end
else
if ((percent>77) and (percent<81) and (Tag<>16)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd16.bmp')
Tag:=16
end
else
if ((percent>82) and (percent<86) and (Tag<>17)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd17.bmp')
Tag:=17
end
else
if ((percent>87) and (percent<91) and (Tag<>18)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd18.bmp')
Tag:=18
end
else
if ((percent>92) and (percent<96) and (Tag<>19)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd19.bmp')
Tag:=19
end
else
if ((percent>97) and (percent<100) and (Tag<>20)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bbrd20.bmp')
Tag:=20
end
end
end;



procedure InitializeWizard();
begin
WizardForm.Position:= poScreenCenter;
Width:= GetSystemMetrics(0);
Height:= GetSystemMetrics(1);
MainForm.BorderStyle:= bsNone;
MainForm.Left:= 0;
MainForm.Top:= 0;
MainForm.Width:= Width;
MainForm.Height:= Height;

ExtractTemporaryFile('1.bmp');
S:= (ExpandConstant('{tmp}')+'\1.bmp');

BackImage:=TBitmapImage.Create(MainForm);
BackImage.Bitmap.LoadFromFile(S);
BackImage.Align:= alClient;
BackImage.Parent:= MainForm;
BackImage.Stretch:= True;
MainForm.Visible:= True;

ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('bbrd1.bmp');
ExtractTemporaryFile('bbrd2.bmp');
ExtractTemporaryFile('bbrd3.bmp');
ExtractTemporaryFile('bbrd4.bmp');
ExtractTemporaryFile('bbrd5.bmp');
ExtractTemporaryFile('bbrd6.bmp');
ExtractTemporaryFile('bbrd7.bmp');
ExtractTemporaryFile('bbrd8.bmp');
ExtractTemporaryFile('bbrd9.bmp');
ExtractTemporaryFile('bbrd10.bmp');
ExtractTemporaryFile('bbrd11.bmp');
ExtractTemporaryFile('bbrd12.bmp');
ExtractTemporaryFile('bbrd13.bmp');
ExtractTemporaryFile('bbrd14.bmp');
ExtractTemporaryFile('bbrd15.bmp');
ExtractTemporaryFile('bbrd16.bmp');
ExtractTemporaryFile('bbrd17.bmp');
ExtractTemporaryFile('bbrd18.bmp');
ExtractTemporaryFile('bbrd19.bmp');
ExtractTemporaryFile('bbrd20.bmp');
end;


procedure CurPageChanged(CurPageID: Integer);
var Pfunc : LongWord;
begin
If CurPageID = wpInstalling then
begin
Form := CreateCustomForm();

Form.Width:= MainForm.Width;
Form.Height:= MainForm.Height;
Form.BorderStyle := bsNone;
Form.Color:=clBlack;
Form.Parent:=MainForm;
Form.Position:=poScreenCenter;

Form.Show();

pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 500, pfunc)

S:= (ExpandConstant('{tmp}') + '\bbrd1.bmp');

SlideImage:= TBitmapImage.Create(Form);
with SlideImage do
begin
Align:= alClient;
Stretch:= True;
Bitmap.LoadFromFile(S);
Parent:= Form;
Tag:= 1;
end

with WizardForm do
begin
MainPanel.Hide;
Bevel1.Hide;
Width:= ScaleX(395);
Height:= ScaleY(142);
Left:= ScaleX(0);
Top:= ScaleY(0);
Left:= ScaleX(MainForm.Left+20);
Top:= ScaleY(MainForm.Height-170);
InnerNotebook.Left:= ScaleX(10);
InnerNotebook.Top:= ScaleY(10);
InnerNotebook.Width:= ScaleX(370);
StatusLabel.Left:= ScaleX(0);
StatusLabel.Top:= ScaleY(0);
StatusLabel.Width:= WizardForm.InnerNotebook.Width;
FileNameLabel.Left:= ScaleX(0);
FileNameLabel.Top:= ScaleY(20);
FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
ProgressGauge.Top:= ScaleY(40);
ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
CancelButton.BringToFront;
CancelButton.Left:= ScaleX(154);
CancelButton.Top:= ScaleY(80);
end
end

begin
if CurPageID = wpFinished then
begin
Form.Free;
KillTimer(0, TimerID);
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end
end
end;


procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
'"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
'"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
'"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

IDCANCEL: Form.Close;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

IDCANCEL: Form.Close;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually. ', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL: Form.Close;
end
end
end
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result := True;
if CurPage = wpSelectDir then
if DirExists( ExpandConstant('{app}') ) then
begin
MsgBox(ExpandConstant('{cm:InstallationIsNotEnabled}'), mbError, mb_Ok);
Result := False;
end
end;

[/more], с [more=кодом запуска трека]function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('splash.wav'));
sndPlaySound(ExpandConstant('{tmp}\splash.wav'), $0001 or $9999);
end;
[/more]?

P.S.
И еще желательно подсказать, через что лучше воспроизводить WAV'файл с битрейтом 705 кбит/сек. Через системную библиотеку winmm.dll или через Bass.dll ? Чем они вобще отличаются?
Автор: serg_aka_lain
Дата сообщения: 01.06.2008 20:37
Raf_SE
Очень просто, если музыка должна запускаться сразу, то так

procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('splash.wav'));
sndPlaySound(ExpandConstant('{tmp}\splash.wav'), $0001 or $9999);

WizardForm.Position:= poScreenCenter;
Width:= GetSystemMetrics(0);
Height:= GetSystemMetrics(1); и.т.д.

Если при начале копирования то
begin
If CurPageID = wpInstalling then
begin
ExtractTemporaryFile(ExpandConstant('splash.wav'));
sndPlaySound(ExpandConstant('{tmp}\splash.wav'), $0001 or $9999); и.т.д.

Автор: braunberg
Дата сообщения: 01.06.2008 21:39
Diawer
Не совсем понятно в чем трабл заключается. Если хочешь убрать ее совсем, то так можно:

[Code]
procedure InitializeWizard();
begin
WizardForm.BorderStyle := bsDialog;
end;

Если хочешь оставить в левом верхнем углу default-иконку - правь саму иконку, т.е. маленькую иконку по умолчанию 16х16 оставляешь как есть (стандартная иконка инсталлятора), а большую 32х32 делаешь свою
Автор: SotM
Дата сообщения: 01.06.2008 22:01
alfonser
Как это не помещается?! Скриншот кинь сюда, чтоб наглядно было.

Diawer
Хмм, случайно это не SetupIconFile делает в секции Setup?


Автор: alfonser
Дата сообщения: 01.06.2008 22:24
SotM
Автор: serg_aka_lain
Дата сообщения: 01.06.2008 22:58
alfonser

Делай ширину больше
Height := ScaleY(29);
и Caption := 'Подождите' #13#10 'Пока установится.'; или
в CustomMessages
=Подождите%nПока установится.
Автор: alfonser
Дата сообщения: 01.06.2008 23:14
serg_aka_lain
Спасибо! Воспользовался %n
Автор: AlexDJ666
Дата сообщения: 02.06.2008 04:15
Возможно ли в скрипте использовать одновременно Memo :=TMemo.Create(WizardForm) и Memo:= TRichEditViewer.Create(Page)? Если да, то где и как нужно описать Memo?

Добавлено:
И сразу вдогонку еще вопрос. И использовал теперь код Genri (спасибо ему огромное), чтобы можно было использовать rtf-вставки. Теперь у меня не отображаются скриншоты. Я так понимаю, что это как раз из-за использования Memo :=TRichEditViewer.Create(Page)? И еще я не понял как привязать функцию отображения скриншотов при наведении курсора на пункт меню к текущему коду - и там, и там есть функции по проверке курсора, но связать их вместе пока не удалось.
И последнее, в предложенном Genri варианте ListBox'a записи в скрипте получаются более лаконичные, нежели были у меня, только одно непонятно - какой переменной теперь можно передать в раздел Files событие, что пункт меню выбран (собственно, для установки самих файлов). Раньше у меня были переменные вида Checked101, CHecked102 и т.п. А сейчас не понимаю, как реализована проверка на "отмеченность" пункта меню.

Выкладываю "очищенный" кусок моего кода:

[more]
[Setup]

AppName=AlexDJ Addon Pack
AppVerName=AlexDJ Addon Pack v2.6
AppPublisher=AlexDJ
AppPublisherURL=http://wow.panterkin.ru/
AppSupportURL=http://wow.panterkin.ru/
AppUpdatesURL=http://wow.panterkin.ru/
DefaultDirName=D:\Games\WoW\
DefaultGroupName=AlexDJ's Addon Pack
DisableProgramGroupPage=yes
AllowNoIcons=yes
OutputDir=!_Ready
CreateAppDir=true

[Files]
Source: compiler:WizModernSmallImage.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: compiler:WizModernSmallImage-IS.bmp; DestDir: {tmp}; Flags: dontcopy;

Source: isxbb.dll; DestDir: {tmp}; Flags: dontcopy

Source: ReadMe1.rtf; Flags: dontcopy
Source: ReadMe2.rtf; Flags: dontcopy
Source: ReadMe3.rtf; Flags: dontcopy


;Source: Addons\Rus\RuWOW\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Check: Checked101
;Source: Addons\Rus\Talents\*; DestDir: {app}/Interface/Addons; Flags: ignoreversion recursesubdirs createallsubdirs; Check: Checked102
;Source: Addons\Rus\NPC\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Check: Checked103

;Source: Addons\Main\AutoSave\*; DestDir: {app}/Interface/Addons; Flags: ignoreversion recursesubdirs createallsubdirs; Check: Checked104

[Messages]
BeveledLabel=AlexDJ's Addon Pack (c) Night Strangers Guild - {#Bevel}
WizardSelectProgramGroup=
SelectStartMenuFolderDesc=Где программа установки должна создать ярлыки?

[_Code]
Var
Text101,Text201,Text202,Text203,Text204,Text205,Text206,Text207,Text208,Text209,Text210,Text211,Text212,Text213,Text214,Text215,Text216,Text217,Text218,Text219,Text220,Text221,Text222,Text223,Text224,Text225,Text301,Text302,Text303,Text304,Text305,Text306,Text307,Text308,Text309: TNewStaticText;
Check101,Check102,Check103,Check104,Check201,Check202,Check203,Check204,Check205,Check206,Check207,Check208,Check209,Check210,Check211,Check212,Check213,Check214,Check215,Check216,Check217,Check218,Check219,Check220,Check221,Check222,Check223,Check224,Check225,Check301,Check302,Check303,Check304,Check305,Check306,Check307,Check308,Check309: TCheckBox; //NoChecks,Label101,Label102,Label103,Label104,Label201,Label202,Label203,Label204,Label205,Label206,Label207,Label208,Label209,Label210,Label211,Label212,Label213,Label214,Label215,Label216,Label217,Label218,Label219,Label220,Label221,Label222,Label223,Label224,Label225,Label301,Label302,Label303,Label304,Label305,Label306,Label307,Label308,Label309: TLabel;
Image101,Image201,Image301: TBitmapImage;

Page: TWizardPage;
ListBox: TNewCheckListBox;
Memo: TRichEditViewer;
CheckLabel: TLabel;
MouseY: integer;

procedure CheckOnClick (Sender: TObject);
begin
if MouseY < ListBox.Items.Count then
ListBox.Checked[MouseY]:= Not(ListBox.Checked[MouseY]);
end;

procedure CheckMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
MouseY:= Y/ScaleY(16);
if MouseY < ListBox.Items.Count then
Memo.RTFText:= TStrings(ListBox.ItemObject[MouseY]).Text;
end;

// Старый вариант проверки курсора

procedure Check101MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text101.Enabled:=True
Text101.Caption:='Русификация ВоВа '
Image101.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'))
Image101.Visible:=True
end;

Function Checked101: Boolean;
begin
Result:=Check101.Checked
end;

Procedure Check101OnClick (Sender: TObject);
begin
Check101.Checked:=Not(Check101.Checked)
end;

// Старый вариант проверки курсора

Procedure InitializeWizard();
var
// Lbl: TLabel;
// Memo: TMemo;
// Page: TWizardPage;
// Memo: TRichEditViewer;
Bmp: TBitmapImage;
begin

ExtractTemporaryFile('readme.rtf');

ExtractTemporaryFile('WizModernSmallImage.bmp')
ExtractTemporaryFile('WizModernSmallImage-IS.bmp')

Page:=CreateCustomPage(1, 'Основные аддоны', 'Выберите компоненты, которые вы хотите установить.')

ExtractTemporaryFile('ReadMe1.rtf');
ExtractTemporaryFile('ReadMe2.rtf');
ExtractTemporaryFile('ReadMe3.rtf');

// Блок скриншотов

Memo :=TRichEditViewer.Create(Page)
Memo.SetBounds (16,161,198,143)
Memo.Color :=clBtnFace
Memo.Enabled :=False
Memo.BorderStyle :=bsNone
Memo.Parent :=Page.Surface

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,160,200,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

Image101 :=TBitmapImage.Create(WizardForm)
Image101.Left :=10
Image101.Top :=10
Image101.Width :=55
Image101.Height :=55
Image101.Parent :=Panel

ListBox:= TNewCheckListBox.Create(Page);
with ListBox do
begin
Left := 15
Top := 0
Width := 200
Height := 149
Parent := Page.Surface
AddCheckBox('aaa', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('bbb', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('ccc', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('aaa', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('bbb', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('ccc', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('aaa', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('bbb', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('ccc', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('aaa', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('bbb', '', 0, True, True, False, True, TStringList.Create);
AddCheckBox('ccc', '', 0, True, True, False, True, TStringList.Create);

TStrings(ItemObject[0]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
TStrings(ItemObject[1]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
TStrings(ItemObject[2]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
end;

Memo:= TRichEditViewer.Create(Page);
with Memo do
begin
Left := ListBox.Left + ListBox.Width + 8;
Top := ListBox.Top;
Width := ListBox.Width
Height := ListBox.Height
Color := clBtnFace
Enabled := False
BorderStyle := bsNone
Parent := Page.Surface
end;

CheckLabel:= TLabel.Create(Page);
with CheckLabel do
begin
Width :=ListBox.Width
Height :=ListBox.Height
Autosize :=False
Transparent :=True
OnMouseMove :=@CheckMouseMove
OnClick :=@CheckOnClick
Parent :=ListBox
end;
end;
[/more]
Автор: antifire
Дата сообщения: 02.06.2008 09:42
какая функция в секции [_Code] используется для проверки наличия файла? и для копирования его в определенную дирикторию?
Автор: SotM
Дата сообщения: 02.06.2008 10:32
antifire
Дык, в хелпе ведь написано:
FileExists
FileCopy

Автор: antifire
Дата сообщения: 02.06.2008 10:39
SotM
Гы. не там смотрел =)

Добавлено:
Тогда такой вопрос: Как сделать так чтоб название файла менялось в зависимости от значения переменной. К примеру есть a: integer и file001.dat, как сделать так чтобы если a=3 то file003.dat? Что то вроде file00[a].dat?
Автор: SotM
Дата сообщения: 02.06.2008 13:43
antifire
Подробней опиши вопрос о файлах.
Автор: antifire
Дата сообщения: 02.06.2008 14:00
Хорошо.
a: integer
i: integer (кол-во файлов file00x.dat)

Нужен цикл с проверкой, начинаеться приблизительно так:

если i>0
1 от а=1 до a=i a++
2 Проверяем есть ли на диске file00[a].dat
a) если есть то копируем его в дирикторию программы, переходим к пункту 1
b) если нет то вывод сообщения 'Вставьте диск с файлом file00[a].dat' переходим к п.2

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.