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

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

Автор: Mataes
Дата сообщения: 19.09.2011 19:37
Вот, кстати, по itdownload вопрос. как убрать дефекты со скрина? Это я просто example скомпилил.
http://dl.dropbox.com/u/28692622/itdownload_bug.png
Автор: insombia
Дата сообщения: 19.09.2011 19:48
Как сделать чтобы при нажатии на компоненты открывалось окно новое как здесь http://rghost.ru/22232271?
Автор: Gnom3
Дата сообщения: 19.09.2011 20:28
insombia

Можно так:
[more=Выплывающие компоненты]
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
NewButton1: TNewButton;
Panel1: TPanel;

procedure NewButton1Click(Sender: TObject);
var
i:integer;
begin
i:=Panel1.Left;
If i= -Panel1.Width then
begin
WizardForm.CancelButton.Enabled:=False;
WizardForm.NextButton.Enabled:=False;
WizardForm.BackButton.Enabled:=False;
WizardForm.DirBrowseButton.Enabled:=False;
while True do
begin
if i>0 then i:=0;
Panel1.Left:= ScaleX(i);
WizardForm.SelectDirPage.Repaint;
if i=0 then Break;
i:=i+10;
end;
end else
begin
while True do
begin
if i<-Panel1.Width then i:=-Panel1.Width;
Panel1.Left:= ScaleX(i);
WizardForm.SelectDirPage.Repaint;
if i=-Panel1.Width then Break;
i:=i-10;
end;
WizardForm.CancelButton.Enabled:=True;
WizardForm.NextButton.Enabled:=True;
WizardForm.BackButton.Enabled:=True;
WizardForm.DirBrowseButton.Enabled:=True;
end;
end;

procedure InitializeWizard();
begin
{ Panel1 }
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Parent := WizardForm.SelectDirPage;
Top := ScaleY(0);
Width := WizardForm.SelectDirPage.Width;
Height := WizardForm.SelectDirPage.Height;
Left := -Panel1.Width;
end;

WizardForm.ComponentsDiskSpaceLabel.Parent := Panel1;
WizardForm.ComponentsList.Parent := Panel1;
WizardForm.TypesCombo.Parent := Panel1;
WizardForm.SelectComponentsLabel.Parent := Panel1;

NewButton1 := TNewButton.Create(WizardForm);
with NewButton1 do
begin
Parent := WizardForm;
Left := ScaleX(32);
Top := ScaleY(327);
Width := ScaleX(75);
Height := ScaleY(25);
Caption := 'Компоненты';
OnClick := @NewButton1Click;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
NewButton1.Hide;
if CurPageID=wpSelectDir then NewButton1.Show;
end;
[/more]
Автор: VASYAKRN
Дата сообщения: 19.09.2011 22:17
Nik1967 Как ти сделал такие переходи между страницами в свойом скрипте darksiders и prince of persia через ботву
Автор: nik1967
Дата сообщения: 19.09.2011 22:22
VASYAKRN, ну "prince of persia" не мой скрипт, а в "darksiders" смена страниц была реализована Shegorat'ом по мотивам скрипта BlackSelf'а.
Автор: VendettaDeToli
Дата сообщения: 19.09.2011 22:52
Подскажите пожалуйста, как убрать неактивную кнопку ОТМЕНА???
Автор: Despofix
Дата сообщения: 19.09.2011 23:33
Gnom3
а компоненты выбранные будут сохраняться если кнопки активными сделать при открытии панели? и возможно ли как то скрыть страницу компонентов или же к кнопке next.button прописать переход к другой странице?
Автор: Snoopak96
Дата сообщения: 19.09.2011 23:38
VendettaDeToli
procedure CurPageChanged(CurPageID: Integer);
begin case CurPageID of
wpFinished:
begin
MyCancelButton.hide;
end;
end;
end;
Автор: VendettaDeToli
Дата сообщения: 20.09.2011 00:33
Snoopak96

Цитата:
procedure CurPageChanged(CurPageID: Integer);
begin case CurPageID of
wpFinished:
begin
MyCancelButton.hide;
end;
end;
end;


Таким способом скрываться не хочет...
Автор: Despofix
Дата сообщения: 20.09.2011 02:36
попробуй так:

procedure CurPageChanged(CurPageID: Integer);
begin case CurPageID of
wpFinished:
begin
wizardform.cancelbutton.hide;
end;
end;
end;
Автор: ShadowHawk
Дата сообщения: 20.09.2011 09:31
Gnom3

Цитата:
ShadowHawk
Цитата: DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=2100000000
DiskClusterSize=4096
ReserveBytes=0
Compression=none
SolidCompression=no


это все вообще можно удалить, если внешние анпакеры используеш, это раз. Файлы, которые инсталлятор использует для себя, нужно указывать в самом начале секции файлс - это два.
Для этих файлов нужно задавать флаг solidbreack:


Спс! Никаких внешних анпакеров не использую. Необходимо максимально быстро запускать инсталлятор и так же быстро устанавливать. Т.е. лучший вариант если все файлы входящие в инсталлятор (нужные как для самого инсталлятора - красявости или DLL`ки и так же файлы для самой установки программы ) просто без изменения лежали пусть даже в BIN`е, но к ним был максимально быстрый доступ.

Секции [Files] на данный момент:

[more]
[Files]
; не загружаемые данные
Source: compiler:dll pack\descctrl.dll; Flags: dontcopy solidbreak noencryption
Source: compiler:dll pack\fairy.dll; Flags: dontcopy
Source: compiler:dll pack\iswin7.dll; Flags: dontcopy
Source: compiler:dll pack\isgsg.dll; Flags: dontcopy
Source: compiler:dll pack\ISSkin.dll; Flags: dontcopy
; картинки
Source: PIC\logo-7.png; Flags: dontcopy
Source: PIC\kubik.png; DestDir: "{tmp}"; Flags: dontcopy
Source: PIC\kubik_mini3_поворот на 180.bmp; DestDir: "{tmp}"; Flags: dontcopy
Source: PIC\consultant.bmp; DestDir: "{tmp}"; Flags: dontcopy

#sub AddOsnBaseF
#define _pos1 = pos(";", ib[i])
#define _pos2 = pos(":", ib[i])
#define _pos3 = pos("/", ib[i])
#define _pos4 = pos("\", ib[i])
#define _pos5 = pos("|", ib[i])

#define _len1 = _pos1-1
#define _len2 = _pos2-_pos1-1
#define _len3 = _pos3-_pos2-1
#define _len4 = _pos4-_pos3-1
#define _len5 = _pos5-_pos4-1
#define _len6 = len(ib[i])-_len5-1

#define _ib = copy(ib[i], 0, _len1)
#define _n = copy(ib[i], _pos1 + 1, _len2)
#define _name1 = copy(ib[i], _pos2 + 1, _len3)
#define _name2 = copy(ib[i], _pos3 + 1, _len4)
#define _name3 = copy(ib[i], _pos4 + 1, _len5)
#define _distr = copy(ib[i], _pos5 + 1, _len6)

#define _path = AddBackslash(AddBackslash(SourcePath) + "Source\" + osn_base + "\BASE\" + _ib)

#if FileExists(_path+_ib+ext[0])+FileExists(_path+_ib+ext[1])+FileExists(_path+_ib+ext[2])+FileExists(_path+_ib+ext[3])+FileExists(_path+_ib+ext[4])+FileExists(_path+_ib+ext[5])+FileExists(_path+_ib+ext[6])+FileExists(_path+_ib+ext[7])+FileExists(_path+_ib+ext[8])+FileExists(_path+_ib+ext[9])+FileExists(_path+_ib+ext[10])+FileExists(_path+_ib+ext[11])
Source: Source\{#osn_base}\BASE\{#_ib}\*; DestDir: {app}\BASE\{#_ib}; Components: Structure\ib\osn\{#_name1}\{#_ib}; Flags: recursesubdirs;
Source: Source\RECEIVE\{#_ib}*.ANS; DestDir: {app}\RECEIVE; Components: Structure\ib\osn\{#_name1}\{#_ib}; Flags: recursesubdirs;
Source: Source\{#Structure}\DISTR\{#_distr}*.din; DestDir: {app}\DISTR; Components: Structure\ib\osn\{#_name1}\{#_ib}; Flags: recursesubdirs;
#endif
#endsub

#sub AddDopBaseF
#define _pos1 = pos(";", ib[i])
#define _pos2 = pos(":", ib[i])
#define _pos3 = pos("/", ib[i])
#define _pos4 = pos("\", ib[i])
#define _pos5 = pos("|", ib[i])

#define _len1 = _pos1-1
#define _len2 = _pos2-_pos1-1
#define _len3 = _pos3-_pos2-1
#define _len4 = _pos4-_pos3-1
#define _len5 = _pos5-_pos4-1
#define _len6 = len(ib[i])-_len5-1

#define _ib = copy(ib[i], 0, _len1)
#define _n = copy(ib[i], _pos1 + 1, _len2)
#define _name1 = copy(ib[i], _pos2 + 1, _len3)
#define _name2 = copy(ib[i], _pos3 + 1, _len4)
#define _name3 = copy(ib[i], _pos4 + 1, _len5)
#define _distr = copy(ib[i], _pos5 + 1, _len6)

#define path = AddBackslash(AddBackslash(SourcePath) + "Source\" + dop_base + "\" + _ib)
#if FileExists(path+_ib+ext[0])+FileExists(path+_ib+ext[1])+FileExists(path+_ib+ext[2])+FileExists(path+_ib+ext[3])+FileExists(path+_ib+ext[4])+FileExists(path+_ib+ext[5])+FileExists(path+_ib+ext[6])+FileExists(path+_ib+ext[7])+FileExists(path+_ib+ext[8])+FileExists(path+_ib+ext[9])+FileExists(path+_ib+ext[10])+FileExists(path+_ib+ext[11])
Source: Source\{#dop_base}\{#_ib}\*; DestDir: {app}\BASE\{#_ib}; Components: Structure\ib\dop\{#_name1}\{#_ib}; Flags: recursesubdirs;
Source: Source\RECEIVE\{#_ib}*.ANS; DestDir: {app}\RECEIVE; Components: Structure\ib\dop\{#_name1}\{#_ib}; Flags: recursesubdirs;
Source: Source\{#Structure}\DISTR\{#_distr}*.din; DestDir: {app}\DISTR; Components: Structure\ib\dop\{#_name1}\{#_ib}; Flags: recursesubdirs;
#endif
#endsub

; список каталогов для "ОКНА выбора КОМПОНЕНТОВ"
; структура
Source: Source\{#Structure}\SYSTEM\*; DestDir: {app}\SYSTEM; Components: Structure; Flags: recursesubdirs;
Source: Source\{#Structure}\CONS.EXE; DestDir: {app}; Components: Structure;
Source: Source\{#Structure}\cons.chm; DestDir: {app}; Components: Structure;
Source: Source\{#Structure}\vr*.res; DestDir: {app}; Components: Structure;
; основные ИБ
// Source: Source\{#osn_base}\BASE\ACN\*; DestDir: {app}\BASE\ACN; Flags: recursesubdirs; Components: Structure\ib\osn\ACN; Check: DirExists(ExpandConstant('{#osn_base}\BASE\ACN'))
#for {i = 0; i < countIb; i++} AddOsnBaseF
; дополнительные ИБ
// Source: Source\Dop_Base\ADV\*; DestDir: {app}\BASE\ADV; Flags: recursesubdirs; Components: Structure\ib\dop\ADV;
// Check: DirExists(ExpandConstant('D:\-Installer-\.ConsDemo\Source\Dop_Base\ADV'))
// DirExists(ExpandConstant({SourcePath}) Source\{#osn_base}\BASE\ACN)")
#for {i = 0; i < countIb; i++} AddDopBaseF

Source: Source\RECEIVE\CONS*.ANS; DestDir: {app}\RECEIVE; Components: Structure\ib; Flags: recursesubdirs;
[/more]

Верно ли я понял что мне необходимо прописать??? :
...
[setup]
SolidCompression=no /* уже прописано */
...
[files]
// а здесь дописать каждому файлу
... Flags: solidbreak noencryption nocompression ...
...

верно?

И попутно вопрос - можно ли оптимизировать код тот что выше (в секции [Files], я и секцию [Components] так же на массивах сделал)- что то я с массивами заморочился но по другому не допер как сделать - дело в том что каждый файл необходимо проверять на наличие и их (т.е. файлов) может быть несколько тысяч (и несколько каждых лежат в своем каталоге ) - прописывать каждый - это КОД вырастит хз на сколько а править потом и сверять мне кажется не рентабельно да и глупо

Заранее спасибо!




Добавлено:
Gnom3

Перекомпилировал с новыми ключами - результат тотже.
Но проблема все-таки решилась.
Оказалось что на всех компьютерах где я проверял антивирус настроен "параноидально"
Так что ВОПРОС о медленности и зависании в памяти СНЯТ. ( Спс! в любом случае , т.к. думаю ключи должны ускорить процесс инсталляции - ну надеюсь!)

Осталось - есть ли мысли по поводу оптимизации секции [Files].
Автор: mifkys
Дата сообщения: 20.09.2011 10:15
Народ, помогите, пожалуйста. Надо каким-нибудь способом узнать, сколько оперативной памяти установлено на компьютере и в зависимости от этого проделать некоторые действия.
Автор: ShadowHawk
Дата сообщения: 20.09.2011 10:15
ЗЫ: Можно ли обойтись без bin файлов?
Т.е. есть у меня структура каталогов и файлов.
Можно ли сделать так чтобы они не изменно лежали рядом с инсталлятором в каталоге SOURCE например, а инсталлятор используя их происводил их копирование куда надо?

Смысл???: - необходимо написать такой инсталлятор который будет используя каталог SOURCE, при этом будет гибко изменять свое поведение в зависимости от содержимого этого каталога SOURCE.
Автор: Snoopak96
Дата сообщения: 20.09.2011 11:12
VendettaDeToli,

Цитата:
Таким способом скрываться не хочет...

Ну так поставь свою кнопку которую надо скрыть, судя по скриншоту это кастомная кнопка.

Автор: VendettaDeToli
Дата сообщения: 20.09.2011 12:13
Despofix
Snoopak96
Пробовал по всякому, не хочет скрываться.
Автор: Despofix
Дата сообщения: 20.09.2011 12:20
VendettaDeToli
ну тогда кидай скрипт в тему.
Автор: Gnom3
Дата сообщения: 20.09.2011 13:00
Despofix

Цитата:
а компоненты выбранные будут сохраняться если кнопки активными сделать при открытии панели?

А почему нет? вроде ничего не мешает, отключение кнопок сделал просто потому, что в показаном примере они отключаются. Кстати, только у меня тот пример работает криво? там диртривив остается поверх компонентлиста.

Цитата:
и возможно ли как то скрыть страницу компонентов или же к кнопке next.button прописать переход к другой странице?
Неоднократно обсуждалось, есть в инно функция именно для этих целей сделана:

Код: function ShouldSkipPage(PageID: Integer): Boolean;
begin
If PageID=wpSelectComponents then Result:=True;
end;
Автор: ShadowHawk
Дата сообщения: 20.09.2011 13:51
VendettaDeToli


Подойдет такой вариант?


Код:
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.


[ code]
var
MyButton: TButton;
MyPanel: TPanel;

procedure MyButtonOnClick(Sender: TObject);
begin
MyButton.Hide;
end;

procedure PanelButtons();
Begin
MyPanel := TPanel.Create( WizardForm );
with MyPanel do
begin
Parent := WizardForm;
Left := WizardForm.WelcomePage.Left;
Top := WizardForm.WelcomePage.Height + ScaleX(1);
Width := WizardForm.WelcomePage.Width- 200;
Height := WizardForm.ClientHeight - WizardForm.WelcomePage.Height - 2;
Align := alBottom;
End;

WizardForm.NextButton.Parent := MyPanel;
WizardForm.CancelButton.Parent := MyPanel;
WizardForm.BackButton.Parent := MyPanel;
WizardForm.NextButton.Top := WizardForm.NextButton.Top - (WizardForm.WelcomePage.Height + ScaleX(1));
WizardForm.CancelButton.Top := WizardForm.CancelButton.Top - (WizardForm.WelcomePage.Height + ScaleX(1));
WizardForm.BackButton.Top := WizardForm.BackButton.Top - (WizardForm.WelcomePage.Height + ScaleX(1));

MyButton:=TButton.Create( WizardForm );
with MyButton do
begin
Parent:=MyPanel;
Top:=WizardForm.BackButton.Top;
Left:=WizardForm.BackButton.Left - WizardForm.BackButton.Width - 30;
Width:=WizardForm.BackButton.Width + 60;
Height:=WizardForm.BackButton.Height;
Caption:='Нажми и я исчезну';
OnClick:=@MyButtonOnClick;
Font.Name:= 'arial';
Font.Size:= 9;
Font.Style:= [fsBold, fsItalic];
end;
end;



procedure InitializeWizard();
begin
PanelButtons();
end;

Автор: Gnom3
Дата сообщения: 20.09.2011 15:22
Флаг external:


Код: Source: {src}\SOURCE\*; DestDir: {app}\; Flags: external recursesubdirs createallsubdirs;
Автор: VASYAKRN
Дата сообщения: 20.09.2011 16:26
VASYAKRN, ну "prince of persia" не мой скрипт, а в "darksiders" смена страниц была реализована Shegorat'ом по мотивам скрипта BlackSelf'а.
А примера нету и дай мне пожалста мне скрипт BlackSelf
Автор: Y4enik32
Дата сообщения: 20.09.2011 17:59
Доброго времени суток.
У кого нибудь есть скрипт на такой инстолятор:

http://s2.itrash.ru/idb/566a5bccb5917fe723e2b8bccee5d90b/o1.jpg
http://s2.itrash.ru/idb/566a5bccb5917fe723e2b8bccee5d90b/o2.jpg
http://s2.itrash.ru/idb/566a5bccb5917fe723e2b8bccee5d90b/o3.jpg
http://s2.itrash.ru/idb/566a5bccb5917fe723e2b8bccee5d90b/o4.jpg
http://s2.itrash.ru/idb/566a5bccb5917fe723e2b8bccee5d90b/o5.jpg
http://s2.itrash.ru/idb/566a5bccb5917fe723e2b8bccee5d90b/o6.jpg
http://s2.itrash.ru/idb/566a5bccb5917fe723e2b8bccee5d90b/o7.jpg




Автор: Despofix
Дата сообщения: 20.09.2011 18:00
VASYAKRN
никто тебе я думаю не даст скрипт от BlackSelf'а.

Y4enik32
все равно не видно
Автор: Sergey_Demchuk
Дата сообщения: 20.09.2011 18:26
Возможно ли менять вид курсора мыши при наведении на обьект TLabel?
Автор: Gnom3
Дата сообщения: 20.09.2011 20:11

Цитата:
Возможно ли менять вид курсора мыши при наведении на обьект TLabel?


Код: procedure InitializeWizard();
begin
Label1 := TLabel.Create(WizardForm);
with TLabel.Create(WizardForm) do
begin
Caption := 'Label1';
Parent := WizardForm.WelcomePage;
Cursor := crHand;
Transparent := True;
Setbounds(ScaleX(152),ScaleY(240),ScaleX(31),ScaleY(13))
end;
end;
Автор: Karbid87
Дата сообщения: 20.09.2011 20:12
Кто может написать закос на такой инсталл?
http://lostpic.net/images/07f2f400db289c7edc53c9fa650d6432.png
http://lostpic.net/images/3ad5dcdaf9531b778a75aee3f0ada2db.png
http://lostpic.net/images/3c6e946e0c2b5e893160e610a17b2347.png
http://lostpic.net/images/7b81d1dd9f7f2dba8d8f7a759bbabeb7.png
http://lostpic.net/images/d3045429a347c10b2dcffb4a7f58f48d.png
Если кто-то возмется сделать, то очень прошу прислать мне потом в ЛС или сразу выложить в паблик. Я думаю многие будут благодарны.
Автор: Y4enik32
Дата сообщения: 20.09.2011 20:36
Доброго времени суток.
У кого нибудь есть скрипт на такой инстолятор:

http://lostpic.net/images/0cf48d70211844b40d75c65c4a24ef47.jpg
http://lostpic.net/images/d520f7fa2f6b27bc6554effd24967179.jpg
http://lostpic.net/images/738f4d1c2c825859a009f8dc35aac946.jpg
http://lostpic.net/images/2b5d7304fb686d7855e7693381e850bc.jpg
http://lostpic.net/images/4750e7c41a4ce8c44659df7d47c4d86c.jpg
http://lostpic.net/images/e423caaf3f6c87190230ba7744049413.jpg
http://lostpic.net/images/f697d1d15c123a9da1120baa99302d5b.jpg

Если нету ,то сделайте пожалуйста закос.
Автор: ShadowHawk
Дата сообщения: 20.09.2011 20:42
Gnom3

Цитата:
Флаг external:


Цитата:
Source: {src}\SOURCE\*; DestDir: {app}\; Flags: external recursesubdirs createallsubdirs;


recursesubdirs и createallsubdirs нужны, если есть подкаталоги, иначе будут копироваться только файлы из папки SOURCE, без подпапок. Если прописываеш каждый файл отдельно, эти флаги не нужны.


Видел!, но не разобрался - огромное спасибо!!! Удалось скомпилировать и провести установку из внешней папки!


Цитата:
Осталось - есть ли мысли по поводу оптимизации секции [Files].

Я-же сказал - в секцию файлс пишеш файлы в том порядке, в котором они нужны.


По поводу последовательности - я как раз код секции [files] и приводил - все именно в той последовательности как попадает в список выбора в секции [components]
но сам код как я формирую и список файлов и список компонентов меня "напрягает" - мне кажется что все можно сделать проще - но вот как не могу придумать. Я видел что в некоторых скриптал применяется какой то (как мне кажется местного действия) массив Local - но как не понял. надо ли объявлять, какова размерность максимальная? И вообще может ли быть массив 2, 3 - х мерный? Я уже пользовался директивой #dim - напомнило бейсик . Присваивать каждому элементу массива значения тоже как то не правильно т.е. такая колбаса:
dim a[100]
a[0] "0001"
a[1] "0002"
a[2] "ляля"
...
a[99] "юююю"

неужели нет варианта получше?

Автор: Snoopak96
Дата сообщения: 20.09.2011 20:44
Karbid87
Y4enik32
Хотите заказывайте в платных услугах:
http://forum.krinkels.ru/showthread.php?t=96&page=3
Сделают качественно в сжатые сроки)
Автор: VASYAKRN
Дата сообщения: 20.09.2011 21:16
А ехе вариант у когота есть
Автор: mifkys
Дата сообщения: 21.09.2011 09:47
Народ, помогите, пожалуйста. Надо каким-нибудь способом узнать, сколько оперативной памяти установлено на компьютере и в зависимости от этого проделать некоторые действия.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

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


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