Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 [110] 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Юрій_Окропірідзе@vk
17-12-2014, 00:25
Юрій_Окропірідзе@vk, kotyarko@fb, добавлю, координаты правильней указывать так:
Код:
Left := ScaleX( ... );
Top := ScaleY( ... );
Width := ScaleX( ... );
Height := ScaleX( ... );
//SetBounds( ScaleX( Left ), ScaleY( Top ), ScaleX( Width ), ScaleY( Height ) )
Чтобы потом невозникало проблем, типа: кнопка съехала, текст оказался не там, где должен быть и т.д. »
Ребята , я только начинаю все это учить и для начинающего можна как то по проще ?

saurn
17-12-2014, 00:37
Не сказал бы. »
При указании по-простому координаты являются фактическими. И в этом случае колличество точек на дюйм, на конечной машине, до лампочки.
Для наглядности:
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp


[code]
procedure InitializeWizard();
begin
WizardForm.ClientHeight := 376;
WizardForm.ClientWidth := 691;
//WizardForm.ClientHeight := ScaleY(376);
//WizardForm.ClientWidth := ScaleX(691);
end;
Запустите такой инстал при стандартном размере текста и, на первый взгляд, все будет нормально. А теперь измените размер шрифта в системе, скажем на средний. Так что, хозяин-барин, но пользователям это врятли понравится.

Юрій_Окропірідзе@vk
17-12-2014, 00:44
Короче как сделать инстал так как справа , примерных размеров https://yadi.sk/i/G9y08jdjdRhpL

saurn
17-12-2014, 01:02
я только начинаю все это учить »
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[code]
procedure ModifyWizardForm();
begin
with WizardForm do
begin
//форма мастера
BorderStyle := bsDialog;// Стиль бордюра окна
ClientWidth := ScaleX( 700 );// ширина окна
ClientHeight := ScaleY( 355 ); // высота окна
Position := poScreenCenter; // позиция окна, в данном случае по центру экрана
//основные элементы формы
// указываем координаты с помощью procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
//procedure SetBounds(отступ от левого края, отступ от веркнего края, ширина, высота: Integer);
OuterNotebook.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 302 ) );// внешний ноутбук
InnerNotebook.SetBounds( ScaleX( 12 ), ScaleY( 62 ), ScaleX( 474 ), ScaleY( 238 ) );// внутренний ноутбук
Bevel1.SetBounds( ScaleX( 0 ), ScaleY( 60 ), ScaleX( ClientWidth ), ScaleY( 3 ) );// верхняя линия
Bevel.SetBounds( ScaleX( 0 ), ScaleY( 302 ), ScaleX( ClientWidth ), ScaleY( 2 ) );// нижняя линия
BeveledLabel.Top := ScaleY( 294 );

MainPanel.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 60 ) ); // заглавная панель
WizardSmallBitmapImage.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 60 ) );// маленькое изображение в углу мастера
PageNameLabel.SetBounds( ScaleX( 16 ), ScaleY( 10 ), ScaleX( 324 ), ScaleY( 14 ) );// заголовок страницы
PageDescriptionLabel.SetBounds( ScaleX( 24 ), ScaleY( 26 ), ScaleX( 316 ), ScaleY( 28 ) );// подзаголовок страницы

BackButton.SetBounds( ScaleX( 454 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );// кнопка назад
NextButton.SetBounds( ScaleX( 534 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );// кнопка далее
CancelButton.SetBounds( ScaleX( 614 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );// кнопка отмена
end;
end;

procedure InitializeWizard();
begin
ModifyWizardForm();
end;

kotyarko@fb
17-12-2014, 01:27
Запустите такой инстал при стандартном размере текста и, на первый взгляд, все будет нормально. А теперь измените размер шрифта в системе, скажем на средний. »
Одно и то же.

saurn
17-12-2014, 01:38
Одно и то же. »
Ой ли?
http://i66.fastpic.ru/thumb/2014/1217/14/2795f4bf0c3e16e65046004b312f5214.jpeg (http://fastpic.ru/view/66/2014/1217/2795f4bf0c3e16e65046004b312f5214.jpg.html)
Следует учитывать, что хотя бы у одного из тысячи ваших пользователей может быть установлен другой размер шрифта(колличество точек на дюйм)

kotyarko@fb
17-12-2014, 01:55
Следует учитывать, что хотя бы у одного из тысячи ваших пользователей может быть установлен другой размер шрифта(колличество точек на дюйм) »
Для этого было введено предупреждение, если масштабирование включено.

saurn
17-12-2014, 02:08
предупреждение, если масштабирование включено. »
Скрин с вашего инстала, при разрешении 120 на дюйм. На нем видно о чем я говорил. Думаю коментарии излишни.
http://i68.fastpic.ru/thumb/2014/1217/c5/9951aa8dee72723d4c06eb24ed9512c5.jpeg (http://fastpic.ru/view/68/2014/1217/9951aa8dee72723d4c06eb24ed9512c5.jpg.html)
Чтобы избежать этих проблем, координаты контролов необходимо указывать согласно размеру клиента, что и происходит при использовании функций ScaleX( ... ), ScaleY( ... ).
Понятно, что проще и быстрее написать проверку на предмет нестандартного размера шрифта, чем перелопативать половину скрипта, но каков смысл этого предупреждения? Увидел пользователь сообщение, что у него в системе включено масштабирование, и начинаются лишние телодвижения(пойди, измени размер шрифта, если вообще знаешь где, выйди из системы, чтобы применить изменения)... Большинству это не понравится. По опыту знаю, многие даже не снимают гирьку с кнопочки Далее, не говоря уж о изменениях настроек системы. Лучше и правильней потратить больше времени на написание скрипта, чтобы результат устраивал автора и не вызывал головной боли у пользователя. Но это мое мнение. А там, конечно, кому как.

kotyarko@fb
17-12-2014, 15:19
Скрин с вашего инстала, при разрешении 120 на дюйм. На нем видно о чем я говорил. Думаю коментарии излишни. »
А я и не утверждал, что у меня с масштабированием нет проблем.

но каков смысл этого предупреждения? Увидел пользователь сообщение, что у него в системе включено масштабирование »
..и будет в курсе, в чём проблема если что-то не так.

Лучше и правильней потратить больше времени на написание скрипта, чтобы результат устраивал автора и не вызывал головной боли у пользователя. »
Согласен. Тогда попробую всё сделать через шкалы, спасибо за разъяснения.

El Sanchez
18-12-2014, 10:22
Подскажите пожалуйста как изменить размер окна инсталлятора »
Вот процедура, в параметрах указываем относительные/абсолютные размеры.

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

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

[CustomMessages]
ru.WizardDeltaWidthInvalid=Прирост формы по ширине должен быть в диапазоне от %1 до %2
ru.WizardDeltaHeightInvalid=Прирост формы по высоте должен быть в диапазоне от %1 до %2
ru.WizardWidthInvalid=Ширина формы должна быть в диапазоне от 0 до %1
ru.WizardHeightInvalid=Высота формы должна быть в диапазоне от 0 до %1

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
SPI_GETWORKAREA = $0030;

// Large Integer Functions
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';
// Configuration Reference
function SystemParametersInfo(uiAction, uiParam: UINT; var pvParam: TRect; fWinIni: UINT): BOOL; external 'SystemParametersInfo{#A}@user32.dll stdcall';

////////////////////////////////////////////////////////////////////////////
procedure RecreateWizardForm(const cx, cy: Longint; const IsDelta: Boolean);
// IsDelta : True - cx, cy is delta width/height, False - cx, cy is width/height
// cx......: delta width / width
// cy......: delta height / height
var
rt: TRect;
dx, dy: Longint;
begin
{ get deltas }
if not IsDelta then
begin
cx := cx - WizardForm.Width;
cy := cy - WizardForm.Height;
end;

{ check deltas }
if SystemParametersInfo(SPI_GETWORKAREA, 0, rt, 0) then
begin
{ check delta width }
if (cx < -WizardForm.Width) or (cx > rt.Right - WizardForm.Width) then
begin
if IsDelta then
MsgBox(FmtMessage(CustomMessage('WizardDeltaWidthInvalid'), [IntToStr(-WizardForm.Width), IntToStr(rt.Right - WizardForm.Width)]), mbError, MB_OK)
else
MsgBox(FmtMessage(CustomMessage('WizardWidthInvalid'), [IntToStr(rt.Right)]), mbError, MB_OK);
Exit;
end;

{ check delta height }
if (cy < -WizardForm.Height) or (cy > rt.Bottom - WizardForm.Height) then
begin
if IsDelta then
MsgBox(FmtMessage(CustomMessage('WizardDeltaHeightInvalid'), [IntToStr(-WizardForm.Height), IntToStr(rt.Bottom - WizardForm.Height)]), mbError, MB_OK)
else
MsgBox(FmtMessage(CustomMessage('WizardHeightInvalid'), [IntToStr(rt.Bottom)]), mbError, MB_OK);
Exit;
end;
end;

{ WizardForm }
with WizardForm do
begin
{ WizardForm }
Width := Width + cx;
Height := Height + cy;

{ buttons }
CancelButton.Left := CancelButton.Left + cx;
CancelButton.Top := CancelButton.Top + cy;
NextButton.Left := NextButton.Left + cx;
NextButton.Top := NextButton.Top + cy;
BackButton.Left := BackButton.Left + cx;
BackButton.Top := BackButton.Top + cy;

{ common }
OuterNotebook.ClientWidth := ClientWidth;
OuterNotebook.ClientHeight := OuterNotebook.ClientHeight + cy;
InnerNotebook.Width := InnerNotebook.Width + cx;
InnerNotebook.Height := InnerNotebook.Height + cy;
MainPanel.ClientWidth := ClientWidth;
WizardSmallBitmapImage.Left := WizardSmallBitmapImage.Left + cx;
PageNameLabel.Width := PageNameLabel.Width + cx;
PageDescriptionLabel.Width := PageDescriptionLabel.Width + cx;
Bevel1.Width := Bevel1.Width + cx;
Bevel.Width := Bevel.Width + cx;
Bevel.Top := Bevel.Top + cy;
BeveledLabel.Top := BeveledLabel.Top + cy;

{ wpWelcome }
dx := MulDiv(cy, WizardBitmapImage.Width, WizardBitmapImage.Height);
WizardBitmapImage.Width := WizardBitmapImage.Width + dx;
WizardBitmapImage.Height := WizardBitmapImage.Height + cy;
WelcomeLabel1.Left := WelcomeLabel1.Left + dx;
WelcomeLabel1.Width := WelcomeLabel1.Width + cx - dx;
dy := WelcomeLabel1.Height;
WelcomeLabel1.AdjustHeight;
dy := WelcomeLabel1.Height - dy;
WelcomeLabel2.Top := WelcomeLabel2.Top + dy;
WelcomeLabel2.Left := WelcomeLabel2.Left + dx;
WelcomeLabel2.Width := WelcomeLabel2.Width + cx - dx;
WelcomeLabel2.AdjustHeight;

{ wpLicense }
LicenseLabel1.Width := LicenseLabel1.Width + cx;
dy := LicenseLabel1.Height;
LicenseLabel1.AdjustHeight;
dy := LicenseLabel1.Height - dy;
LicenseMemo.Top := LicenseMemo.Top + dy;
LicenseMemo.Width := LicenseMemo.Width + cx;
LicenseMemo.Height := LicenseMemo.Height + cy - dy;
LicenseAcceptedRadio.Top := LicenseAcceptedRadio.Top + cy;
LicenseAcceptedRadio.Width := LicenseAcceptedRadio.Width + cx;
LicenseNotAcceptedRadio.Top := LicenseNotAcceptedRadio.Top + cy;
LicenseNotAcceptedRadio.Width := LicenseNotAcceptedRadio.Width + cx;

{ wpPassword }
PasswordLabel.Width := PasswordLabel.Width + cx;
dy := PasswordLabel.Height;
PasswordLabel.AdjustHeight;
dy := PasswordLabel.Height - dy;
PasswordEditLabel.Top := PasswordEditLabel.Top + dy;
PasswordEditLabel.Width := PasswordEditLabel.Width + cx;
PasswordEdit.Top := PasswordEdit.Top + dy;
PasswordEdit.Width := PasswordEdit.Width + cx;

{ wpInfoBefore }
InfoBeforeClickLabel.Width := InfoBeforeClickLabel.Width + cx;
dy := InfoBeforeClickLabel.Height;
InfoBeforeClickLabel.AdjustHeight;
dy := InfoBeforeClickLabel.Height - dy;
InfoBeforeMemo.Top := InfoBeforeMemo.Top + dy;
InfoBeforeMemo.Width := InfoBeforeMemo.Width + cx;
InfoBeforeMemo.Height := InfoBeforeMemo.Height + cy - dy;

{ wpUserInfo }
UserInfoNameLabel.Width := UserInfoNameLabel.Width + cx;
UserInfoNameEdit.Width := UserInfoNameEdit.Width + cx;
UserInfoOrgLabel.Width := UserInfoOrgLabel.Width + cx;
UserInfoOrgEdit.Width := UserInfoOrgEdit.Width + cx;
UserInfoSerialLabel.Width := UserInfoSerialLabel.Width + cx;
UserInfoSerialEdit.Width := UserInfoSerialEdit.Width + cx;

{ wpSelectDir }
SelectDirLabel.Width := SelectDirLabel.Width + cx;
SelectDirLabel.AdjustHeight;
SelectDirBrowseLabel.Width := SelectDirBrowseLabel.Width + cx;
dy := SelectDirBrowseLabel.Height;
SelectDirBrowseLabel.AdjustHeight;
dy := SelectDirBrowseLabel.Height - dy;
DirEdit.Top := DirEdit.Top + dy;
DirEdit.Width := DirEdit.Width + cx;
DirBrowseButton.Top := DirBrowseButton.Top + dy;
DirBrowseButton.Left := DirBrowseButton.Left + cx;
DiskSpaceLabel.Width := DiskSpaceLabel.Width + cx;
dy := DiskSpaceLabel.Height;
DiskSpaceLabel.AdjustHeight;
dy := DiskSpaceLabel.Height - dy;
DiskSpaceLabel.Top := DiskSpaceLabel.Top + cy - dy;

{ wpSelectComponents }
SelectComponentsLabel.Width := SelectComponentsLabel.Width + cx;
dy := SelectComponentsLabel.Height;
SelectComponentsLabel.AdjustHeight;
dy := SelectComponentsLabel.Height - dy;
TypesCombo.Top := TypesCombo.Top + dy;
TypesCombo.Width := TypesCombo.Width + cx;
ComponentsList.Top := ComponentsList.Top + dy;
ComponentsList.Width := ComponentsList.Width + cx;
ComponentsList.Height := ComponentsList.Height + cy - dy;
ComponentsDiskSpaceLabel.Width := ComponentsDiskSpaceLabel.Width + cx;
dy := ComponentsDiskSpaceLabel.Height;
ComponentsDiskSpaceLabel.AdjustHeight;
dy := ComponentsDiskSpaceLabel.Height - dy;
ComponentsDiskSpaceLabel.Top := ComponentsDiskSpaceLabel.Top + cy - dy;

{ wpSelectProgramGroup }
SelectStartMenuFolderLabel.Width := SelectStartMenuFolderLabel.Width + cx;
SelectStartMenuFolderLabel.AdjustHeight;
SelectStartMenuFolderBrowseLabel.Width := SelectStartMenuFolderBrowseLabel.Width + cx;
dy := SelectStartMenuFolderBrowseLabel.Height;
SelectStartMenuFolderBrowseLabel.AdjustHeight;
dy := SelectStartMenuFolderBrowseLabel.Height - dy;
GroupEdit.Top := GroupEdit.Top + dy;
GroupEdit.Width := GroupEdit.Width + cx;
GroupBrowseButton.Top := GroupBrowseButton.Top + dy;
GroupBrowseButton.Left := GroupBrowseButton.Left + cx;
NoIconsCheck.Top := NoIconsCheck.Top + cy;
NoIconsCheck.Width := NoIconsCheck.Width + cx;

{ wpSelectTasks }
SelectTasksLabel.Width := SelectTasksLabel.Width + cx;
dy := SelectTasksLabel.Height;
SelectTasksLabel.AdjustHeight;
dy := SelectTasksLabel.Height - dy;
TasksList.Top := TasksList.Top + dy;
TasksList.Width := TasksList.Width + cx;
TasksList.Height := TasksList.Height + cy - dy;

{ wpReady }
ReadyLabel.Width := ReadyLabel.Width + cx;
dy := ReadyLabel.Height;
ReadyLabel.AdjustHeight;
dy := ReadyLabel.Height - dy;
ReadyMemo.Top := ReadyMemo.Top + dy;
ReadyMemo.Width := ReadyMemo.Width + cx;
ReadyMemo.Height := ReadyMemo.Height + cy - dy;

{ wpPreparing }
PreparingLabel.Width := PreparingLabel.Width + cx;
PreparingMemo.Width := PreparingMemo.Width + cx;
PreparingMemo.Height := PreparingMemo.Height + cy;

{ wpInstalling }
StatusLabel.Width := StatusLabel.Width + cx;
FilenameLabel.Width := FilenameLabel.Width + cx;
ProgressGauge.Width := ProgressGauge.Width + cx;

{ wpInfoAfter }
InfoAfterClickLabel.Width := InfoAfterClickLabel.Width + cx;
dy := InfoAfterClickLabel.Height;
InfoAfterClickLabel.AdjustHeight;
dy := InfoAfterClickLabel.Height - dy;
InfoAfterMemo.Top := InfoAfterMemo.Top + dy;
InfoAfterMemo.Width := InfoAfterMemo.Width + cx;
InfoAfterMemo.Height := InfoAfterMemo.Height + cy - dy;

{ wpFinished }
WizardBitmapImage2.Width := WizardBitmapImage2.Width + dx;
WizardBitmapImage2.Height := WizardBitmapImage2.Height + cy;
FinishedHeadingLabel.Left := FinishedHeadingLabel.Left + dx;
FinishedHeadingLabel.Width := FinishedHeadingLabel.Width + cx - dx;
dy := FinishedHeadingLabel.Height;
FinishedHeadingLabel.AdjustHeight;
dy := FinishedHeadingLabel.Height - dy;
FinishedLabel.Top := FinishedLabel.Top + dy;
FinishedLabel.Left := FinishedLabel.Left + dx;
FinishedLabel.Width := FinishedLabel.Width + cx - dx;
FinishedLabel.AdjustHeight;
RunList.Left := RunList.Left + dx;
RunList.Width := RunList.Width + cx - dx;
dy := RunList.Top;
RunList.Top := FinishedPage.Height - RunList.Height;
dy := RunList.Top - dy;
YesRadio.Top := YesRadio.Top + dy;
YesRadio.Left := YesRadio.Left + dx;
YesRadio.Width := YesRadio.Width + cx - dx;
NoRadio.Top := NoRadio.Top + dy;
NoRadio.Left := NoRadio.Left + dx;
NoRadio.Width := NoRadio.Width + cx - dx;

{ new position }
Center;
end;
end;

///////////////////////////
procedure InitializeWizard;
begin
RecreateWizardForm(150, 50, True);
end;

Kashtan007
20-12-2014, 13:40
Всем привет.
Как на странице TasksPage изменить текст на кнопке, вместо "Далее" написать "Установить".
Заранее спасибо за ответ!

saurn
20-12-2014, 13:57
Как на странице TasksPage изменить текст на кнопке, вместо "Далее" написать "Установить". »
procedure CurPageChanged( CurPageID: Integer );
begin
case CurPageID of
wpSelectTasks: WizardForm.NextButton.Caption := SetupMessage( msgButtonInstall );
end;
end;

Irenis
20-12-2014, 19:18
Всем приветик :) Возник небольшой вопрос. Нужно сделать такой установщик, который бы автоматически устанавливал некоторые файлы игры по пути C:\Users\%Username%\AppData\Local\Temp\Client. Где и что в скрипте написать, какой код?

То есть например, когда мне нужно было, чтоб установка происходила в ProgramData, подсказали такой код:
[Files]
Source: "C:\ProgramData\Firefly Studios\*"; DestDir: "{commonappdata}\Firefly Studios"; Flags: ignoreversion recursesubdirs createallsubdirs

Может тут тоже все просто и нужно просто что то другое написать вместо {commonappdata}? Подскажите пожалуйста. Спасибо :yes:

TryRooM
20-12-2014, 20:05
Irenis,

Папка Local {localappdata}
Папка Temp служит для хранения временных файлов. Настройки и компоненты там не хранят.

Irenis
20-12-2014, 20:22
Папка Local {localappdata}
Папка Temp служит для хранения временных файлов. Настройки и компоненты там не хранят. »
Спасибо большое, сейчас попробую, что получится :) Вообще да, читала, что Temp для хранения временных файлов. Но игру качала с оф. сайта. И основной контент установился именно в эту папку.

Kashtan007
21-12-2014, 00:08
При нажатии на компонент воспроизводится звук, делал по этому примеру Скачать (http://rghost.ru/private/59840900/12b8a790f58f2e1ab518ab214a714cd8)
Есть проблема, что когда ты выбираешь компонент, к которому прикручен звук, то после этого звук воспроизводится на всех компонентах.
На сколько я понимаю, то когда мы выбираем компонент со звуком, то все остальные компоненты унаследуют от него звук, как сделать так, чтобы звук не воспроизводился на других компонентах.
Заранее спасибо за помощь!

Dodakaedr
21-12-2014, 00:15
то все остальные компоненты унаследуют от него звук »
Проверил, у меня такого нету, все норм.

Kashtan007
21-12-2014, 00:26
Dodakaedr, сорри, немного не то кинул.
Вот держите Тык (http://rghost.ru/private/59841503/f08ec95d0c55872ba2c9415f26cce82e)
Выберите компонент со звуком, а потом нажмите на компонент "Пример".

Dodakaedr
21-12-2014, 00:30
Kashtan007, "Тык" - страница с ошибкой.

Kashtan007
21-12-2014, 00:34
Dodakaedr, исправил.




© OSzone.net 2001-2012