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

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

Автор: JuNoS
Дата сообщения: 18.01.2009 16:50
Помогите, нужно это все обьединить.

[more][Code]
const SmallWidth = 494;
var PageNameLabel, PageDescriptionLabel: TLabel;

Procedure NSISImageHeader;
Begin
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
    SetBounds(WizardForm.PageNameLabel.Left, WizardForm.PageNameLabel.Top, WizardForm.PageNameLabel.Width - 32, WizardForm.PageNameLabel.Height)
AutoSize:= False; WordWrap:= True; Transparent:= True;
Font.Color:= clBlack    //clWhite;
Font.Style:= WizardForm.PageNameLabel.Font.Style;
Parent:= WizardForm.MainPanel;
end;
PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
    SetBounds(WizardForm.PageDescriptionLabel.Left, WizardForm.PageDescriptionLabel.Top, WizardForm.PageDescriptionLabel.Width - 32, WizardForm.PageDescriptionLabel.Height)
AutoSize:= False; WordWrap:= True; Transparent:= True;
Font.Color:= clBlack    //clWhite;
Parent:= WizardForm.MainPanel;
end;
WizardForm.PageNameLabel.Hide; WizardForm.PageDescriptionLabel.Hide;
    WizardForm.WizardSmallBitmapImage.Left:= WizardForm.WizardSmallBitmapImage.Left - (SmallWidth - WizardForm.WizardSmallBitmapImage.Width) + 2
    WizardForm.WizardSmallBitmapImage.Width:= SmallWidth
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
End;

Procedure InitializeWizard();
Begin
    NSISImageHeader;
End;
//CD-KEY
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpWelcome then
begin
if IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
Confirm := False;
end;
end;
if not IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
Confirm := False;
end;
end;
end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
Key: String;
ErrorCode: Integer;
begin
Result := True;
if CurPageID = wpWelcome then
begin
if IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
WizardForm.Visible := False;
Exec(ExpandConstant('{src}\Support\Mirror''s Edge_code.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
Result := True;
end;
end;

if not IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
WizardForm.Visible := False;
Exec(ExpandConstant('{src}\Support\Mirror''s Edge_code.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
Result := True;
end;
end;

if IsWin64 then
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc', '', Key) then
begin
if Key = '' then
begin
RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc');
end;
end;
end;

if not IsWin64 then
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Electronic Arts\EA Games\Mirror''s Edge\ergc', '', Key) then
begin
if Key = '' then
begin
RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Electronic Arts\EA Games\Mirror''s Edge\ergc');
end;
end;
end;


WizardForm.Visible := True;

if IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
Result := False;
WizardForm.Close;
end;
end;

if not IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
Result := False;
WizardForm.Close;
end;
end;
end;
end;
//7-zip
var
ProgressBar : TNewProgressBar;
ExtractFile:TNewStaticText;
Button1:TButton;

procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:pchar); external 'Extract7z@files:is7z.dll stdcall';
procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';

procedure InitializeWizard();
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
ExtractFile:=TNewStaticText.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(55);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.max := 100;
ProgressBar.Position := 0;
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width := Width;
ExtractFile.top:=Top + ScaleX(35);
ExtractFile.caption:='Распаковка файлов';
end;
end;

procedure Button1OnClick(Sender: TObject);
begin
CancelExtract;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
Button1:=TButton.create(WizardForm);
Button1.parent:=WizardForm;
Button1.width:=135;
Button1.caption:='Отменить распаковку';
Button1.left:=260;
Button1.top:=WizardForm.cancelbutton.top;
Button1.OnClick:=@Button1OnClick;
try
Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{src}') + '\1.7z', ExpandConstant('{app}'), '');
Button1.visible:=false;
except
MsgBox('Неверный пароль!', mbInformation, MB_OK);
Button1.visible:=false;
end;
end;
end;[/more]
Автор: Serega0675
Дата сообщения: 18.01.2009 17:29

Цитата:
нужно это все обьединить
Я конечно не профи, только учусь, но [more=попробуйте][Code]
const
SmallWidth = 494;
var
PageNameLabel, PageDescriptionLabel: TLabel;

ProgressBar : TNewProgressBar;
ExtractFile:TNewStaticText;
Button1:TButton;

procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:pchar); external 'Extract7z@files:is7z.dll stdcall';
procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';


Procedure NSISImageHeader;
Begin
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
SetBounds(WizardForm.PageNameLabel.Left, WizardForm.PageNameLabel.Top, WizardForm.PageNameLabel.Width - 32, WizardForm.PageNameLabel.Height)
AutoSize:= False; WordWrap:= True; Transparent:= True;
Font.Color:= clBlack //clWhite;
Font.Style:= WizardForm.PageNameLabel.Font.Style;
Parent:= WizardForm.MainPanel;
end;
PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
SetBounds(WizardForm.PageDescriptionLabel.Left, WizardForm.PageDescriptionLabel.Top, WizardForm.PageDescriptionLabel.Width - 32, WizardForm.PageDescriptionLabel.Height)
AutoSize:= False; WordWrap:= True; Transparent:= True;
Font.Color:= clBlack //clWhite;
Parent:= WizardForm.MainPanel;
end;
WizardForm.PageNameLabel.Hide; WizardForm.PageDescriptionLabel.Hide;
WizardForm.WizardSmallBitmapImage.Left:= WizardForm.WizardSmallBitmapImage.Left - (SmallWidth - WizardForm.WizardSmallBitmapImage.Width) + 2
WizardForm.WizardSmallBitmapImage.Width:= SmallWidth
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
End;

Procedure InitializeWizard();
Begin
NSISImageHeader;

begin
ProgressBar := TNewProgressBar.Create(WizardForm);
ExtractFile:=TNewStaticText.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(55);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.max := 100;
ProgressBar.Position := 0;
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width := Width;
ExtractFile.top:=Top + ScaleX(35);
ExtractFile.caption:='Распаковка файлов';
end;
end;
end;

//CD-KEY
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpWelcome then
begin
if IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
Confirm := False;
end;
end;
if not IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
Confirm := False;
end;
end;
end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
Key: String;
ErrorCode: Integer;
begin
Result := True;
if CurPageID = wpWelcome then
begin
if IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
WizardForm.Visible := False;
Exec(ExpandConstant('{src}\Support\Mirror''s Edge_code.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
Result := True;
end;
end;

if not IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
WizardForm.Visible := False;
Exec(ExpandConstant('{src}\Support\Mirror''s Edge_code.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
Result := True;
end;
end;

if IsWin64 then
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc', '', Key) then
begin
if Key = '' then
begin
RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc');
end;
end;
end;

if not IsWin64 then
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Electronic Arts\EA Games\Mirror''s Edge\ergc', '', Key) then
begin
if Key = '' then
begin
RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Electronic Arts\EA Games\Mirror''s Edge\ergc');
end;
end;
end;


WizardForm.Visible := True;

if IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
Result := False;
WizardForm.Close;
end;
end;

if not IsWin64 then
begin
if not RegkeyExists(HKLM, 'SOFTWARE\Electronic Arts\EA Games\Mirror''s Edge\ergc') then
begin
Result := False;
WizardForm.Close;
end;
end;
end;
end;

procedure Button1OnClick(Sender: TObject);
begin
CancelExtract;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
Button1:=TButton.create(WizardForm);
Button1.parent:=WizardForm;
Button1.width:=135;
Button1.caption:='Отменить распаковку';
Button1.left:=260;
Button1.top:=WizardForm.cancelbutton.top;
Button1.OnClick:=@Button1OnClick;
try
Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{src}') + '\1.7z', ExpandConstant('{app}'), '');
Button1.visible:=false;
except
MsgBox('Неверный пароль!', mbInformation, MB_OK);
Button1.visible:=false;
end;
end;
end;
[/more]
Автор: JuNoS
Дата сообщения: 18.01.2009 17:34
Serega0675

Большое спасибо!
Автор: Sig666
Дата сообщения: 18.01.2009 20:53
Подскажите, пож, как проверить - пустой ключ реестра или нет.
Автор: Serega0675
Дата сообщения: 18.01.2009 21:15
Sig666, посмотрите в коллекции скриптов из шапки... Скрипт называется UpdatePath.


Добавлено:
В предыдущей части темы задавал вопрос, вот [more=решение][Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
russian.ComponentsName1=Моя программа™
russian.ComponentsName2=Помощь
russian.ComponentsName2_1=Документация
russian.ComponentsName2_2=Руководство пользователя
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
russian.ComponentsDescription1=Устанавливается обязательно
russian.ComponentsDescription2=Помощь
russian.ComponentsDescription3=Прочитать документацию
russian.ComponentsDescription4=Прочитать руководство пользователя

[Components]
Name: main; Description: {cm:ComponentsName1}; Check: IsComponent1; Types: full custom; Flags: fixed
Name: help; Description: {cm:ComponentsName2}; Types: full custom
Name: help\documentation; Description: {cm:ComponentsName2_1}; Check: IsComponent2; Types: full custom
Name: help\manual; Description: {cm:ComponentsName2_2}; Check: IsComponent3; Types: full custom

[Files]
Source: compiler:Libraries\descctrl.dll; Flags: dontcopy
Source: {src}\main\proga.exe; DestDir: {app}; Components: main; Flags: ignoreversion external
Source: {src}\main\documentation.txt; DestDir: {app}; Components: help\documentation; Flags: ignoreversion external
Source: {src}\main\manual.txt; DestDir: {app}; Components: help\manual; Flags: ignoreversion external

[Code]
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

function BuildIsComponent1(CLP: String): String;
begin
CLP:='';
if IsComponentSelected('main') then CLP:='Моя программа™';
if not IsComponentSelected('main') then CLP:='';
Result:=CLP;
end;

function BuildIsComponent2(CLP: String): String;
begin
CLP:='';
if IsComponentSelected('help\documentation') then CLP:='Документация';
if not IsComponentSelected('help\documentation') then CLP:='';
Result:=CLP;
end;

function BuildIsComponent3(CLP: String): String;
begin
CLP:='';
if IsComponentSelected('help\manual') then CLP:='Руководство пользователя';
if not IsComponentSelected('help\manual') then CLP:='';
Result:=CLP;
end;

function IsComponent1:boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
begin
If (FileSearch('proga.exe', ExpandConstant('{src}\main'))='') then
Result:=False
end;
end;

function IsComponent2:boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
begin
If (FileSearch('documentation.txt', ExpandConstant('{src}\main'))='') then
Result:=False
end;
end;

function IsComponent3:boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
begin
If (FileSearch('manual.txt', ExpandConstant('{src}\main'))='') then
Result:=False
end;
end;

procedure DeinitializeSetup();
begin
disabledesc();
end;

procedure InitializeWizard();
var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

begin
WizardForm.TypesCombo.Visible:=False;
WizardForm.ComponentsList.Height := ScaleY(181) - WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Width := ScaleX(417);

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := ScaleY(190);
InfoPanel.Left := ScaleX(0);
InfoPanel.Width := ScaleX(417);
InfoPanel.Height := ScaleY(40);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(7);
InfoCaption.Top := InfoPanel.Top - ScaleY(6);
InfoCaption.Font.Color := clActiveCaption;

Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(403);
Info.Top := ScaleY(12);
Info.Height := ScaleY(24);
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
ExpandConstant('{code:BuildIsComponent1};')+
ExpandConstant('{cm:ComponentsDescription2};')+
ExpandConstant('{code:BuildIsComponent2};')+
ExpandConstant('{code:BuildIsComponent3};')
);
end;
[/more]. Может кому пригодится.
P.S.
Единственное, пока не могу сообразить, как сделать пропуск описания компонента, если используется ComponentsListTVStyle=true и список свёрнут...
Автор: Sig666
Дата сообщения: 18.01.2009 22:21
Serega0675

Спасибо, уже по своему разобрался.

Еще вопрос: как называется картинка папки на странице выбора директории?
Автор: Kondrbr
Дата сообщения: 18.01.2009 23:33
Да как сделать Inno Setup Compiler 5.2.3 на Русском?
Английский интерфейс и всё тут.
Автор: Serega0675
Дата сообщения: 18.01.2009 23:45
Kondrbr, так ведь на русификатор ссылка в шапке...
Автор: Kondrbr
Дата сообщения: 19.01.2009 02:34
Serega0675 пробовал. Пишет ошибка MD5 в Compil32.exe и всё.
Русик вроде для 5.2.0
Автор: Vselennaya
Дата сообщения: 19.01.2009 03:26
Подскажите пожалуйста, как сменить иконку деинсталятора? А то у меня иконка setup и uninstall одинаковые получаются Пробовала так UninstallIconFile=C:\icon2.ico написать, но иконка остаётся прежней. Может ещё где-то что-то дописать надо?
Автор: KMH75
Дата сообщения: 19.01.2009 04:30
Сделайте видео урок, как сделать AutoRun.
Автор: Serega0675
Дата сообщения: 19.01.2009 08:10
Vselennaya

Цитата:
как сменить иконку деинсталятора?
[more=так][Setup]
UninstallDisplayIcon={app}\icon.ico

[Files]
Source: C:\icon.ico; DestDir: {app}
[/more]
Автор: SotM
Дата сообщения: 19.01.2009 08:11
Kondrbr
А зачем тебе компилятор на русском то?! Там этих слов то не очень много. Проще выучить что где находится, чем искать руссификатор.

Vselennaya
Вроде бы подобный вопрос уже здесь обсуждался. Глянь в предыдущей части.

KMH75
А по скромнее запросы нельзя делать?

Автор: Serega0675
Дата сообщения: 19.01.2009 08:39
Kondrbr
Попробуйте скачать от сюда

SotM, здравствуйте, подскажите как решить задачу
Автор: SotM
Дата сообщения: 19.01.2009 09:22
Serega0675
Глянь "CodeClasses.iss" в папке "Examples", там используется Label и на него можно кликнуть. MessageBox нельзя в данном случае использовать. Придется делать свою форму и на нее впихнуть нужные Labels...

Вот лишь отрывок из того [more=примера:]
Код:
procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.innosetup.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
var
URLLabel: TNewStaticText;
begin
URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'www.innosetup.com';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2;
URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);
end;
Автор: Serega0675
Дата сообщения: 19.01.2009 09:45
SotM, спасибо.
Скажу честно, вчера смотрел этот пример… но чем дальше в лес, тем больше дров... Одним словом я запутался... Извините за назойливость, но не поможете накидать приблизительно похожее на сообщение в моём вопросе...
Автор: SotM
Дата сообщения: 19.01.2009 10:03
Serega0675
Насколько я знаю, нельзя стандартными средствами подобное осуществить. Т.к. здесь должно быть отдельное диалоговое окно со ссылками. Можно сделать как в том примере, чтобы ссылки были уже НА самой странице (внизу например).
Автор: ExpeditorR
Дата сообщения: 19.01.2009 10:07
paul_smART

Цитата:
с длл-кой от прекомп-а не мучался, есть возможность ее привязать к инсталлеру?

Я увы прекомп не смотрел, времени не хватает вникать что это за зверь. Смотрел FreeArc, там на офф.сайте есть исходники на с++, и тому кто знает с++ не составит труда прикрутить его к inno, в данном случае я пасс.
Автор: Serega0675
Дата сообщения: 19.01.2009 10:16
SotM

Цитата:
Можно сделать как в том примере, чтобы ссылки были уже НА самой странице (внизу например).
Вполне устроит... Поможете?
Автор: SotM
Дата сообщения: 19.01.2009 11:01
Serega0675

Ну примерно [more=так.]
Код: [Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[no][Code][/no]
const
MB_ICONINFORMATION = $40;

function MessageBox(hWnd: Integer; lpText, lpCaption: string; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';
function GetFileTime(hfile: longint; var lpcreation, lpaccess, lpwrite: TFileTime): boolean;
external 'GetFileTime@kernel32.dll stdcall';

procedure AboutButtonOnClick(Sender: TObject);
var
hWnd: Integer;
begin
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
MessageBox(hWnd, '' #13 'My Program, версия 1.5' + #13#13 +
'Домашняя страница: http://........html' +#13#13 +
'Форум: http://........html' +#13#13 +
'Связаться с автором: My_Program@mail.ru', 'Информация', MB_OK or $40);
end;

procedure URLLabel1OnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.mail.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

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

procedure InitializeWizard();
var
AboutButton, CancelButton: TButton;
URLLabel1, URLLabel2: TNewStaticText;
begin
CancelButton := WizardForm.CancelButton;

AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := 'Подробнее';
AboutButton.ShowHint := True
AboutButton.Hint := 'О программе'
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;
AboutButton.Cursor := crHand;

URLLabel1 := TNewStaticText.Create(WizardForm);
URLLabel1.Caption := 'Сайт www.mail.ru';
URLLabel1.Cursor := crHand;
URLLabel1.OnClick := @URLLabel1OnClick;
URLLabel1.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel1.Font.Style := URLLabel1.Font.Style + [fsUnderline];
URLLabel1.Font.Color := clBlue;
URLLabel1.Top := WizardForm.ClientHeight - URLLabel1.Height * 3;
URLLabel1.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);

URLLabel2 := TNewStaticText.Create(WizardForm);
URLLabel2.Caption := 'Сайт www.goole.com';
URLLabel2.Cursor := crHand;
URLLabel2.OnClick := @URLLabel1OnClick;
URLLabel2.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel2.Font.Style := URLLabel2.Font.Style + [fsUnderline];
URLLabel2.Font.Color := clBlue;
URLLabel2.Top := WizardForm.ClientHeight - URLLabel1.Height * 2;
URLLabel2.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);
end;
Автор: Serega0675
Дата сообщения: 19.01.2009 11:13
SotM, спасибо.
А можно сделать, чтоб при нажатии на кнопку "Подробнее" открывалась новая форма с кнопкой "ОК", а уже на ЭТОЙ форме ссылки...
У меня встала проблема именно с новой формой и как туда повешать ссылки...
Автор: SotM
Дата сообщения: 19.01.2009 12:01
Serega0675
Так не получится, т.к. новые формы создаются только для визарда. Тебе ведь не нужна отдельная страница для визарда?
Через WinAPI такое можно сделать, но это муторно, и не в моих силах.
Автор: chelobey
Дата сообщения: 19.01.2009 13:39
Помогите облагородить [more=код...]
Код: [Setup]
AppName=Program
AppVerName=Program
AlwaysShowComponentsList=true
DefaultDirName={pf}\My Program
UsePreviousTasks=yes
ComponentsListTVStyle=true

[Components]
Name: prog; Description: program; Types: var1; Flags: exclusive
Name: cfg1; Description: config 1; Types: var2; Flags: exclusive
Name: cfg2; Description: config 2; Types: var2; Flags: exclusive

[Types]
Name: var1; Description: program
Name: var2; Description: program+config; Flags: iscustom

[Files]
Source: file.txt; DestDir: {app}; Components: prog

Source: file_1.1.1.txt; DestDir: {app}; Components: cfg1; Check: Check1
Source: file_1.1.2.txt; DestDir: {app}; Components: cfg1; Check: Check2
Source: file_1.2.1.txt; DestDir: {app}; Components: cfg1; Check: Check3
Source: file_1.2.2.txt; DestDir: {app}; Components: cfg1; Check: Check4

Source: file_2.1.1.txt; DestDir: {app}; Components: cfg2; Check: Check5
Source: file_2.1.2.txt; DestDir: {app}; Components: cfg2; Check: Check6
Source: file_2.2.1.txt; DestDir: {app}; Components: cfg2; Check: Check7
Source: file_2.2.2.txt; DestDir: {app}; Components: cfg2; Check: Check8

[no][Code][/no]

var
Page1, Page2: TWizardPage;
CheckListBox1, CheckListBox2: TNewCheckListBox;

function Check1: Boolean;
begin
Result:=CheckListBox1.ItemEnabled[1] and CheckListBox1.Checked[1]
end;

function Check2: Boolean;
begin
Result:=CheckListBox1.ItemEnabled[2] and CheckListBox1.Checked[2]
end;

function Check3: Boolean;
begin
Result:=CheckListBox1.ItemEnabled[4] and CheckListBox1.Checked[4]
end;

function Check4: Boolean;
begin
Result:=CheckListBox1.ItemEnabled[5] and CheckListBox1.Checked[5]
end;

function Check5: Boolean;
begin
Result:=CheckListBox2.ItemEnabled[1] and CheckListBox2.Checked[1]
end;

function Check6: Boolean;
begin
Result:=CheckListBox2.ItemEnabled[2] and CheckListBox2.Checked[2]
end;

function Check7: Boolean;
begin
Result:=CheckListBox2.ItemEnabled[4] and CheckListBox2.Checked[4]
end;

function Check8: Boolean;
begin
Result:=CheckListBox2.ItemEnabled[5] and CheckListBox2.Checked[5]
end;

procedure CreateTheWizardPages;
var
Page: TWizardPage;

begin
Page1:= CreateCustomPage(wpSelectComponents, 'TNewCheckListBox', 'page2')
CheckListBox1:= TNewCheckListBox.Create(Page1);
CheckListBox1.Width := Page1.SurfaceWidth - ScaleX(115);
CheckListBox1.Height := Page1.SurfaceHeight - ScaleY(30);
CheckListBox1.Flat := True;
CheckListBox1.Parent := Page1.Surface;
CheckListBox1.AddCheckBox('CheckBox1', '', 0, True, True, True, True, nil, True);
CheckListBox1.AddRadioButton('radiobutton1_1', '', 1, True, True, nil, False);
CheckListBox1.AddRadioButton('radiobutton1_2', '', 1, True, True, nil, False);
CheckListBox1.AddGroup('group1', '', 0, nil, True);
CheckListBox1.AddRadioButton('radiobutton_1_1', '', 1, True, True, nil, False);
CheckListBox1.AddRadioButton('radiobutton_1_2', '', 1, True, True, nil, False);

Page2:= CreateCustomPage(wpSelectComponents, 'TNewCheckListBox', 'page2')
CheckListBox2:= TNewCheckListBox.Create(Page2);
CheckListBox2.Width := Page2.SurfaceWidth - ScaleX(115);
CheckListBox2.Height := Page2.SurfaceHeight - ScaleY(30);
CheckListBox2.Flat := True;
CheckListBox2.Parent := Page2.Surface;
CheckListBox2.AddCheckBox('CheckBox2', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddRadioButton('radiobutton2_1', '', 1, True, True, nil, False);
CheckListBox2.AddRadioButton('radiobutton2_2', '', 1, True, True, nil, False);
CheckListBox2.AddGroup('group2', '', 0, nil, True);
CheckListBox2.AddRadioButton('radiobutton_2_1', '', 1, True, True, nil, False);
CheckListBox2.AddRadioButton('radiobutton_2_2', '', 1, True, True, nil, False);
end;

Procedure InitializeWizard();
begin
CreateTheWizardPages;

CheckListBox1.Checked[1]:=True
CheckListBox1.Checked[4]:=True

CheckListBox2.Checked[1]:=True
CheckListBox2.Checked[4]:=True
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
Case PageID of
Page1.ID,Page1.ID: Result:= not IsComponentSelected('cfg1');
Page1.ID,Page2.ID: Result:= not IsComponentSelected('cfg2');
end;
end;
Автор: SotM
Дата сообщения: 19.01.2009 14:33
chelobey:
Для начала научись правильно копи-пастить.

"Упростить"? Не понятно что именно нужно, но сделал что-то типа [more=этого.]
Код: [Files]
Source: file.txt; DestDir: {app}; Components: prog

Source: file_1.1.1.txt; DestDir: {app}; Components: cfg1; Check: MyCheck1(1,1)
Source: file_1.1.2.txt; DestDir: {app}; Components: cfg1; Check: MyCheck1(2,2)
Source: file_1.2.1.txt; DestDir: {app}; Components: cfg1; Check: MyCheck1(4,4)
Source: file_1.2.2.txt; DestDir: {app}; Components: cfg1; Check: MyCheck1(5,5)

Source: file_2.1.1.txt; DestDir: {app}; Components: cfg2; Check: MyCheck2(1,1)
Source: file_2.1.2.txt; DestDir: {app}; Components: cfg2; Check: MyCheck2(2,2)
Source: file_2.2.1.txt; DestDir: {app}; Components: cfg2; Check: MyCheck2(4,4)
Source: file_2.2.2.txt; DestDir: {app}; Components: cfg2; Check: MyCheck2(5,5)

[no][Code][/no]

var
Page1, Page2: TWizardPage;
CheckListBox1, CheckListBox2: TNewCheckListBox;

function MyCheck1( index1 : integer; index2 : integer ): Boolean;
begin
Result:=CheckListBox1.ItemEnabled[index1] and CheckListBox1.Checked[index2]
end;

function MyCheck2( index1 : integer; index2 : integer ): Boolean;
begin
Result:=CheckListBox2.ItemEnabled[index1] and CheckListBox2.Checked[index2]
end;
Автор: Serega0675
Дата сообщения: 19.01.2009 14:36
SotM, спасибо.
Автор: Dermuin
Дата сообщения: 19.01.2009 14:52
Помогите создать инстал как на скрине, найти не смог, у самого не получается, гдето в примерах видел пахожие элементы по частям но сейчас найти не могу.
Автор: chelobey
Дата сообщения: 19.01.2009 15:12
SotM, спасибо




Автор: Dimika
Дата сообщения: 19.01.2009 15:15
Привет, столкнулся с проблемой. Помогите ПЛЗ.
Из секции Run запускаются три exe файла, которые хоже кое-что устанавливаю. Но получается, что после копирования фалов инсталятором прогресс доходит до 100%, а потом начинается установка из Run.
Как сделать, чтобы прогресс-бар установки останавливался процентах на 70 и потом по 10 процентов на каждый из трех exe? И как обновлять позицию у прогресс-бара после того как запускаемый exe отработал?
Exe-шники запускаются с флагами waituntilterminated runhidden

Или если так сделать нельзя, то хотя бы сделать страницу с отдельным прогресс-баром для инструкций с секции Run.
не получается вставить форму между копированием файлов и запуском из Run
Автор: SotM
Дата сообщения: 19.01.2009 16:00
Dimika
Тут уже не один раз такое поднималось, поиск тебе поможет.
Но если хочешь быстрый ответ: не получится сделать прогресс бар для запуска внешних exe.
Автор: Dimika
Дата сообщения: 19.01.2009 18:45
SotM спасибо, попробую руками.
А как без действий пользователя перейти на следующую форму?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


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