Войти

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


Страниц : 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

diman_21Ru
05-02-2014, 22:23
Хоть убейся но в скрипт backup папки res-mods и галочку в компоненты я не как добавить не могу =(
Если все же кто то может добавить мне это в скрипт я скину в личку только скажите :)

Nordek
06-02-2014, 00:33
Хоть убейся но в скрипт backup папки res-mods и галочку в компоненты я не как добавить не могу =( »Не верю. Знаешь в чём твоя беда? В том что ты невнимателен, не хочешь учиться и ленивый - даже для себя самого, поверь, я знаю о чём пишу.
С лёгкостью это наглядно покажу: Сообщение 1751 (http://forum.oszone.net/post-2274075-1751.html), Сообщение 2116 (http://forum.oszone.net/post-2302543-2116.html) - кому это всё пишется?

Показываю на примере этого (http://forum.oszone.net/post-2302937-2127.html) кода который предоставил saurn:
Подчеркнул красным

procedure CreateCustomControls();
var
i, Len: Integer;
begin
SetArrayLength(arrayChk, 2);
Len := GetArrayLength(arrayChk) - 1;

for i := 0 to Len do
begin
arrayChk[i] := TCheckBox.Create(nil);
with arrayChk[i] do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(0), ScaleY(100 + i*24), ScaleX(15), ScaleY(15));
end;
end;

SetArrayLength(arrayLbl, 2);
Len := GetArrayLength(arrayLbl) - 1;

for i := 0 to Len do
begin
arrayLbl[i] := TLabel.Create(nil);
with arrayLbl[i] do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(18), ScaleY(101 + i*24), ScaleX(WizardForm.DirEdit.Width), ScaleY(15));
Font.Color := $008000;
case i of
0: Caption := 'Backup res_mods folder';
Len: Caption := 'Backup xvm folder only';
end;
end;
end;
end;


procedure CreateCustomControls();
var
i, Len: Integer;
begin
SetArrayLength(arrayChk, 2);
Len := GetArrayLength(arrayChk) - 1;

for i := 0 to Len do
begin
arrayChk[i] := TCheckBox.Create(nil);
with arrayChk[i] do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(0), ScaleY(180 + i*24), ScaleX(15), ScaleY(15));
end;
end;

SetArrayLength(arrayLbl, 2);
Len := GetArrayLength(arrayLbl) - 1;

for i := 0 to Len do
begin
arrayLbl[i] := TLabel.Create(nil);
with arrayLbl[i] do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(18), ScaleY(181 + i*24), ScaleX(WizardForm.DirEdit.Width), ScaleY(15));
Font.Color := $008000;
case i of
0: Caption := 'Backup res_mods folder';
Len: Caption := 'Backup xvm folder only';
end;
end;
end;
end;

habib2302
06-02-2014, 10:09
доброе время суток. как добавить окно с запросом продолжить установку
http://i.imgur.com/8huaUlF.jpg (http://i.imgur.com/O8n4VFq.png)
и после соглашения появляется маленькое окно процесса установки
http://i.imgur.com/5JIsKh7.jpg (http://i.imgur.com/0XaFdsT.png)

diman_21Ru
06-02-2014, 19:16
Source: {app}res_mods*; DestDir: {app}res_mods_old; Flags: external overwritereadonly ignoreversion; выходит ошибка пи установке модов !

Shkutu
06-02-2014, 19:21
Приветствую!
Подскажите плиз, как можно изменять текст стандартных сообщений в коде (не через секцию Messages)? Нужно на InstallingPage менять текст в зависимости от различных условий

saurn
06-02-2014, 19:50
habib2302
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
OutputDir=...
BitmapResource=bitmap:compiler:WizModernSmallImage.bmp

[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external

[code]
#define A = (Defined UNICODE) ? "W" : "A"


const
MB_ICONNONE = $00000000;
MB_ICONSTOP = $00000010;
MB_ICONEXCLAMATION = $00000030;
MB_ICONASTERISK = $00000040;

MB_CANCELTRYCONTINUE = $00000006;

MB_APPLMODAL = $00000000;
MB_SYSTEMMODAL = $00001000;
MB_TASKMODAL = $00002000;

MB_RIGHT = $00080000;

IDTRYAGAIN = 10;
IDCONTINUE = 11;

BM_CLICK = $00F5;

WM_USER = $0400;
PBM_SETPOS = WM_USER + 2;
GWL_WNDPROC = - 4;


type
LPCTSTR = String;
_HINSTANCE = LongWord;

LPARAM = Integer;
WPARAM = Integer;
LRESULT = Integer;
TFNWndProc = Integer;


function MessageBox(HWND: hWnd; lpText: LPCTSTR; lpCaption: LPCTSTR; uType: UINT): Integer; external 'MessageBox{#A}@user32.dll stdcall';
function LoadBitmap(hInstance: _HINSTANCE; lpBitmapName: LPCTSTR): HBITMAP; external 'LoadBitmap{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';
function SetWindowText(hWnd: HWND; lpString: LPCTSTR): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';


var
swInitialize: Boolean;
OldProgressBarProc: Longint;


function ProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
if Msg = PBM_SETPOS then with WizardForm do SetWindowText( StatusLabel.Handle, Format('%s'#32'%s', [SetupMessage(msgStatusExtractFiles), FormatFloat('0.#0 %', (ProgressGauge.Position*100)/ProgressGauge.Max)]) );

Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;


function InitializeSetup(): Boolean;
begin
Result := MessageBox(Application.Handle, 'Продолжить установку?', 'Подтверждение установки', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON1 or MB_APPLMODAL) = 6;
swInitialize := Result;
end;


procedure InitializeWizard();
begin
with WizardForm do
begin
ClientHeight := ScaleY(97);
BorderStyle := bsDialog;
Position := poScreenCenter;

InnerNotebook.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(97));
MainPanel.Hide;
WizardSmallBitmapImage.Hide;
PageDescriptionLabel.Hide;
PageNameLabel.Hide;
FilenameLabel.Hide;

with StatusLabel do
begin
Left := ScaleX(64);
Top := ScaleY(24);
end;

ProgressGauge.Left := ScaleX(64);

with TBitmapImage.Create(nil) do
begin
Parent := WizardForm.InstallingPage;
SetBounds(ScaleX(8), ScaleY(24), ScaleX(48), ScaleY(48));
Bitmap.Handle := LoadBitmap(HInstance, '_IS_BITMAP');
end;
end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
PostMessage(WizardForm.NextButton.Handle, BM_CLICK, 0, 0);
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall: OldProgressBarProc := SetWindowLong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, CallbackAddr('ProgressBarProc'));
ssPostInstall: SetWindowlong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, OldProgressBarProc);
ssDone: MessageBox(WizardForm.Handle, 'Установка завершена', 'Завершение установки', MB_OK or MB_ICONASTERISK or MB_DEFBUTTON1 or MB_APPLMODAL)
end;
end;


procedure DeinitializeSetup();
begin
if swInitialize then SetWindowlong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, OldProgressBarProc);
end;

UPD: поправил пример

Подскажите плиз, как можно изменять текст стандартных сообщений в коде (не через секцию Messages)? Нужно на InstallingPage менять текст в зависимости от различных условий »
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall: if...условие... then WizardForm.StatusLabel.Caption :=
end;
end;

Или в CurPageChanged. Можете это делать и в своей функции, где описаны условия и изменения зависящие от них, и вызывать функцию на нужном этапе.
-------------------------------------------------------------------------------------------

Source: {app}res_mods*; DestDir: {app}res_mods_old; Flags: external overwritereadonly ignoreversion; выходит ошибка пи установке модов ! »
Потому что секция файлов тут - одна сплошная ошибка. Устал пояснять, но все же повторю, сжато:
Source: Папка, где находятся устанавливаемые файлы\*; DestDir: папка, куда файлы устанавливаются; Flags: recursesubdirs overwritereadonly createallsubdirs ignoreversion;

diman_21Ru, может, почитаете наконец справку?

Nordek
06-02-2014, 21:02
Source: {app}res_mods*; DestDir: {app}res_mods_old »
Первое на что обрати внимание, это слешь \
Source: {app}\res_mods\*; DestDir: {app}\res_mods_old; Flags: ignoreversion overwritereadonly createallsubdirs recursesubdirs;

нет флагов
recursesubdirs - Обрабатывать подкаталоги
createallsubdirs - Создавать все подкаталоги

так же присутствует флаг
external - Внешний источник (это значит что если флаг external присутствует, то файлы и папки в инсталлятор не войдут. Будут браться из рядом лежащей папке который указан в инсталляторе).

Source: {app}res_mods* »
И что за {app} вначале, который в Source? У тебя есть этот каталог?

diman_21Ru
06-02-2014, 23:35
Как можно в этом скрипте почистить и убрать все чтобы могли появится Компоненты
http://rghost.ru/52251071

Shkutu
07-02-2014, 01:03
saurn, спасибо. А не подскажете, какой компонент надо использовать, чтобы также поменять тот текст, что расположен над StatusLabel?

saurn
07-02-2014, 01:54
какой компонент надо использовать, чтобы также поменять тот текст, что расположен над StatusLabel? »
В шапке формы?
WizardForm.PageNameLabel.Caption := ''; //заголовок
WizardForm.PageDescriptionLabel.Caption := ''; //подзаголовок

Эти контролы одни для всех страниц, и их значения меняются в зависимости от текущей страницы мастера.

Debugger
07-02-2014, 06:30
Планирую сделать перепаковку плагина к Photoshop. Плагин идет в двух вариантах - 32 и 64 бит. Хочу чтобы во время инсталляции скрипт определял битность операционной системы и в зависимости от этого в окне выбора компонентов предлагал либо на выбор оба варианта установки, в случае 64-битной ОС, либо в случае 32-битной, либо вообще не предлагал бы выбор либо галочка 32 бита была бы недоступна. Вопрос - возможно ли сделать это без необходимости писать большой и нудный код в секции [Code]? И какой инсталлятор в этоп плане гибче - Inno Setup или NSIS?

Gnom_aka_Lexander
07-02-2014, 07:22
Debugger, Check: IsWin64 для 64 и Check: not IsWin64 для х32. по сути является булевой функцией, что позволяет использовать ее во всех секциях, в тех местах, где требуется ответ в виде да-нет на вопрос - Система х64?
Пример использования Check из справки:

Существует один необязательный параметр, поддерживаемый всеми секциями, содержащие параметры. Это:
Check
Имя проверочной функции, которая определяет, должен быть применен параметр или нет. Эта функция должна быть либо описана в секции [Сode], либо быть встроенной функцией.

Кроме простого имени можно использовать логические выражения. Для справки обратитесь к разделу Параметры секций [Components] и [Tasks].

Для каждой check-функции можно добавить список параметров, разделенных запятыми, которые инсталлятор должен предоставить check-функции. Допустимые типы параметров: строковый (String), целочисленный (Integer) и логический (Boolean). Строковые параметры могут содержать константы. These constants will not be automatically expanded. If you want to pass an expanded constant, существует одна встроенная функция, которую можно добавлять в список параметров: это ExpandConstant.

Например:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Check: MyProgCheckSource: "A\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck(ExpandConstant('{app}\A'))
Source: "B\MYFILE.TXT"; DestDir: "{app}"; Check: DirExists(ExpandConstant('{app}\B'))
Все check-функции должны возвращать значение типа Boolean. Если check-функция (или логическое выражение) возвращает True, значение будет применено, иначе будет пропущено.

Инсталлятор может вызывать каждую check-функцию по нескольку раз, даже если только одно значение использует эту check-функцию. Если ваша функция выполняет длинный сегмент кода, можно оптимизировать его - выполнив его однажды, можно присвоить полученное значение глобальной переменной.

Check-функция не вызывается для значения, для которого инсталлятор уже определил, что не будет его применять.

Пример секции [Сode], содержащей проверочные функции (check-функции). Функция DirExists является DirExists встроенной функцией, поэтому не описана в секции [Сode].

[Сode]
var
MyProgChecked: Boolean;
MyProgCheckResult: Boolean;

function MyProgCheck(): Boolean;
begin
if not MyProgChecked then
begin
MyProgCheckResult := MsgBox('Do you want to install MyProg.exe to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes; MyProgChecked := True;
end;
Result := MyProgCheckResult;
end;

function MyDirCheck(DirName: String): Boolean;
begin
Result := DirExists(DirName);
end;
тут проверка собственной функции, тебе-же нужна встроенная IsWin64, поэтому в коде писать вообще ничего не нужно. смотри пример для секции файлов, аналогично это делается для компонент и задач.

Ivan_009
07-02-2014, 10:07
Как добавить сглаживание шрифта через код как сдесь, чтобы на всех системах было одинаковое отображение или это фотошоп не пойму... :dont-know

Подскажите пожалуйста...

P.S : Проверял на Windows 7 и Windows XP отображается одинаково...

diman_21Ru
07-02-2014, 11:35
Как Объединить скрипт с файлом bin в один

habib2302
07-02-2014, 11:40
saurn,
а можно с .png'ешной картинкой через ботву
http://i.imgur.com/TISwBQG.jpg (http://i.imgur.com/tfqLRlq.png)

Ivan_009
07-02-2014, 11:42
Как Объединить скрипт с файлом bin в один »

Используй для этих целей IsDone. И справочку незабудь почитать... :read:

saurn
07-02-2014, 12:28
а можно с .png'ешной картинкой через ботву »
Архив с примером во вложении.

Как Объединить скрипт с файлом bin в один »
Удалить из секции [Setup] директиву DiskSpanning, или задать ей значение no

The_Immortal
07-02-2014, 13:49
Друзья, подскажите, пожалуйста, как можно в скрипте реализовать следующее в режиме verysilent:

если разрядность ОСи x86, то отменяем установку и в КОНСОЛЬ возвращаем какое-либо сообщение с кодом.


Пример того, что я хочу увидеть при запуске собранного инсталлятора Inno из-под CMD на 86-разрядной ОС:
C:\Users\The_Immortal>program.exe
Unsupported OS (x86)

C:\Users\The_Immortal>

diman_21Ru
07-02-2014, 16:10
Как можно растянуть окно для текста компонентов на весь экран ?
Искал искал не как не нашел где именно менять ,помогите пожалуйста

Ivan_009
07-02-2014, 20:18
Как добавить в начале скрипта проверку на Расширенную версию Inno Setup Compiler...




© OSzone.net 2001-2012