Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]
Sotonisto
22-06-2018, 11:47
ZVSRus, благодарю. Я понятия не имел, что к taRight и taLeft необходимо добавить Justify.
pollipen
22-06-2018, 12:39
парни что за проблема нажимаю установить вот такая ошибка , но программа устанавливается
http://i104.fastpic.ru/big/2018/0622/2b/4a132f049ae6ddfca5027bf7dd6f182b.png
habib2302
22-06-2018, 13:18
pollipen, мы по вашему экстрасенсы? скрипт в студию!
Здравствуйте, нужна помощь:
Не могу вместо кнопок инсталлятора вставить свои изображения(кастомные кнопки), а также непонятно как сделать кастомные "Скрыть" и "Закрыть" кнопки(если без рамки Windows). [Скриншот 1] (https://a.radikal.ru/a31/1807/42/2a59d013839f.png)
Не могу убрать данный белый фон или просто изменить его размер. [Скриншот 2] (https://c.radikal.ru/c21/1807/04/6baf34a20cc3.png)
Правильно ли я вообще выполняю действия(что через редактор форм)?
P.S. Видно плохо искал ответы на вопросы, что не нашёл.
habib2302
08-07-2018, 20:50
Не могу вместо кнопок инсталлятора вставить свои изображения(кастомные кнопки) »
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp
[Files]
Source: botva2.dll; DestDir: {tmp}; Flags: dontcopy
Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: Button.png; DestDir: {tmp}; Flags: dontcopy
[Code]
type
TButtonInfo = record ButtonName: array of TButton; Handle: array of HWND; Count: Integer; end;
TBtnEventProc = procedure(h:HWND);
const
BtnClickEventID = 1;
BtnMouseEnterEventID = 2;
BtnMouseLeaveEventID = 3;
BtnMouseMoveEventID = 4;
balLeft = 0;
balCenter = 1;
var
ButtonsBuff: TButtonInfo;
HCancelButton, HNextButton, HBackButton, HDirBrowseButton, HGroupBrowseButton: HWND;
function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallback@files:innocallback.dll stdcall';
function BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PAnsiChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND; external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetPosition(h:HWND; NewLeft, NewTop, NewWidth, NewHeight: integer); external 'BtnSetPosition@files:botva2.dll stdcall';
procedure BtnRefresh(h:HWND); external 'BtnRefresh@files:botva2.dll stdcall';
function BtnGetChecked(h:HWND):boolean; external 'BtnGetChecked@files:botva2.dll stdcall';
procedure BtnSetChecked(h:HWND; Value:boolean); external 'BtnSetChecked@files:botva2.dll stdcall';
procedure BtnSetText(h:HWND; Text:PAnsiChar); external 'BtnSetText@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetTextAlignment(h:HWND; HorIndent, VertIndent:integer; Alignment:DWORD); external 'BtnSetTextAlignment@files:botva2.dll stdcall';
procedure BtnSetVisibility(h:HWND; Value:boolean); external 'BtnSetVisibility@files:botva2.dll stdcall';
function BtnGetEnabled(h:HWND):boolean; external 'BtnGetEnabled@files:botva2.dll stdcall';
procedure BtnSetEnabled(h:HWND; Value:boolean); external 'BtnSetEnabled@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFont(h:HWND; Font:Cardinal); external 'BtnSetFont@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFontColor(h:HWND; NormalFontColor, FocusedFontColor, PressedFontColor, DisabledFontColor: Cardinal); external 'BtnSetFontColor@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEvent(h:HWND; EventID:integer; Event:Longword); external 'BtnSetEvent@files:botva2.dll stdcall';
procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@files:botva2.dll stdcall';
function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@files:botva2.dll stdcall';
procedure gdipShutdown; external 'gdipShutdown@files:botva2.dll stdcall';
procedure UpdateButtons();
var I: integer;
begin
for I:=0 to (ButtonsBuff.Count-1) do begin
BtnSetEnabled(ButtonsBuff.Handle[I], ButtonsBuff.ButtonName[I].Enabled)
BtnSetVisibility(ButtonsBuff.Handle[I], ButtonsBuff.ButtonName[I].Visible)
BtnSetText(ButtonsBuff.Handle[I], ButtonsBuff.ButtonName[I].Caption)
BtnRefresh(ButtonsBuff.Handle[I])
end;
end;
procedure ButtonOnClick(hBtn: HWND);
var Btn: TButton; I: Integer;
begin
for I:=0 to (ButtonsBuff.Count-1) do begin
if hBtn = ButtonsBuff.Handle[I] then Btn:= ButtonsBuff.ButtonName[I];
end;
Btn.OnClick(Btn)
UpdateButtons;
end;
function EffectTextureButton(Handle: HWND; Button: TButton; ImageName: PAnsiChar; ShadowWidth: Integer; EnterEvent, MoveEvent, LeaveEvent: TbtnEventProc): HWND;
begin
Result:=BtnCreate(Handle, Button.Left-8, Button.Top-8, Button.Width+16, Button.Height+16, ImageName, ShadowWidth, False) ///Размеры подобраны для текущей текстуры
BtnSetEvent(Result, BtnClickEventID, WrapBtnCallback(@ButtonOnClick, 1))
if EnterEvent <> nil then BtnSetEvent(Result, BtnMouseEnterEventID, WrapBtnCallback(EnterEvent, 1));
if MoveEvent <> nil then BtnSetEvent(Result, BtnMouseMoveEventID, WrapBtnCallback(MoveEvent, 1));
if LeaveEvent <> nil then BtnSetEvent(Result, BtnMouseLeaveEventID, WrapBtnCallback(LeaveEvent, 1));
BtnSetFont(Result, Button.Font.Handle)
BtnSetText(Result, Button.Caption);
BtnSetVisibility(Result, Button.Visible);
BtnSetFontColor(Result,clBlack,clBlack,clBlack,clGray);
BtnSetCursor(Result,GetSysCursorHandle(32649));
Button.Width:=0; Button.Height:= 0;
SetArrayLength(ButtonsBuff.Handle, ButtonsBuff.Count+1);SetArrayLength(ButtonsBuff.ButtonName, ButtonsBuff.Count+1);
ButtonsBuff.ButtonName[ButtonsBuff.Count]:= Button; ButtonsBuff.Handle[ButtonsBuff.Count]:= Result;
ButtonsBuff.Count:= ButtonsBuff.Count+1;
end;
procedure ButtonChangeFont(ButtonHandle: HWND; Font: TFont; NormalColor, FocusedColor, PressedColor, DisabledColor: Cardinal);
begin
if Font <> nil then BtnSetFont(ButtonHandle, Font.Handle);
BtnSetFontColor(ButtonHandle, NormalColor, FocusedColor, PressedColor, DisabledColor)
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('Button.png')
HNextButton:= EffectTextureButton(WizardForm.Handle, WizardForm.NextButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
HCancelButton:= EffectTextureButton(WizardForm.Handle, WizardForm.CancelButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
HBackButton:= EffectTextureButton(WizardForm.Handle, WizardForm.BackButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
HDirBrowseButton:= EffectTextureButton(WizardForm.Handle, WizardForm.DirBrowseButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
HGroupBrowseButton:= EffectTextureButton(WizardForm.Handle, WizardForm.GroupBrowseButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
end;
procedure CurPageChanged(CurPageId: Integer);
begin
UpdateButtons
end;
procedure DeinitializeSetup();
begin
gdipShutdown
end;
а также непонятно как сделать кастомные "Скрыть" и "Закрыть" кнопки(если без рамки Windows) »
если не ошибаюсь эти кнопки меняются только скинами для инсталляторов
habib2302, Текстурирование кнопок через botva2.dll »Использовал код, настраивал размеры текстурирования, но пропал текст кнопок, кнопки огромного размера, а также неактивны. [Скриншот 1] (https://c.radikal.ru/c25/1807/6f/79a039f2cc05.png)
Sotonisto
11-07-2018, 02:59
Не могу вместо кнопок инсталлятора вставить свои изображения(кастомные кнопки), а также непонятно как сделать кастомные "Скрыть" и "Закрыть" кнопки(если без рамки Windows).
Не могу убрать данный белый фон или просто изменить его размер.»
Как-то так? (https://drive.google.com/open?id=1hGR-BjBlAV-fODu30Xb5CNNUUgDTVRbp)
Sotonisto, спасибо огромное! Вы сделали всё как в моём шаблоне, не видя других страниц инсталлятора, спасибо!
Sotonisto
11-07-2018, 18:07
TheLeon, не за что. Надеюсь, со скриптом вы разобрались без проблем.
pollipen
16-07-2018, 11:56
парни как избавиться от запроса вот этого
что бы перезаписала сразу
https://a.radikal.ru/a04/1807/7c/dade8d505c6c.jpg
как избавиться от запроса... »
[Files]
Source: ACDSee Video\videorecorder.ini; DestDir: {app}\ACDSee Video; Flags: overwritereadonly
ErikPshat
21-07-2018, 17:46
Ребята, помогите пожалуйста...
Я тут делаю распаковщик для многотомных архивов одной игры. Но пока это дело реализовал через голый 7-Zip.
Скачать проект можно здесь: http://rgho.st/7Qx8Zvc7C (в архиве лежат 5 маленьких томов для теста распаковки - 001, 002, 003, 004, 005).
Я же хочу сделать распаковку через ISDone по фэншую, чтобы распаковка шла с двумя полосками прогресс-бара, с процентами, временем и всем остальным, но не пойму, какими командами и в каком месте её прикрутить. Я умею её прикручивать, но она у меня работает только в стандартных приложениях после нажатия кнопки "Готово". А здесь у меня кастомный интерфейс и есть кнопка "Распаковать".
Помогите пожалуйста...
R.i.m.s.k.y.
23-07-2018, 12:20
Подскажите, пожалуйста, почему установщик инно не может под UAC внести изменения в реестр HLKM
Версия инно 5,5,1 ее2 (а)
куски скрипта в части касающейся
[Setup]
PrivilegesRequired=admin
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then begin
if IsComponentSelected('TW1') then begin
RegWriteDWordValue (HKEY_LOCAL_MACHINE, 'SOFTWARE\CD Projekt Red\The Witcher','IsDjinniInstalled', 1);
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\CD Projekt Red\The Witcher','RegionVersion', 'WE');
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\CD Projekt Red\The Witcher','InstallFolder', ExpandConstant('app}\'));
end;// if IsComponentSelected('TW1') then begin
end;
[Registry]
Root: HKLM; Subkey: "SOFTWARE\CD Projekt Red\The Witcher"; ValueName: "IsDjinniInstalled"; ValueType: Dword; ValueData: "$1"; Components: TW1; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\CD Projekt Red\The Witcher"; ValueName: "RegionVersion"; ValueType: String; ValueData: "WE"; Components: TW1; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\CD Projekt Red\The Witcher"; ValueName: "InstallFolder"; ValueType: String; ValueData: "{app}\"; Components: TW1; Flags: uninsdeletekey
Установщик может выдать ошибку RegCreatekeyEx: сбой, код 89
или не выдать и втихаря все поставить но ключи в реестре HKLM не создать
Причем примерно до НГ установщик работал нормально, виню последние обновки безопасности майкрософта
Заранее благодарен
usermode
23-07-2018, 19:53
если игра x64 и нужен доступ установщика к 64 бит разделам, то попробуй в секцию [Setup] прописать:
ArchitecturesInstallIn64BitMode=x64 ia64
Причем примерно до НГ установщик работал нормально, виню последние обновки безопасности майкрософта »
тогда уж инсталлятор тоже надо обновить, далеко на необновляемых ResTools сборках не уехать.
R.i.m.s.k.y.
23-07-2018, 20:43
usermode, нет игра х86
R.i.m.s.k.y.
23-07-2018, 21:42
еще подскажите, пожалуйста, как сделать через bass так чтобы первый мр3 файл проигрался и перешел ко второму, а второй мр3 уже играл в цикле
сейчас в фоне играет только один мр3 в цикле
procedure InitializeWizard();
...
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('InnoCallback.dll');
ExtractTemporaryFile('CallbackCtrl.dll');
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('volmax.png');
ExtractTemporaryFile('volmin.png');
ExtractTemporaryFile('volpb.png');
ExtractTemporaryFile('voldote.png');
ExtractTemporaryFile('MusicButton.png');
ExtractTemporaryFile('mp3.mp3');
BASS_Init(ExpandConstant('{tmp}\mp3.mp3'))
BASS_CreateMediaPlayer(WizardForm, '{tmp}\volmax.png', '{tmp}\volmin.png', '{tmp}\volpb.png', '{tmp}\voldote.png', 110, 490);
usermode
24-07-2018, 12:00
R.i.m.s.k.y.
тогда для записи в реестр использовать windows api.
R.i.m.s.k.y.
24-07-2018, 12:04
тогда для записи в реестр использовать windows api »
можно пример для инно?
ErikPshat
31-07-2018, 10:02
Не могу выудить переменную из кода GetOpenFileName. Вот пример:
procedure UnpackButtonClick(Sender: TObject);
var
FileName: String;
begin
// Set the initial filename
FileName := '';
if GetOpenFileName('', FileName, '', 'Archives Files (*.zip)|*.zip|All Files|*.*', 'zip') then
begin
// Successful; user clicked OK
// FileName contains the selected filename
MsgBox('Выбран архив {FileName}', mbInformation, MB_OK);
end;
if not ShellExec('open', ExpandConstant('{tmp}\7z.exe'), 'x -y {FileName}', ExpandConstant('{src}'), SW_SHOWNORMAL, ewnowait, ResultCode) then
MsgBox(ExpandConstant('{code:NotFileOnDiskMsg}'), mbCriticalError,MB_OK);
end;
Делаю распаковку архивов и переменная {FileName} ничего не возвращает, ни в MsgBox, ни подхватывает выбранный файл при распаковке.
ErikPshat,
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.
[Files]
Source: 7z.exe; Flags: dontcopy;
[code]
var
UnpackButton: TButton;
PathTmp: String;
procedure UnpackButtonClick(Sender: TObject);
var
FileName: String;
ResultCode: Integer;
begin
if not FileExists(PathTmp+'7z.exe') then ExtractTemporaryFile('7z.exe');
// Set the initial filename
FileName := '';
if GetOpenFileName('', FileName, '', 'Archives Files (*.zip)|*.zip|All Files|*.*', 'zip') then
begin
// Successful; user clicked OK
// FileName contains the selected filename
MsgBox('Выбран архив: '+FileName, mbInformation, MB_OK);
end;
if not ShellExec('open', ExpandConstant('{tmp}\7z.exe'), 'x -y '+FileName, ExpandConstant('{src}'), 0, ewnowait, ResultCode) then
MsgBox(ExpandConstant('{code:NotFileOnDiskMsg}'), mbCriticalError,MB_OK);
end;
procedure InitializeWizard();
begin
PathTmp:= ExpandConstant('{tmp}\');
UnpackButton:= TButton.Create(WizardForm);
with UnpackButton do begin
Parent:= WizardForm;
SetBounds(ScaleX(10), ScaleY(327), ScaleX(75), ScaleY(25));
Caption:= 'Распаковать';
OnClick:= @UnpackButtonClick;
end;
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.