Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
Gnom_aka_Lexander
29-05-2012, 09:48
FrozenProtector, Вы на правильном пути. Но, не стоит чистить компонент-лист - инсталл на него рассчитывает, и не найдя того, что ожидал там увидеть - естественно, расстроится. Можно создать свой чеклистбокс и там уже делать все, что душе угодно.
bear!, ты все правильно делаешь, в принцыпе.
Идеальный вариант - ищешь в разделе реестра Uninstall путь к папке с программой, которую хочешь русифицировать. Наиболее вероятно, что в пути будет подпапка с большим количеством букво-цифер, заключенная в фигурные скобки - это будет AppID программы - все официальные пачи на нем и базируются обычно. далее указываешь именно этот ключ и параметр, в котором находится путь к программе - все должно получиться »
Ничего не получается, установку предлагает в C:\Program Files\CivilizationV
GoshaPolo
29-05-2012, 11:40
Подскажите как решить три ниже перечисленных вопроса:
1. Как поменять заголовок окна Windows? Желательно для каждой страницы установки свой индивидуальный заголовок.
2. Как поменять сообщение, которое вылазит при закрытии программы установки с уведомлением о подтверждении закрытия, на свое?
3. Как убрать определенную страницу программы установки, если я не хочу, чтобы она вылазила?
Заранее спасибо за ответы или ссылки на ответы :)
Johny777
29-05-2012, 12:16
GoshaPolo,
1.
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[ Code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpWelcome then
begin
WizardForm.Caption := 'Я страница приветствия';
end;
////////////////////////////////////////
if CurPageID=wpSelectDir then
begin
WizardForm.Caption := 'Я страница выбоа директории установки';
end;
//////////////////////////////////////////////////
if CurPageID=wpInstalling then /// страница установки
begin
WizardForm.Caption := 'Я страница установки';
end;
///////////////////////////////////////////////////////
if CurPageID=wpFinished then /// завершающая страница
begin
WizardForm.Caption := 'Я страница завершения';
end;
end;
2.
а) форма (выдрал у себя из скрипта, только без картинки :)):
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[ Code]
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
var
NoButton, YesButton: TButton;
MyExit: TSetupForm;
begin
Confirm := False;
begin
MyExit := CreateCustomForm();
with MyExit do
begin
Position := poScreenCenter;
ClientWidth := ScaleX(154);
ClientHeight := ScaleY(65);
Caption := 'Уверен*(а)?';
Color := clBtnFace;
DeleteMenu(GetSystemMenu(MyExit.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
SetClassLong(MyExit.Handle, -26, GetClassLong(Wizardform.Handle, -26) or $200);
end;
NoButton := TButton.Create(MyExit);
with NoButton do
begin
Parent := MyExit;
Caption := ExpandConstant(SetupMessage(msgButtonNo));
SetBounds(ScaleX(3), ScaleY(20), ScaleX(71), ScaleY(25));
ModalResult:= mrNo;
end;
YesButton := TButton.Create(MyExit);
with YesButton do
begin
Caption := ExpandConstant(SetupMessage(msgButtonYes));
Parent := MyExit;
SetBounds(NoButton.Left + ScaleX(77), NoButton.Top, NoButton.Width, NoButton.Height);
ModalResult := mrYes;
end;
end;
if MyExit.ShowModal() = mrNo then Cancel := False;
end;
б) месседжбокс:
[Setup]
AppName=MyApp
AppverName=MyApp
DefaultDirName={pf}\MyApp
[ code]
procedure WizardClose(Sender: TObject; var Action: TCloseAction);
Begin
Action:= caNone;
If MsgBox('Вы хотите закрыть мастер установки?', mbInformation, MB_YESNO) = IDYES then
MainForm.Close;
End;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:= True;
Confirm:= False;
end;
procedure InitializeWizard();
begin
WizardForm.OnClose:= @WizardClose
end;
в) другой пример:
[Setup]
AppName=MyApp
AppverName=MyApp
DefaultDirName={pf}\MyApp
[ code]
procedure WizardFormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MsgBox('Ты опух?',mbConfirmation,MB_YESNO)=IDNO then CanClose:=False;
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
end;
procedure InitializeWizard;
begin
WizardForm.OnCloseQuery:=@WizardFormCloseQuery;
end;
3.
[Setup]
AppName=MyApp
AppverName=MyApp
DefaultDirName={pf}\MyApp
//можно так:
//подробнее в справке
DisableWelcomePage=yes
[ code]
//или так
function ShouldSkipPage(PageID: Integer): Boolean; /// встроенная функция пропуска страниц
begin
case /// в случае айди страницы "wpWelcome", то результат true, те пропустить
PageID of wpWelcome: Result := True;
end;
end;
ай ди страниц:
wpWelcome = 1;
wpLicense = 2;
wpPassword = 3;
wpInfoBefore = 4;
wpUserInfo = 5;
wpSelectDir = 6;
wpSelectComponents = 7;
wpSelectProgramGroup = 8;
wpSelectTasks = 9;
wpReady = 10;
wpPreparing = 11;
wpInstalling = 12;
wpInfoAfter = 13;
wpFinished = 14;
YourCustomPageName.ID /// твоя страница с .ID на конце
GoshaPolo
29-05-2012, 12:35
Johny777, спасибо за ответы :clapping:
Если не сложно еще три, я так думаю для знающих людей простых, вопроса:
1. Как можно задать свое названия ярлыка для деинсталляции в меню Пуск?
2. Как задать координаты окна установки при появлении? Например я хочу, чтобы окно вылазило в правом нижнем углу, или строго по центру экрана например.
3. Как задать на свой, а не стандартный, чекбокс функцию создания ярлыка на рабочем столе и функцию запуска программы после окончания установки?
Johny777
29-05-2012, 12:39
GoshaPolo,
прочитай ка ты дружочек сначала справочку по 1-му вопросу!
(вот тебе русская справка http://sendfile.su/570136)
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,
по второму вопросу для ярлыка:
[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа
OutputDir=.
[Icons]
Name: "{commondesktop}\Моя программа"; Filename: "{app}\MyProg.exe"; Check: Make_Icon
[ Code]
var
IconCheckBox: TNewCheckBox;
function Make_Icon: Boolean;
begin
Result:=IconCheckBox.Checked;
end;
procedure InitializeWizard();
begin
IconCheckBox := TNewCheckBox.Create(WizardForm);
with IconCheckBox do
begin
Parent := WizardForm;
SetBounds(ScaleX(48), ScaleY(328), ScaleX(97), ScaleY(17))
Caption := 'Создать ярлык';
end;
end;
для запуска (секция RUN) таким же макаром через Check
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
по третьему:
через GetSystemMetrics,
здесь http://innoultra.ru/?page_id=18 под 43-м номером 2 варианта
GoshaPolo
29-05-2012, 13:09
Johny777, спасибо еще раз!
По поводу чекбоксов еще вопросик маленький. Как их поместить на определенной странице, а не на всех?
Johny777
29-05-2012, 13:12
Как их поместить на определенной странице, а не на всех? »
Parent := WizardForm.SelectDirPage; например
можно на панели или на форме разместить (если на форме, то TNewCheckBox.Create(название формы);
или другая страница
только вверх сдвинь, тк он низко находится
alert30
чтобы маскировать установщик в NSIS »
впервые слышу
можно поинтересоваться зачем тебе это?
в ...\Inno Setup 5\Scripts\NSIS_SkinCrafter\ не оно?
GoshaPolo
29-05-2012, 13:17
Johny777, спасибо еще раз! Очень выручил :yahoo:
Johny777, что-то не могу разобраться. Прописал чекбокс на запуск программы в секцию RUN и он запускается сразу после странички с прогрессбаром. А как сделать, чтобы он запускался только после нажатия завершения установки на последней странице?
Johny777
29-05-2012, 13:51
GoshaPolo,
есть этапы
пример (в порядке выполнения) :
[Setup]
AppName=Name
AppVerName=Name
DefaultDirName={pf}\Name
compression=none
[ Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
/////
if CurStep = ssInstall then /// перед устанновкой
begin
end;
///////
if CurStep = ssPostInstall then /// после установки
begin
end;
//////
if CurStep = ssDone then /// то что тебе надо
begin
Exec(ExpandConstant('{sys}\calc.exe'), '', '', SW_SHOW, ewNoWait, ResultCode); /// запустим калькулятор
// другой пример Exec(ExpandConstant('{src}\outer\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\outer\DirectX'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
//////////////////////////////// расположение файла ///////////////////// параметры ////////// рабочая папка ///////////////////// флаги ////// (другие - SW_HIDE, ewNoWait)
end;
///////
end;
и в справке в поиск вбей "Exec" и "ShellExec" без кавычек
поправил свою опечатку в коде
и обрати внимание на флаг "postinstall" для секции RUN
GoshaPolo
29-05-2012, 15:29
Johny777, спасибо!
Флаг "postinstall" приметил сразу, сделал через него, но не сразу сообразил как будет это действовать, сейчас разобрался и делаю через него :)
впервые слышу
можно поинтересоваться зачем тебе это? »
Johny777
Допустим так: прогресс-бар по-короче, выполнение команд при распаковке инсталлятор и его какие-либо записи над прогесс-баром, кнопочка "Детали..." под прогесс-баром и при его нажатии должен появиться список выполненных команд.
Johny777
29-05-2012, 17:17
нопочка "Детали..." под прогесс-баром и при его нажатии должен появиться список выполненных команд »
так?
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp
Compression=none
[Files]
Source: C:\Windows\Fonts\*; DestDir: {app}; BeforeInstall: AddToMemo;
[ code]
var
DetailsButton: TNewButton;
FilesMemo: TNewMemo;
Flag: boolean;
procedure AddToMemo();
var
AFile: String;
begin
AFile:= ExpandConstant(CurrentFilename);
if ExtractFileExt(AFile)='' then
FilesMemo.Lines.Add('CreateFolder: '+RemoveBackslash(AFile)) else
FilesMemo.Lines.Add('Extract: '+AFile);
end;
procedure HideShow(Sender: TObject);
begin
If not Flag then begin
FilesMemo.Hide;
DetailsButton.Caption:='Детали...';
Flag:= True;
end else begin
FilesMemo.Show;
DetailsButton.Caption:='Скрыть';
Flag:= False;
end;
end;
procedure InitializeWizard();
begin
WizardForm.ProgressGauge.Top := ScaleY(34);
FilesMemo := TNewMemo.Create(WizardForm);
with FilesMemo do
begin
SetBounds(WizardForm.InstallingPage.Left, ScaleY(88), WizardForm.ProgressGauge.Width, ScaleY(145));
Parent := WizardForm.InstallingPage;
WordWrap:= True;
ScrollBars:= ssVertical;
ReadOnly:= True;
Visible := false;
Clear;
end;
DetailsButton := TNewButton.Create(WizardForm);
with DetailsButton do
begin
Parent := WizardForm.InstallingPage;
SetBounds(ScaleX(334), ScaleY(60), ScaleX(75), ScaleY(25));
Caption := 'Детали';
OnClick := @HideShow
end;
Flag:= True;
end;
GoshaPolo
29-05-2012, 17:30
Еще вопросик возник. Никак не могу совладать с флагом "waituntilidle", может быть я его не правильно понимаю, при запуске приложений после установки. Запускаются сразу все, которые прописаны. Как их запустить по очереди, чтобы пока не закроется процесс первого приложения, второе не запускалось, а затем сразу запускалось второе?
Sanshalay
29-05-2012, 17:39
Всем привет. Скачал скрипт. Там не было страницы "Лицензия". Я его создал, но теперь при запуске инсталлятора и переходе на страницу Лицензия у меня становится не активна кнопка "Далее". Я знаю почему. Потому что не активирована Radio "Я согласен с ЛС". Но вот в чем проблема. Я не ставил эти Radio. Поэтому у меня к вам вопрос. Как поставить их ("Я согласен с ЛС" и "Я не согласен с ЛС")?
Исходный скрипт: http://www.sendspace.com/file/d77j3y
Мой скрипт: http://www.sendspace.com/file/c98ply
Johny777
29-05-2012, 17:40
с флагом "waituntilidle" »
эх
почти
Тебе нужен флаг сразу под ним "waituntilterminated"
Ко всем строкам в RUN для внешних экзешников припиши которые должны выполняться по очереди
вот что важно:
Из справки: "Все параметры выполняются инсталлятором в том порядке, в котором они располагаются в секции." (сверху вниз от начала секции до конца)
Sanshalay,
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp
LicenseFile=compiler:License.Txt
[ code]
procedure InitializeWizard();
begin
WizardForm.LicenseAcceptedRadio.Checked := True; // по умолчанию согласен. Те чекбокс по умолчанию отмечен
end;
Sanshalay
29-05-2012, 18:05
Johny777, это то, что мне надо! Спасибо огромное!
Поправте в чём ошибка, хочу добавить 1 картинку на все страницы (стандартные, дополнительных нету) инсталера. Сама картинка подключена в [Files]
var
pnl: TPanel;
procedure InitializeWizard(); <---- на это ругается
begin
ExtractTemporaryFile('img.jpg');
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\img.jpg'));
///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel1.Font.Color;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel2.Font.Color;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////
///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Left:= 40;
Top:= 137;
Parent:= pnl;
end;
with DirBrowseButton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
with SelectDirBitmapImage do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top - 62;
Stretch:= True;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirLabel.AutoSize;
SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
WordWrap:= WizardForm.SelectDirLabel.WordWrap;
Caption:= WizardForm.SelectDirLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirLabel.Font.Color;
Style:= WizardForm.SelectDirLabel.Font.Style;
Name:= WizardForm.SelectDirLabel.Font.Name;
Size:= WizardForm.SelectDirLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= WizardForm.DiskSpaceLabel.Font.Color;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////
///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
ready_str: string;
begin
ready_str:= WizardForm.ReadyMemo.Text;
with TLabel.Create(pnl) do
begin
SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Caption:= ready_str;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TBevel.Create(WizardForm) do
begin
SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.ReadyLabel.AutoSize;
SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
WordWrap:= WizardForm.ReadyLabel.WordWrap;
Caption:= WizardForm.ReadyLabel.Caption;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////
///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Left:= 40;
Top:= 115;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FilenameLabel.AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= WizardForm.FilenameLabel.Font.Color;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel.AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= WizardForm.StatusLabel.Font.Color;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////
///////////////////////FinishedPage//////////////////////////////////////
var
CheckBox: array of TNewCheckBox;
procedure CheckBoxClick(Sender: TObject);
begin
if TNewCheckBox(Sender).Checked then
WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;
procedure LabelClick(Sender: TObject);
begin
if CheckBox[TLabel(Sender).Tag].Checked then
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
CheckBox[TLabel(Sender).Tag].Checked:= False;
end
else
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
CheckBox[TLabel(Sender).Tag].Checked:= True;
end;
end;
procedure HideRunList(Control: TWinControl);
var
i, t: Integer;
str: string;
begin
if WizardForm.RunList.Items.Count > 0 then
begin
WizardForm.RunList.Hide;
SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
for i:= 0 to WizardForm.RunList.Items.Count-1 do
begin
CheckBox[i]:= TNewCheckBox.Create(Control);
with CheckBox[i] do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
Tag:= i;
Checked:= WizardForm.RunList.Checked[i];
Caption:= WizardForm.RunList.Items.Strings[i];
OnClick:= @CheckBoxClick;
Color:= clWhite;
Parent:= Control;
end;
str:= WizardForm.RunList.Items.Strings[i];
with TLabel.Create(WizardForm) do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
WizardForm.RunList.Width,14);
Caption:= str;
Tag:= i;
OnClick:= @LabelClick;
Transparent:= True;
Parent:= Control;
end;
t:= t + 20;
end;
end;
end;
procedure FinishedPage;
begin
HideRunList(pnl);
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedHeadingLabel.Font.Color;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel.AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedLabel.Font.Color;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////
procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl;
Bevel.Parent:= pnl;
pnl.Repaint;
end;
if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageNameLabel.AutoSize;
SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
Caption:= WizardForm.PageNameLabel.Caption;
with Font do
begin
Color:= WizardForm.PageNameLabel.Font.Color;
Style:= WizardForm.PageNameLabel.Font.Style;
Name:= WizardForm.PageNameLabel.Font.Name;
Size:= WizardForm.PageNameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
Caption:= WizardForm.PageDescriptionLabel.Caption;
with Font do
begin
Color:= WizardForm.PageDescriptionLabel.Font.Color;
Style:= WizardForm.PageDescriptionLabel.Font.Style;
Name:= WizardForm.PageDescriptionLabel.Font.Name;
Size:= WizardForm.PageDescriptionLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpSelectDir then SelectDirPage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;
И вопрос второй, как изменять цвет текста, на всех страницах инсталера
Sanshalay
29-05-2012, 19:03
ToCamoe, я начинающий и сильно в код не всматривался. Но вот зачем после InitializeWizard ставить скобки? \\\Проверил. Дело не в этом
И он у тебя не закрыт
Найди
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\img.jpg'));
Замени на
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\img.jpg'));
end;
У тебя слов begin; 52 штуки. А end; всего лишь 50.
Sanshalay, код изначально не мой, я в попытках его дописать ) убирание скобок и закрытие не помогло. Ошибка осталась, судя по всему закрывать ближе к концу кода надо.
С учётом того end; что указал ты, их количество равно 52 на 52
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.