Войти

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


Страниц : 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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 [183] 184 185 186 187 188

Sotonisto
22-10-2011, 18:15
Всем доброго времени суток! Кто может поделиться скриптом подключения (*.ttf) шрифтов к инсталлятору?

valyok666
22-10-2011, 18:26
Sotonisto,

#define Font "Zombie.ttf"
#define FontName "DS Zombie Cyr"

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.

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

[Files]
Source: {#Font}; Flags: dontcopy;

[Code]
var
IsCustomFontInstalled: boolean;
FontName: string;

function AddFontResource(FileName: PAnsiChar): Integer; external 'AddFontResourceA@gdi32.dll stdcall';
function RemoveFontResource(FileName: PAnsiChar): BOOL; external 'RemoveFontResourceA@gdi32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('{#Font}');
IsCustomFontInstalled:=AddFontResource(ExpandConstant('{tmp}')+'\{#Font}')>0;
if IsCustomFontInstalled then SendMessage(HWND_BROADCAST,$1D,0,0);
if FontExists('{#FontName}') then FontName:='{#FontName}' else FontName:='Arial';
Result:= True;
end;

Procedure InitializeWizard();
begin
WizardForm.Font.Name:= FontName;
end;

procedure DeInitializeSetup();
begin
WizardForm.Free;
if IsCustomFontInstalled then
if RemoveFontResource(PAnsiChar(ExpandConstant('{tmp}')+'\{#Font}')) then SendMessage(HWND_BROADCAST,$1D,0,0);
end;

или скачать библиотеку от dvd4el CreateFont.7z (http://rghost.ru/25070111)
также есть пример от Shegorat и VinTage Test_Font_2.7z (http://rghost.ru/25117121)


Devils Night,
есть такое внесение значение в INI-файл в зависимости от выбранного чекбокса

AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Run]
Filename: "{app}\MyProg"; Description: "{cm:LaunchProgram, MyProg}"; Flags: nowait postinstall skipifsilent

[Code]
var
IniCheckBox: TCheckBox;

procedure InitializeWizard();
begin
IniCheckBox:= TCheckBox.Create(WizardForm);
IniCheckBox.Left:= WizardForm.RunList.Left + 4;
IniCheckBox.Top:= WizardForm.RunList.Top + 10;
IniCheckBox.Width:= WizardForm.RunList.Width;
IniCheckBox.Height:= 14
IniCheckBox.Caption:=' Изменить язык интерфейса на русский';
IniCheckBox.Parent:= WizardForm.FinishedPage;
end;

procedure DeinitializeSetup();
begin
if WizardForm.CurPageID = WpFinished then
begin
if IniCheckBox.Checked then
SetIniString('Setting','Language', 'RU',ExpandConstant('{app}\Language.ini')) //Секция, подключ, значение, файл Ini
else
SetIniString('Setting','Language', 'EN',ExpandConstant('{app}\Language.ini'))
end;
end;

mosre
22-10-2011, 18:42
Как пример http://inno.at.ua/_ld/1/36714710.jpg, что нибудь в этом роде..

Edison007
22-10-2011, 18:46
Всем доброго времени суток! Кто может поделиться скриптом подключения (*.ttf) шрифтов к инсталлятору? »
Нормально это сделать не получится, тк юзеры у которых, какие-либо сборки шрифт не будет работать...

valyok666
22-10-2011, 18:48
mosre, C&C_Renegade ISDone5_v1.2-Final.7z (http://rghost.ru/7976521)
посмотрите вот этот хороший скрипт=)

Devils Night
22-10-2011, 20:39
есть такое внесение значение в INI-файл в зависимости от выбранного чекбокса »Спасибо! В общем то нужно было без чебокса, ну это ладно, кое как вырезал, получилось procedure DeinitializeSetup();
begin
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
end;
end;

Ещё один вопросик, как совместить эти два кода?
function InitializeSetup: Boolean;
begin
Result:=true;
if not (FileExists('{pf}\MyProg\MyProg.exe'))
then
begin
MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
Result:=false;
end;
end; procedure DeinitializeSetup();
begin
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
end;
end;
при совмещении компилится нормально, но после выскакивания окошка MyProg не найдена, сначала установите MyProg. вылазит сообщение if WizardForm.CurPageID = WpFinished then

valyok666
22-10-2011, 21:32
Devils Night, кинька скрипт полностью посмотрю

Devils Night
22-10-2011, 22:02
кинька скрипт полностью посмотрю »
Вот как есть.
[Setup]
AppId={{9CC9A926-EC33-48FC-81D9-2EEAB3BF79B7}
AppName=My Program
AppVersion=1.5
;AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup0
Compression=lzma
SolidCompression=yes

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


[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"

[ code]
function InitializeSetup: Boolean;
begin
Result:=true;
if not (FileExists('{pf}\MyProg\MyProg.exe'))
then
begin
MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
Result:=false;
end;
end;

procedure DeinitializeSetup();
begin
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
end;
end;

valyok666
22-10-2011, 22:44
Devils Night, незнаю ща посмотрю

Rikill
23-10-2011, 01:19
Edison007, не знаешь, что на это именно влияет? Я слышал шегорат разобрался. Вот интересно.

valyok666, тсс. Предупреждения не хватило?)

filehome
23-10-2011, 08:16
Помогите пожалуйста!
Как вывести из файла vs.ini в эту форму динамически.
в файле vs.ini содержится

[Название]

а1=hic.dll
a2=soz.exe
a3=axw.doc
a4=ver.dll
a5=fo.dll
a6=oo.dll
и так до 20.
Как мне вывести только название файлов?




[Setup]
AppName=My Program
AppVerName=My Program version 1.5
Uninstallable=No
DisableProgramGroupPage=Yes
CreateAppDir=No
AlwaysShowDirOnReadyPage=Yes
InternalCompressLevel=none
Compression=none

[Files]
#define MaxTarget 10
#define i

#sub AddFile
Source: compiler:Examples\*; DestDir: {code:CurrentDir|{#i}}; Check: NeedCopy(ExpandConstant('{#i}'))
#endsub

#for {i = 0; i < MaxTarget; i++} AddFile

[Run]
#sub RunFile
Filename: {code:RunDir|{#i}}\Archive.exe; StatusMsg: Ðàñïàêîâêà ôîðì {code:RunDir|{#i}}; BeforeInstall: ChangeProgress(ExpandConstant('{#i}')); Flags: skipifdoesntexist
#endsub

#for {i = 0; i < MaxTarget; i++} RunFile

[Code]
var
Names: TArrayOfString;
Value: TArrayOfString;
Page: TInputOptionWizardPage;
ProgressBar: TNewProgressBar;
SelectAll: TButton;

function NeedCopy(Param: string): Boolean;
begin
if (StrToInt(Param) < Page.CheckListBox.Items.Count) and
Page.CheckListBox.Checked[StrToInt(Param)] then
begin
Result:= True;
end;
end;

function CurrentDir(Param: string): string;
begin
if Page.CheckListBox.Checked[StrToInt(Param)] then
Result:= Page.CheckListBox.ItemSubItem[StrToInt(Param)]
else Result:= '';
end;

function RunDir(Param: string): string;
begin
if (StrToInt(Param) < Page.CheckListBox.Items.Count) and
Page.CheckListBox.Checked[StrToInt(Param)] then
Result:= Page.CheckListBox.ItemSubItem[StrToInt(Param)]
else Result:= '';
end;

procedure ChangeProgress(Param: string);
begin
if (StrToInt(Param) < Page.CheckListBox.Items.Count) and
Page.CheckListBox.Checked[StrToInt(Param)] then
ProgressBar.Position:= ProgressBar.Position + 1;
end;

procedure CurPageChanged(CurPageID: Integer);
var
i: integer;
begin
if CurPageID = wpReady then
begin
with WizardForm.ReadyMemo.Lines do
begin
Clear;
Add('Destination location:');
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
if Page.CheckListBox.Checked[i] then
Add(#9 + Page.CheckListBox.ItemSubItem[i] +
' - ' + Page.CheckListBox.ItemCaption[i]);
end;
end;
end;

if CurPageID = Page.ID then
begin
SelectAll.Visible:= True;
end else
SelectAll.Visible:= False;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
CheckedCount, i: integer;
begin
if CurStep = ssInstall then
begin
CheckedCount:= 0;
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
if Page.CheckListBox.Checked[i] then
CheckedCount:= CheckedCount + 1;
end;
with WizardForm.ProgressGauge do
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
ProgressBar.Left := Left;
ProgressBar.Top := Top + Height + ScaleY(8);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.Max := CheckedCount;
ProgressBar.Position := 0;
end;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
i: integer;
begin
if CurPageID = Page.ID then
begin
Result := False;
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
if (Page.CheckListBox.Checked[i]) then
begin
Result := True;
Break;
end;
end;
if Not Result then MsgBox('Âûáåðèòå õîòÿ áû îäèí ïóòü óñòàíîâêè !', mbInformation, MB_OK);
end else
begin
Result := True;
end;
end;

procedure ButtonOnClick(Sender: TObject);
var
i: integer;
begin
if (SelectAll.Tag = 0) then
begin
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
Page.CheckListBox.Checked[i]:= True;
end;
SelectAll.Caption := 'Î÷èñòèòü âñå';
SelectAll.Tag:= 1;
end else
if (SelectAll.Tag = 1) then
begin
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
Page.CheckListBox.Checked[i]:= False;
end;
SelectAll.Caption := 'Âûáðàòü âñå';
SelectAll.Tag:= 0;
end;
end;

procedure InitializeWizard();
var
I: Integer;
S: String;

begin
Page := CreateInputOptionPage(wpWelcome,
'Âûáåðèòå êîìïîíåíòû', 'Êàêèå êîìïîíåíòû õîòèòå óñòàíîâèòü?',
'Âûáåðèòå íåîáõîäèìûå êîìïîíåíòû è íàæìèòå äàëåå.',
False, True);

SelectAll:= TButton.Create(WizardForm);
SelectAll.Width := WizardForm.BackButton.Width + ScaleX(10);
SelectAll.Height := WizardForm.BackButton.Height;
SelectAll.Top := WizardForm.BackButton.Top;
SelectAll.Left := WizardForm.BackButton.Left - WizardForm.BackButton.Width - ScaleX(40);
SelectAll.OnClick := @ButtonOnClick;
SelectAll.Parent := WizardForm;
SelectAll.Visible:= False;
SelectAll.Caption := 'Âûáðàòü âñå';
SelectAll.Tag:= 0;

if RegGetValueNames(HKEY_CURRENT_USER, 'Software\My Program\Path', Names) then
begin
SetArrayLength(Value,GetArrayLength(Names));
for I := 0 to GetArrayLength(Names)-1 do
begin
RegQueryStringValue(HKEY_CURRENT_USER, 'Software\My Program\Path', Names[I], Value[I]);
Page.CheckListBox.AddCheckBox(Value[I], Names[I], 0, False, True, False, False, nil);
end;
end;
end;

nik1967
23-10-2011, 09:40
Ещё один вопросик, как совместить эти два кода? »
Например использовать флаги. [Setup]
AppId={{9CC9A926-EC33-48FC-81D9-2EEAB3BF79B7}
AppName=My Program
AppVersion=1.5
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup0
Compression=lzma
SolidCompression=yes

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


[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"

[ code]
var Flag: boolean;

function InitializeSetup: Boolean;
begin
Flag:= True;
Result:=true;
if not FileExists(ExpandConstant('{pf}')+'\My Program\MyProg.exe')
then
begin
MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
Flag:= False;
Result:=false;
end;
end;

procedure DeinitializeSetup();
begin
if Flag then
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
end;
end;

insombia
23-10-2011, 09:52
VinTagE в следующий раз как будешь делать вторую версию этого скрипта то сделай выбор приоритета чтобы юзер мог сам себе его поставить

sergey3695
23-10-2011, 14:13
VinTagE в следующий раз как будешь делать вторую версию этого скрипта то сделай выбор приоритета чтобы юзер мог сам себе его поставить »
Тут приоритет можно устанавливать только для инсталлятора, но не для процессов. Это штука бесполезна если используешь ISDone и подобные.[/post]
+1

valyok666
23-10-2011, 14:42
Rikill, а что я написал????

insombia
23-10-2011, 17:34
Повторю ещё раз может кто-то знаешь можно ли сделать такую библиотеку чтобы в инстале снег шел?

Devils Night
23-10-2011, 18:51
Например использовать флаги. »Спасибо! Помогло, работает отлично.

По ходу дела появилась ещё одна проблемка, при деинсталяции в файле config.ini остаётся строка outname=plugin1.dll, т.к в секции [Component1] имеются ещё строчки, то нужно удаление только outname=plugin1.dll а не всей секции.
[Component1]
outname=plugin1.dll < - Удалить только это.
outname=plugin2.dll
outname=plugin3.dll
outname=plugin4.dll как это реализовать?

ARS_23
23-10-2011, 22:48
всем привет!!!
кто работал с gdiplus.dll расскажите пожалуйста что это такое и с чем его едят
я сначала думал это переименованная ботва, но если заменить эту дллку на переименованную ботву-не компилится скрипт
очевидно, что это аналог ботвы, а какие у него преимущества, недостатки и как его использовать непонятно :)

nik1967
23-10-2011, 23:55
как это реализовать? »
Хм, тоже интересно было бы посмотреть на реализацию. А то DeleteIniEntry('Component1','outname',ExpandConstant('{app}\config.ini'));
удаляет первый "outname" в ини.
[Component1]
outname=plugin1.dll
outname=plugin2.dll
outname=plugin3.dll
outname=plugin4.dll

Dark_Delphin
23-10-2011, 23:55
Всем привет.

Подскажите пожалуйста, бывают ли для бегущей строки другие эффекты?

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




© OSzone.net 2001-2012