Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
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;
Как пример 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, незнаю ща посмотрю
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;
Ещё один вопросик, как совместить эти два кода? »
Например использовать флаги. [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 как это реализовать?
всем привет!!!
кто работал с gdiplus.dll расскажите пожалуйста что это такое и с чем его едят
я сначала думал это переименованная ботва, но если заменить эту дллку на переименованную ботву-не компилится скрипт
очевидно, что это аналог ботвы, а какие у него преимущества, недостатки и как его использовать непонятно :)
как это реализовать? »
Хм, тоже интересно было бы посмотреть на реализацию. А то 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.