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

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

Автор: Kutsenko
Дата сообщения: 18.01.2008 19:01
Raf_SE

Держи

[Code]
function InitializeSetup(): Boolean;
begin ///
MsgBox('Сдесь пишеш всё что хочеш', mbinformation,mb_ok); ///
end;

procedure InitializeWizard();
var
AboutButton: TButton;
begin
AboutButton:=TButton.Create(WizardForm)
AboutButton.Left:=5
AboutButton.Top:=WizardForm.CancelButton.Top
AboutButton.Width:=WizardForm.CancelButton.Width
AboutButton.Height:=WizardForm.CancelButton.Height
AboutButton.Parent:=WizardForm
/////////////////////////////////////
AboutButton.Caption:='От авторов'////
/////////////////////////////////////
AboutButton.OnClick:=@AboutButtonClick;
AboutButton.BringToFront
end;


Автор: Raf_SE
Дата сообщения: 18.01.2008 19:25
А можете еще подсказать, что нужно вписать чтобы в левом краю была ссылка, к примеру на http://ya.ru/ По типу как сдесь http://upload.com.ua/direct/900080931/AS_RUS.exe
Автор: iTASmania_Inc
Дата сообщения: 18.01.2008 19:51
Raf_SE
Ну, можно [more=так]
[Setup]
AppName=My Prog
AppVerName=My Prog 1.5
DefaultDirName={pf}\My Prog

[Code]
var
URLLabel: TNewStaticText;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.innosetup.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
begin
URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'www.innosetup.com';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
URLLabel.Font.Style := [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := WizardForm.CancelButton.Top + ScaleY(5);
URLLabel.Left := ScaleX(20);
end;
[/more] или [more=так]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program

[Code]
var
MouseLabel, SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://forum.ru-board.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clRed
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clBlue
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clGreen
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clBlue
end;

procedure InitializeWizard();
begin
MouseLabel := TLabel.Create(WizardForm)
MouseLabel.Width := WizardForm.Width
MouseLabel.Height := WizardForm.Height
MouseLabel.Autosize := False
MouseLabel.Transparent := True
MouseLabel.OnMouseMove := @SiteLabelMouseMove2
MouseLabel.Parent := WizardForm

SiteLabel := TLabel.Create(WizardForm)
SiteLabel.Left := 10
SiteLabel.Top := 330
SiteLabel.Cursor := crHand
SiteLabel.Font.Color := clBlue
SiteLabel.Caption := 'Форум Ru-Board'
SiteLabel.OnClick := @SiteLabelOnClick
SiteLabel.OnMouseDown := @SiteLabelMouseDown
SiteLabel.OnMouseUp := @SiteLabelMouseUp
SiteLabel.OnMouseMove := @SiteLabelMouseMove
SiteLabel.Parent := WizardForm
end;
[/more].

Добавлено:
Kutsenko, Ваш скрипт немного кривоват. )))
Автор: Kutsenko
Дата сообщения: 18.01.2008 20:26

Цитата:
Kutsenko, Ваш скрипт немного кривоват. )))


Согласен. Недосмотрел немного. Ну вы меня уже простите .


Добавлено:
Кто может, помогите!!! Sampron мне скинул скрипт чтобы ввод пароля разделялся на секции. Всё отлично работает, только есть две проблемки. Помогите мне их решыть. Когда вводиш код и заполнилось первое окно то курсор на другое окно не переходит , и приходится нажимать или таб или же клёцать самому там курсором. Можна это исправить? И если ввёл неправельный пароль то оно выдаёт окно, заголовок которого "установка", а я хочу исправить его на "внимание".
Вот скрипт:
[more=Читать дальше]
[Code]
var
NewPage: TWizardPage;
TopText: TLabel;
Edit1,Edit2,Edit3,Edit4,Edit5: TEdit;

procedure SerialPage;
begin
NewPage:=CreateCustomPage(wpWelcome, 'Ввод кода', 'бла бла бла и т.д. ')

TopText:=TLabel.Create(NewPage)
TopText.Left:=0
TopText.Top:=0
TopText.Width:=417
TopText.Height:=28
TopText.AutoSize:=False
TopText.WordWrap:=True
TopText.Caption:='Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска.'
TopText.Parent:=NewPage.Surface

Edit1:=TEdit.Create(NewPage)
Edit1.Left:=0
Edit1.Top:=60
Edit1.Width:=60
Edit1.Height:=21
Edit1.AutoSize:=False
Edit1.MaxLength:=5 //максимальное количество символов
Edit1.Font.Size:=12
Edit1.Font.Style:=[fsBold]
Edit1.Font.Name:='Arial'
Edit1.Parent:=NewPage.Surface

Edit2:=TEdit.Create(NewPage)
Edit2.Left:=70
Edit2.Top:=60
Edit2.Width:=60
Edit2.Height:=21
Edit2.AutoSize:=False
Edit2.MaxLength:=5
Edit2.Font.Size:=12
Edit2.Font.Style:=[fsBold]
Edit2.Font.Name:='Arial'
Edit2.Parent:=NewPage.Surface

Edit3:=TEdit.Create(NewPage)
Edit3.Left:=140
Edit3.Top:=60
Edit3.Width:=60
Edit3.Height:=21
Edit3.AutoSize:=False
Edit3.MaxLength:=5
Edit3.Font.Size:=12
Edit3.Font.Style:=[fsBold]
Edit3.Font.Name:='Arial'
Edit3.Parent:=NewPage.Surface

Edit4:=TEdit.Create(NewPage)
Edit4.Left:=210
Edit4.Top:=60
Edit4.Width:=60
Edit4.Height:=21
Edit4.AutoSize:=False
Edit4.MaxLength:=5
Edit4.Font.Size:=12
Edit4.Font.Style:=[fsBold]
Edit4.Font.Name:='Arial'
Edit4.Parent:=NewPage.Surface

Edit5:=TEdit.Create(NewPage)
Edit5.Left:=280
Edit5.Top:=60
Edit5.Width:=60
Edit5.Height:=21
Edit5.AutoSize:=False
Edit5.MaxLength:=5
Edit5.Font.Size:=12
Edit5.Font.Style:=[fsBold]
Edit5.Font.Name:='Arial'
Edit5.Parent:=NewPage.Surface
end;

procedure InitializeWizard();
begin
SerialPage
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:=True
if CurPageID = NewPage.ID then
begin
Result:=Edit1.Text = '11111' //серийный номер
Result:=Edit2.Text = '22222'
Result:=Edit3.Text = '33333'
Result:=Edit4.Text = '44444'
Result:=Edit5.Text = '55555'
if not Result then
begin
MsgBox('Неверный серийный номер.', mbError, mb_Ok)
Result:=False
end
end
end;
[/more]
Автор: iTASmania_Inc
Дата сообщения: 18.01.2008 23:07
Kutsenko
[more=Подробнее]
[Setup]
AppName=My Prog
AppVerName=My Prog [Version]
DefaultDirName={pf}\My Prog

[Code]
var
NewPage: TWizardPage;
TopText: TLabel;
Edit1,Edit2,Edit3,Edit4,Edit5: TEdit;

const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;    
MB_ICONSTOP = $10;
MB_ICONNONE = $0;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';

procedure SerialEdit1OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Length(Edit1.Text) = 5 then WizardForm.ActiveControl := Edit2
end;

procedure SerialEdit2OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if Length(Edit2.Text) = 0 then WizardForm.ActiveControl := Edit1
if Length(Edit2.Text) = 5 then WizardForm.ActiveControl := Edit3
end;

procedure SerialEdit3OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if Length(Edit3.Text) = 0 then WizardForm.ActiveControl := Edit2
if Length(Edit3.Text) = 5 then WizardForm.ActiveControl := Edit4
end;

procedure SerialEdit4OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if Length(Edit4.Text) = 0 then WizardForm.ActiveControl := Edit3
if Length(Edit4.Text) = 5 then WizardForm.ActiveControl := Edit5
end;

procedure SerialEdit5OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if Length(Edit5.Text) = 0 then WizardForm.ActiveControl := Edit4
end;
    
procedure SerialPage;
begin
NewPage:=CreateCustomPage(wpWelcome, 'Ввод кода', 'бла бла бла и т.д. ')

TopText:=TLabel.Create(NewPage)
TopText.Left:=0
TopText.Top:=0
TopText.Width:=417
TopText.Height:=28
TopText.AutoSize:=False
TopText.WordWrap:=True
TopText.Caption:='Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска.'
TopText.Parent:=NewPage.Surface

Edit1:=TEdit.Create(NewPage)
Edit1.Left:=0
Edit1.Top:=60
Edit1.Width:=60
Edit1.Height:=21
Edit1.AutoSize:=False
Edit1.MaxLength:=5
Edit1.Font.Size:=12
Edit1.Font.Style:=[fsBold]
Edit1.Font.Name:='Arial'
Edit1.Parent:=NewPage.Surface
Edit1.OnKeyUp := @SerialEdit1OnKeyUp

Edit2:=TEdit.Create(NewPage)
Edit2.Left:=70
Edit2.Top:=60
Edit2.Width:=60
Edit2.Height:=21
Edit2.AutoSize:=False
Edit2.MaxLength:=5
Edit2.Font.Size:=12
Edit2.Font.Style:=[fsBold]
Edit2.Font.Name:='Arial'
Edit2.Parent:=NewPage.Surface
Edit2.OnKeyUp := @SerialEdit2OnKeyUp

Edit3:=TEdit.Create(NewPage)
Edit3.Left:=140
Edit3.Top:=60
Edit3.Width:=60
Edit3.Height:=21
Edit3.AutoSize:=False
Edit3.MaxLength:=5
Edit3.Font.Size:=12
Edit3.Font.Style:=[fsBold]
Edit3.Font.Name:='Arial'
Edit3.Parent:=NewPage.Surface
Edit3.OnKeyUp := @SerialEdit3OnKeyUp

Edit4:=TEdit.Create(NewPage)
Edit4.Left:=210
Edit4.Top:=60
Edit4.Width:=60
Edit4.Height:=21
Edit4.AutoSize:=False
Edit4.MaxLength:=5
Edit4.Font.Size:=12
Edit4.Font.Style:=[fsBold]
Edit4.Font.Name:='Arial'
Edit4.Parent:=NewPage.Surface
Edit4.OnKeyUp := @SerialEdit4OnKeyUp

Edit5:=TEdit.Create(NewPage)
Edit5.Left:=280
Edit5.Top:=60
Edit5.Width:=60
Edit5.Height:=21
Edit5.AutoSize:=False
Edit5.MaxLength:=5
Edit5.Font.Size:=12
Edit5.Font.Style:=[fsBold]
Edit5.Font.Name:='Arial'
Edit5.Parent:=NewPage.Surface
Edit5.OnKeyUp := @SerialEdit5OnKeyUp
end;

procedure InitializeWizard();
begin
SerialPage
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
hWnd: Integer;
begin
Result:=True
if CurPageID = NewPage.ID then
begin
Result:=Edit1.Text = '11111'
Result:=Edit2.Text = '22222'
Result:=Edit3.Text = '33333'
Result:=Edit4.Text = '44444'
Result:=Edit5.Text = '55555'
if not Result then
begin
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
MessageBox(hwnd, 'Неверный серийный номер.', 'Ошибка!', MB_ICONINFORMATION)
Result:=False
end
end
end;
[/more].
Автор: Raf_SE
Дата сообщения: 18.01.2008 23:15
iTASmania_Inc
Твой скрипт конфликтует со скриптом кнопочки. Их можно какнить красиво объединить?
Типо так:
Автор: iTASmania_Inc
Дата сообщения: 18.01.2008 23:23
Raf_SE

Цитата:
Твой скрипт конфликтует со скриптом кнопочки.

А может Ваш склёпанный из моего скрипта код вызывает подобный конфликт?
Лично у меня всё [more=нормально]
[Setup]
AppName=My Prog
AppVerName=My Prog 1.5
DefaultDirName={pf}\My Prog

[Code]
var
URLLabel: TNewStaticText;
AboutButton: TButton;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.innosetup.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('This demo shows some features of the WizardForm object and the various VCL classes.', mbInformation, mb_Ok);
end;

procedure InitializeWizard();
begin
AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;
AboutButton.Top := WizardForm.CancelButton.Top;
AboutButton.Width := WizardForm.CancelButton.Width + ScaleX(10);
AboutButton.Height := WizardForm.CancelButton.Height;
AboutButton.Caption := 'О программе';
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;

URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'www.innosetup.com';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
URLLabel.Font.Style := [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := WizardForm.CancelButton.Top + ScaleY(5);
URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);
end;
[/more].
Автор: Raf_SE
Дата сообщения: 18.01.2008 23:46

Цитата:
А может Ваш склёпанный из моего скрипта код вызывает подобный конфликт?

Ну я человек неграмотный может и так...


Цитата:
Лично у меня всё нормально

Пасибо! Все пашет.
Автор: Unc1e
Дата сообщения: 19.01.2008 00:42
Как для каждой страницы мастера менять цвет шрифта PageNameLabel и PageDescriptionLabel. Как приведено ниже не работает. [more]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UserInfoPage=yes
InfoBeforeFile=README.txt
InfoAfterFile=Notices.rtf
LicenseFile=eula.txt
WizardImageFile=welcome_page.bmp

[Languages]
Name: "my_russian"; MessagesFile: "compiler:Languages\my_Russian.isl"

[Files]
Source: Image_1.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_2.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_3.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_4.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_5.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_6.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_7.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_8.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_9.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_10.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_11.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_12.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: finish_page.bmp; DestDir: {tmp}; Flags: dontcopy;

[Code]
var
PageNameLabel, PageDescriptionLabel : TLabel;
b:string;

procedure InitializeWizard();
begin
ExtractTemporaryFile('Image_1.bmp')
ExtractTemporaryFile('Image_2.bmp')
ExtractTemporaryFile('Image_3.bmp')
ExtractTemporaryFile('Image_4.bmp')
ExtractTemporaryFile('Image_5.bmp')
ExtractTemporaryFile('Image_6.bmp')
ExtractTemporaryFile('Image_7.bmp')
ExtractTemporaryFile('Image_8.bmp')
ExtractTemporaryFile('Image_9.bmp')
ExtractTemporaryFile('Image_10.bmp')
ExtractTemporaryFile('Image_11.bmp')
ExtractTemporaryFile('Image_12.bmp')
ExtractTemporaryFile('finish_page.bmp')
////////////////////////////////////////
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;

PageNameLabel:=TLabel.Create(WizardForm);
PageDescriptionLabel:=TLabel.Create(WizardForm);

with WizardForm do begin
with MainPanel do begin
with WizardSmallBitmapImage do begin
Left:= ScaleX(0);
Top:= ScaleY(0);
Height:=Mainpanel.Height;
Width:=MainPanel.Width;
Parent:=WizardForm.MainPanel;
end
end
end
//////////////////////////////////////////
b:=ExpandConstant('{tmp}\finish_page.bmp')
with WizardForm do begin WizardBitmapImage2.Bitmap.LoadFromFile(b); end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpLicense then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_1.bmp'))
with PageNameLabel do begin Font.Color:=clWhite end
with PageDescriptionLabel do begin Font.Color:=clWhite end

if CurPageID = wpPassword then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp'))
with PageNameLabel do begin Font.Color:=clWhite end
with PageDescriptionLabel do begin Font.Color:=clWhite end

if CurPageID = wpInfoBefore then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp'))
with PageNameLabel do begin Font.Color:= clBlack end
with PageDescriptionLabel do begin Font.Color:= clBlack end

if CurPageID = wpUserInfo then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_4.bmp'))
with PageNameLabel do begin Font.Color:=clWhite end
with PageDescriptionLabel do begin Font.Color:=clWhite end

if CurPageID = wpSelectDir then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_5.bmp'))
with PageNameLabel do begin Font.Color:=clBlack end
with PageDescriptionLabel do begin Font.Color:=clBlack end

if CurPageID = wpSelectComponents then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_6.bmp'))
with PageNameLabel do begin Font.Color:=clWhite end
with PageDescriptionLabel do begin Font.Color:=clWhite end

if CurPageID = wpSelectProgramGroup then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp'))
with PageNameLabel do begin Font.Color:=clWhite end
with PageDescriptionLabel do begin Font.Color:=clWhite end

if CurPageID = wpSelectTasks then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_8.bmp'))
with PageNameLabel do begin Font.Color:=clBlack end
with PageDescriptionLabel do begin Font.Color:=clBlack end

if CurPageID = wpReady then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_9.bmp'))
with PageNameLabel do begin Font.Color:= clBlack end
with PageDescriptionLabel do begin Font.Color:= clBlack end

if CurPageID = wpPreparing then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'))
with PageNameLabel do begin Font.Color:=clBlack end
with PageDescriptionLabel do begin Font.Color:=clBlack end

if CurPageID = wpInstalling then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_11.bmp'))
with PageNameLabel do begin Font.Color:=clWhite end
with PageDescriptionLabel do begin Font.Color:=clWhite end

if CurPageID = wpInfoAfter then
WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_12.bmp'))
with PageNameLabel do begin Font.Color:=clWhite end
with PageDescriptionLabel do begin Font.Color:=clWhite end
////////////////////////////////////////////////////////////////////////////////////////////////

with PageNameLabel do begin
Left := ScaleX(16);
Top := ScaleY(12);
Width := ScaleX(280);
Height := ScaleY(14);
AutoSize := false;
WordWrap := true;
Font.Style := [fsBold];
Caption := WizardForm.PageNameLabel.Caption;
ShowAccelChar := false;
Transparent := true;
Parent := WizardForm.MainPanel;
end

with PageDescriptionLabel do begin
Left := ScaleX(26);
Top := ScaleY(28);
Width := ScaleX(256);
Height := ScaleY(29);
AutoSize := false;
WordWrap := true;
Caption := WizardForm.PageDescriptionLabel.Caption;
ShowAccelChar := false;
Transparent := true;
Parent := WizardForm.MainPanel;
end

end;
[/more]
Автор: iTASmania_Inc
Дата сообщения: 19.01.2008 00:54

Цитата:
Как приведено ниже не работает.

Правильно, потому что не проставлены операторные скобки begin ... end.
Вот [more=пример]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
UserInfoPage=true

[Code]
var
PageNameLabel, PageDescriptionLabel: TLabel;

procedure InitializeWizard();
begin
WizardForm.PageNameLabel.Hide
WizardForm.PageDescriptionLabel.Hide;

PageNameLabel := TLabel.Create(WizardForm)
PageNameLabel.Left := WizardForm.PageNameLabel.Left
PageNameLabel.Top := WizardForm.PageNameLabel.Top
PageNameLabel.Transparent := True
PageNameLabel.Font.Style := [fsBold]
PageNameLabel.Font.Color := clRed
PageNameLabel.Parent := WizardForm.MainPanel

PageDescriptionLabel := TLabel.Create(WizardForm)
PageDescriptionLabel.Left := WizardForm.PageDescriptionLabel.Left
PageDescriptionLabel.Top := WizardForm.PageDescriptionLabel.Top
PageDescriptionLabel.Transparent := True
PageDescriptionLabel.Font.Color := clRed
PageDescriptionLabel.Parent := WizardForm.MainPanel
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption

if CurPageID = wpUserInfo then
begin
PageNameLabel.Font.Color := clRed
PageDescriptionLabel.Font.Color := clRed
end

if CurPageID = wpSelectDir then
begin
PageNameLabel.Font.Color := clGreen
PageDescriptionLabel.Font.Color := clGreen
end

end;
[/more] рабочего скрипта.

Добавлено:
Приведённый выше пример ипользуется в том случае, если надо растянуть WizardSmallImage, если задача заключается в простой замене цвета, то всё намного тривиальнее: [more=подробнее]
procedure CurPageChanged(CurPageID: Integer);
begin

if CurPageID = wpUserInfo then
begin
WizardForm.PageNameLabel.Font.Color := clRed
WizardForm.PageDescriptionLabel.Font.Color := clRed
end

if CurPageID = wpSelectDir then
begin
WizardForm.PageNameLabel.Font.Color := clGreen
WizardForm.PageDescriptionLabel.Font.Color := clGreen
end

end;
[/more]...
Автор: Kutsenko
Дата сообщения: 19.01.2008 10:26
2 iTASmania_Inc
Спасибо за переделку скрипта.

А у меня возник такой вопросик: можна сделать так чтобы когда нажимать на кнопку about то показывался текст который я набрал, а ниже ещё и интернет адрес? В простом скрипте идёт кнопка и рядом интернет ссылка , а я хочу немного поменять. Кто знает - помогите.
Автор: Raf_SE
Дата сообщения: 19.01.2008 14:11
Блин. iTASmania_Inc, всетаки не пашет. Я просто вчера не понял что с чем конфликтует. Вобщем Мне ж нужно объединить твои скрипты со скриптом всплывающей картинки от Sampron Вобщем вопрос: их можно какнить объединить?

[more]
[Files]
Source: LOGO.bmp; DestDir: {tmp}; Flags: dontcopy
Source: manialogo.exe; DestDir: {tmp}; Flags: dontcopy

[Code]
function InitializeSetup(): Boolean;
var
Res: Integer;
begin
ExtractTemporaryFile('LOGO.bmp')
ExtractTemporaryFile('manialogo.exe')
Exec(ExpandConstant('{tmp}\manialogo.exe'),'','',SW_SHOW,ewWaitUntilTerminated,Res)
Result:=True
end;
[/more]
Автор: Gideon Vi
Дата сообщения: 19.01.2008 15:45
Доброго времени суток

Цитата:
Q: Может ли инсталятор использовать значение, взятое из реестра, в качестве имени папки по умолчанию?

A: Да. Используйте константу {reg:...} в DefaultDirName. Например:

[Setup]
DefaultDirName={reg:HKLM\Software\My Program,Path|{pf}\My Program}

Помогите, пожалуйста, не получается правильно составить. Путь в реестре прописывается [more=так][HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks]

[HKEY_LOCAL_MACHINE\SOFTWARE\Bethesda Softworks\Oblivion]
"Installed Path"="C:\\Program Files\\Oblivion\\"
"Programm Path"="ProgamPath"[/more]
Автор: iTASmania_Inc
Дата сообщения: 19.01.2008 15:48
Raf_SE
[more=Можно]
[Setup]
AppName=My Prog
AppVerName=My Prog 1.5
DefaultDirName={pf}\My Prog

[Files]
Source: LOGO.bmp; DestDir: {tmp}; Flags: dontcopy
Source: manialogo.exe; DestDir: {tmp}; Flags: dontcopy

[Code]
var
URLLabel: TNewStaticText;
AboutButton: TButton;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.innosetup.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('This demo shows some features of the WizardForm object and the various VCL classes.', mbInformation, mb_Ok);
end;

function InitializeSetup(): Boolean;
var
Res: Integer;
begin
ExtractTemporaryFile('LOGO.bmp')
ExtractTemporaryFile('manialogo.exe')
Exec(ExpandConstant('{tmp}\manialogo.exe'),'','',SW_SHOW,ewWaitUntilTerminated,Res)
Result := True
end;

procedure InitializeWizard();
begin
AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;
AboutButton.Top := WizardForm.CancelButton.Top;
AboutButton.Width := WizardForm.CancelButton.Width + ScaleX(10);
AboutButton.Height := WizardForm.CancelButton.Height;
AboutButton.Caption := 'О программе';
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;

URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'www.innosetup.com';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
URLLabel.Font.Style := [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := WizardForm.CancelButton.Top + ScaleY(5);
URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);
end;
[/more]. Только уже несколько надоедает заниматься тупой склейкой.

Добавлено:
Gideon Vi
Если я правильно понял, то так:
; Если есть значение ключа в реестре, то установится в указанную в этом ключе директорию,
; иначе - в {pf}\DefaultLocation
DefaultDirName={reg:HKLM\SOFTWARE\Bethesda Softworks\Oblivion,Installed Path|{pf}\DefaultLocation}


Добавлено:
Kutsenko
На MsgBox и WinAPI-шном MessageBox, по-моему, нельзя сделать ссылку, при нажатии на которую открывается сайт в Интернете. Однако если приклеить на кнопку форму, то это становится возможным. Пример создания формы - в Examples\CodeClasses.iss в директории Inno.
Автор: Kutsenko
Дата сообщения: 19.01.2008 18:44
2 iTASmania_Inc

А можна поточнее плиз, а то я не понял как создавать ту форму. Скрипт в студию .

Ктото знает какой скрипт нужно написать чтобы писалось сколько процентов уже установлено. Такое есть в corona skin, только как именно это вытащить я не знаю .
Автор: Victor_Dobrov
Дата сообщения: 19.01.2008 22:41
Kutsenko

Цитата:
Какой скрипт нужно написать, чтобы писалось, сколько процентов уже установлено.

Такой скрипт уже написан, называется Corona Skin. Вот ещё два примера от Genri: [more=Progress_%]
[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program

[Files]
Source: Files\*; DestDir: {app}; AfterInstall: ExtLog; Flags: recursesubdirs

[Code]
var
ProgressLabel: TLabel;

procedure ExtLog();
begin
SaveStringToFile(ExpandConstant('{app}\setup.log'), #13#10 + GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':') + ' - ' + ExpandConstant(CurrentFileName), True);
with WizardForm.ProgressGauge do begin
ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%';
if (Position-Min)/((Max - Min)/100) > 50 then ProgressLabel.Font.Color:= $FFFFFF
end;
end;

procedure InitializeWizard;
begin
ProgressLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:= Top + Height + ScaleY(8)
ProgressLabel.Left:= Left + Width/2 - ScaleX(8)
ProgressLabel.Caption:= '0%'
ProgressLabel.AutoSize:= True
ProgressLabel.Transparent:= True;
ProgressLabel.Parent:= WizardForm.InstallingPage
end;
end;
[/more] и [more=Progress_%_size]
[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program

[Files]
Source: Files\*; DestDir: {app}; AfterInstall: Progress()

[Code]
var
ProgressLabel, SizeLabel: TLabel;

procedure Progress();
var
size: integer;

begin
with WizardForm.ProgressGauge do
ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%';
    FileSize(ExpandConstant(CurrentFileName), size);
    SizeLabel.Caption:= IntToStr(size) + ' bytes';
end;

procedure InitializeWizard();
begin
ProgressLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top := Top + Height + ScaleY(8);
ProgressLabel.Left:= Left + Width/2 - ScaleX(8);
ProgressLabel.AutoSize := True;
ProgressLabel.Parent := WizardForm.InstallingPage;
end;

SizeLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
SizeLabel.Top := Top + Height + ScaleY(8);
SizeLabel.Left:= Left;
SizeLabel.AutoSize := True;
SizeLabel.Parent := WizardForm.InstallingPage;
end;
end;
[/more]
Автор: Gideon Vi
Дата сообщения: 20.01.2008 04:28
iTASmania_Inc, большое спасибо.

Может я слепой... билдер ругается: Parameter "Name" includes invalid characters.

Вот строка:

Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\Oblivion - Shivering Isles; ValueType: string; Flags: createvalueifdoesntexist uninsdeletekey; Components: Shivering_Isles

Однако перед ней идут такие:

Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\Oblivion\Gold; ValueType: string; Flags: createvalueifdoesntexist uninsdeletekey; Components:
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\Oblivion - Knights of the Nine; ValueType: string; Flags: createvalueifdoesntexist uninsdeletekey; Components: Knights_of_the_Nine
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\Oblivion - Knights of the Nine\1.00.0000; ValueType: string; Flags: createvalueifdoesntexist uninsdeletekey; Components: Knights_of_the_Nine

И в них ошибок не находит.

Добавлено:

Цитата:
Код для воспроизведения стандартного avi-файла на фоновом окне инсталлятора, изменяйте параметры для достижения требуемого результата.

Почему может не работать такой [more=код][Setup]
SolidCompression=true
InternalCompressLevel=ultra
VersionInfoVersion=1.0
VersionInfoCompany=Azgard
AppCopyright=Gideon Vi
AppName=Plugin for Oblivion
AppVerName=v1.0
PrivilegesRequired=none
RestartIfNeededByRun=false
DefaultDirName={reg:HKLM\SOFTWARE\Bethesda Softworks\Oblivion,Installed Path|{pf}\Oblivion\}
WindowVisible=yes
DiskSpanning=yes
DiskSliceSize=730000000
Compression=lzma/ultra
OutputDir=D:\28

[Files]
Source: clock.avi; DestDir: {tmp}; Flags: dontcopy
Source: DLCList.txt; DestDir: {app}\Data\

[Code]
const
AviFrameWidth = 656; // ширина кадра
AviFrameHeight = 368; // высота кадра

var
CommandString: String;
FileName: String;
AviFrameTop: Integer;
AviFrameLeft: Integer;

function mciSendString(lpstrCommand: string; lpstrReturnString: PChar; uReturnLength:integer; hwndCallback:integer):integer;
external 'mciSendStringA@winmm.dll stdcall';

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

procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('clock.avi'));
FileName:= ExpandConstant('{tmp}\clock.avi');
AviFrameTop:= GetSystemMetrics(17) / 2 - AviFrameHeight / 2;
AviFrameLeft:= GetSystemMetrics(16) / 2 - AviFrameWidth / 2;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then
begin
CommandString:= 'Open ' + FileName + ' type AVIVideo alias AVIFile parent ' + IntToStr(MainForm.Handle) + ' style child';
mciSendString(CommandString, '', 0, 0);

CommandString:= 'put AVIFile window at ' +
IntToStr(AviFrameLeft) + ' ' + IntToStr(AviFrameTop) + ' ' +
IntToStr(AviFrameWidth) + ' ' + IntToStr(AviFrameHeight);
mciSendString(CommandString, '', 0, 0);

//CommandString:= 'Play AVIFile fullscreen'; // полноэкранный режим
CommandString:= 'Play AVIFile repeat';
mciSendString(CommandString, '', 0, 0);
end;
end;

procedure DeinitializeSetup();
begin
CommandString:= 'Close AVIFile'; // закрываем при выходе
mciSendString(CommandString, '', 0, 0);
end;
[/more]? Инсталятор собирается без ошибок, но фон стандартный - синий. От ролика ни изображения, ни звука. При запуске инсталятор некоторое время "висит", затем появляется стандартный диалог и всё.
Автор: Kutsenko
Дата сообщения: 20.01.2008 10:23
2 Victor_Dobrov
Спасибо за скрипт. Только нужно его немного изменить. Я хочу чтобы проценты писались именно на прогресбаре (зелёной полоске - по центру) и чтобы шрифт был жирным. Если можете - исправъте.
Автор: Cryzer
Дата сообщения: 20.01.2008 11:24
У меня не получается реализовать одну мысль...
Дан ключ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.avi. Он может быть не пустым (с параметрами, подключами), может быть пустым, ну а может и вообще этого ключа не существует.
Мне надо сделать следующее:
a) если ключа ...\.avi не существует, то его (а также параметр со значением) не создавать.
b) если ключ ...\.avi существует, но при этом параметра "ProgID" нет, то параметр создастся со значением "BSPlayerFile.AVI" (тип - string).
c) если ключ ...\.avi существует, но при этом параметр "ProgID" есть, то его значение сменится на "BSPlayerFile.AVI" (тип - string).
Попытался поставить флаг dontcreatekey вот сюда:

Код: Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.avi"; ValueType: string; ValueName: "ProgID"; ValueData: "BSPlayerFile.AVI"; Flags: uninsdeletevalue uninsdeletekeyifempty dontcreatekey; Components: main\ass\avi
Автор: Sampron
Дата сообщения: 20.01.2008 11:38
Kutsenko
Интересно как будут отображатся эти проценты если у пользователя в системе будет установлено другое оформление где цвет прогрессбара будет неизвестно какой.
[more]
[Files]
Source: files\*; DestDir: {app}; AfterInstall: ExtLog(); Flags: recursesubdirs

[Code]
var
ProgressLabel: TLabel;

procedure ExtLog();
begin
with WizardForm.ProgressGauge do begin
ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
end
end;

procedure InitializeWizard;
begin
ProgressLabel:=TLabel.Create(WizardForm)
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:=4
ProgressLabel.Left:=200
ProgressLabel.Caption:='0%'
ProgressLabel.AutoSize:=True
ProgressLabel.Font.Color:=clWindowText
ProgressLabel.Font.Style:=[fsBold]
ProgressLabel.Transparent:=True
ProgressLabel.Parent:=WizardForm.ProgressGauge
end;
end;
[/more]
Автор: Kutsenko
Дата сообщения: 20.01.2008 12:13
Sampron Спасибо. Это какраз то что мне и нужно было . Я не думаю что у пользователя будет установлено такое оформление когда полоска уставновки будет чёрной .
Автор: Sampron
Дата сообщения: 20.01.2008 12:27
Kutsenko
Поставь классический стиль и увидишь.
Автор: Cryzer
Дата сообщения: 20.01.2008 13:13
У меня не получается реализовать одну мысль...
Дан ключ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.avi. Он может быть не пустым (с параметрами, подключами), может быть пустым, ну а может и вообще этого ключа не существует.
Мне надо сделать следующее:
a) если ключа ...\.avi не существует, то его (а также параметр со значением) не создавать.
b) если ключ ...\.avi существует, но при этом параметра "ProgID" нет, то параметр создастся со значением "BSPlayerFile.AVI" (тип - string).
c) если ключ ...\.avi существует, но при этом параметр "ProgID" есть, то его значение сменится на "BSPlayerFile.AVI" (тип - string).
Попытался поставить флаг dontcreatekey вот сюда:

Код: Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.avi"; ValueType: string; ValueName: "ProgID"; ValueData: "BSPlayerFile.AVI"; Flags: uninsdeletevalue uninsdeletekeyifempty dontcreatekey; Components: main\ass\avi
Автор: Gideon Vi
Дата сообщения: 20.01.2008 13:34
Cryzer, не дублируй посты, тут не только ты совета ждёшь
Автор: Kutsenko
Дата сообщения: 20.01.2008 13:35
Sampron

Поставил , всё равно видно, хотя и немного хуже, но всё равно проценты видны .

У меня такой вопрос на счёт проигрывания музыки. У меня есть скрипт с произвольным при запуске проигрыванием музыки, но потом одна и таже песня постоянно повторяется, а я хочу чтобы произвольное проигрывание музыки было постоянно, не только при запуске.
[more=Скрипт]
;#define SoundFolder "Sound" -- название папки с музыкальными файлами
;#define Mask "*.mp3" -- маска музыкальных файлов

#define FindHandle
#define FindResult
#define SoundFolder "Sound"
#define Mask "*.mp3"


[Setup]
AppName=Example.Random.Play.MP3.Music.On.Start.Up
AppVerName=Example.Random.Play.MP3.Music.On.Start.Up
AppPublisher=My Company, Inc.
DefaultDirName=C:\Example.Random.Play.MP3.Music.On.Start.Up
OutputBaseFilename=random.play.mp3.music.on.start.up.by.genri


[Files]
Source: Bass.dll; Flags: dontcopy noencryption
Source: {#SoundFolder}\{#Mask}; Flags: dontcopy noencryption nocompression


[Code]
const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;


var
mp3Handle: HWND;
mp3Name: string;
FilesCount: Integer;

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: PChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';


function GetRandomFile(max: integer): string;
var
FindRec: TFindRec;
i, rnd: integer;
begin
Result := '';
rnd := Random(max);

if FindFirst(ExpandConstant('{tmp}\{#Mask}'), FindRec) then
begin
try
while i < rnd do
begin
FindNext(FindRec);
i := i + 1;
end;
finally
Result := FindRec.Name;
FindClose(FindRec);
end;
end;
end;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');

#sub ProcessFoundFile
#define FileName FindGetFileName(FindHandle)
ExtractTemporaryFile('{#FileName}');
FilesCount := FilesCount + 1;
#endsub
#for {FindHandle = FindResult = FindFirst(SoundFolder + "\" + Mask, 0); FindResult; FindResult = FindNext(FindHandle)} ProcessFoundFile
mp3Name := ExpandConstant('{tmp}\') + GetRandomFile(FilesCount);
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
Result := True;
end;


procedure PlayButtonOnClick(Sender: TObject);
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False);
end;
BASS_ACTIVE_STOPPED:
begin
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
end;
end;
end;


procedure PauseButtonOnClick(Sender: TObject);
begin
BASS_ChannelPause(mp3Handle);
end;


procedure StopButtonOnClick(Sender: TObject);
begin
BASS_Stop();
BASS_Free();
end;


procedure InitializeWizard();
var
PlayButton, PauseButton, StopButton, ForwardButton, BackButton: TButton;
Panel1: TPanel;
begin
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
PlayButton := TButton.Create(WizardForm);
PlayButton.Left := 10;
PlayButton.Top := WizardForm.ClientHeight - ScaleY(23 + 10);
PlayButton.Height := 23; //Высота кнопки
PlayButton.Width := 30; //Ширина кнопки
PlayButton.Caption := '>'; //Название кнопки
PlayButton.ShowHint := True
PlayButton.Hint := 'Воспроизведение музыки'
PlayButton.OnClick := @PlayButtonOnClick;
PlayButton.Parent := WizardForm;
PlayButton.Cursor := crHand;

PauseButton := TButton.Create(WizardForm);
PauseButton.Left := 45;
PauseButton.Top := WizardForm.ClientHeight - ScaleY(23 + 10);
PauseButton.Height := 23; //Высота кнопки
PauseButton.Width := 30; //Ширина кнопки
PauseButton.Caption := 'II'; //Название кнопки
PauseButton.ShowHint := True
PauseButton.Hint := 'Приостановить музыку'
PauseButton.OnClick := @PauseButtonOnClick;
PauseButton.Parent := WizardForm;
PauseButton.Cursor := crHand;

StopButton := TButton.Create(WizardForm);
StopButton.Left := 80;
StopButton.Top := WizardForm.ClientHeight - ScaleY(23 + 10);
StopButton.Height := 23; //Высота кнопки
StopButton.Width := 30; //Ширина кнопки
StopButton.Caption := '[]'; //Название кнопки
StopButton.ShowHint := True
StopButton.Hint := 'Остановить музыку'
StopButton.OnClick := @StopButtonOnClick;
StopButton.Parent := WizardForm;
StopButton.Cursor := crHand;
end;
end;

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;
[/more]
Автор: Cryzer
Дата сообщения: 20.01.2008 14:25
Gideon Vi, извиняюсь, я проcто хотел создать пост на новой странице, а с предыдущей удалить... но что-то я не нашёл опцию удаления :/
Автор: iTASmania_Inc
Дата сообщения: 20.01.2008 15:18

Цитата:
Parameter "Name" includes invalid characters.

Эта ошибка, наверное, больше относится к секции [Components], хотя не исключены другие конфликты. Попробуйте скомпилировать данный [more=пример]
[Setup]
AppName=My Prog
AppVerName=My Prog [Vesion]
DefaultDirName={pf}\My Prog

[Components]
Name: Knights_of_the_Nine; Description: Knights of the_Nine; Types: full compact custom; Flags: fixed
Name: Shivering_Isles; Description: Shivering Isles; Types: full

[Registry]
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\Oblivion\Gold; ValueType: string; Flags: createvalueifdoesntexist uninsdeletekey;
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\Oblivion - Knights of the Nine; ValueType: string; Flags: createvalueifdoesntexist uninsdeletekey; Components: Knights_of_the_Nine
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\Oblivion - Knights of the Nine\1.00.0000; ValueType: string; Flags: createvalueifdoesntexist uninsdeletekey; Components: Knights_of_the_Nine
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\Oblivion - Shivering Isles; ValueType: string; Flags: createvalueifdoesntexist uninsdeletekey; Components: Shivering_Isles

[/more]. Заявленная Вами ошибка у меня не была обнаружена.

Добавлено:

Цитата:
Почему может не работать такой код?

В принципе он работает, но проигрывание видео начинается непосредственно во время установки, если надо, чтобы видео запускалось сразу - попробуйте [more=так]
[Files]
Source: clock.avi; DestDir: {tmp}; Flags: dontcopy

[Code]
const
AviFrameWidth = 500; // ширина кадра
AviFrameHeight = 500; // высота кадра

var
CommandString: String;
FileName: String;
AviFrameTop: Integer;
AviFrameLeft: Integer;

function mciSendString(lpstrCommand: string; lpstrReturnString: PChar; uReturnLength:integer; hwndCallback:integer):integer;
external 'mciSendStringA@winmm.dll stdcall';

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

procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('clock.avi'));
FileName:= ExpandConstant('{tmp}\clock.avi');
AviFrameTop:= GetSystemMetrics(17) / 2 - AviFrameHeight / 2;
AviFrameLeft:= GetSystemMetrics(16) / 2 - AviFrameWidth / 2;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
begin
CommandString:= 'Open ' + FileName + ' type AVIVideo alias AVIFile parent ' + IntToStr(MainForm.Handle) + ' style child';
mciSendString(CommandString, '', 0, 0);

CommandString:= 'put AVIFile window at ' +
IntToStr(AviFrameLeft) + ' ' + IntToStr(AviFrameTop) + ' ' +
IntToStr(AviFrameWidth) + ' ' + IntToStr(AviFrameHeight);
mciSendString(CommandString, '', 0, 0);

//CommandString:= 'Play AVIFile fullscreen'; // полноэкранный режим
CommandString:= 'Play AVIFile repeat';
mciSendString(CommandString, '', 0, 0);
end;
end;

procedure DeinitializeSetup();
begin
CommandString:= 'Close AVIFile'; // закрываем при выходе
mciSendString(CommandString, '', 0, 0);
end;
[/more]

Цитата:
При запуске инсталятор некоторое время "висит", затем появляется стандартный диалог и всё.

А включены ли в инсталлятор другие файлы? Возможно, затягивается извлечение файлов во временную директорию до нужного .avi - в этом случае используйте флаг solidbreak.

Добавлено:
Cryzer
[more=Подробнее]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssInstall) and RegKeyExists(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.avi') then
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.avi', 'ProgID', 'BSPlayerFile.AVI')
end;
[/more]...
Автор: Cryzer
Дата сообщения: 20.01.2008 16:18
iTASmania_Inc, спасибо! =)
Автор: Gideon Vi
Дата сообщения: 20.01.2008 16:46

Цитата:
Эта ошибка, наверное, больше относится к секции [Components], хотя не исключены другие конфликты. Попробуйте скомпилировать данный пример. Заявленная Вами ошибка у меня не была обнаружена.

Спасибо, попробую

Цитата:
В принципе он работает, но проигрывание видео начинается непосредственно во время установки

То есть, только после того, как была нажата кнопка "Install"?

Цитата:
сли надо, чтобы видео запускалось сразу - попробуйте так

Да, вот именно так мне и нужно. Только я не понял, чем этот код отличается от того, что я взял в руководстве из шапки.
Автор: iTASmania_Inc
Дата сообщения: 20.01.2008 16:51
Gideon Vi

Цитата:
То есть, только после того, как была нажата кнопка "Install"?

Да.

Цитата:
Только я не понял, чем этот код отличается от того, что я взял в руководстве из шапки.

Ну, в руководстве Kindly используется процедура CurStepChanged, в моём коде CurPageChanged - отличия в хелпе.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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