Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Preparing... » Это я перепутал со страницей "Всё готово к установке" :blush2:
Спасибо за подсказку, разберусь! :)
A1EXXX дай ссылку на твой inno который пользуешься
x-net, Inno Setup 5.35 (http://jrsoftware.org/download.php/ispack.exe) + Compiler от ResTools (http://restools.hanzify.org/inno/InnoCompiler091007_English(7zip).zip) + поверх (чтоб на русском было) Русская версия ISC от ResTools (http://forum.oszone.net/post-1098248-639.html)
+ поверх (чтоб на русском было) »
Но тогда Inno станет 5.2.3, в место 5.3.5
Здравствуйте, где-то видел вопрос, но уже не могу найти где... Одним словом он меня заинтирестовал.
Суть вопроса: "Как сделать прозрачным часть окна инсталлятора, где расположены кнопки, но чтоб кнопки были видны."
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Code]
const
GWL_EXSTYLE = -20;
WS_EX_LAYERED = $00080000;
LWA_COLORKEY = $00000001;
// задаёт прозрачность окна
function SetLayeredWindowAttributes(hwnd: hWnd; crKey: TColor; bAlpha: byte; dwFlags: DWORD): Boolean;
external 'SetLayeredWindowAttributes@user32.dll stdcall';
// считывает инфоpмацию об окне или о значениях дополнительного байта окна
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
// заменяет для окна атpибут стpуктуpы класса окна новым значением
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
external 'SetWindowLongA@user32.dll stdcall';
procedure InitializeWizard();
begin
with TPanel.Create(WizardForm) do
begin
SetBounds(0, WizardForm.Bevel.Top, WizardForm.Width, WizardForm.Height-WizardForm.Bevel.Top);
Color:= clGreen;
Parent:= WizardForm;
end;
with TPanel.Create(WizardForm) do
begin
SetBounds(WizardForm.NextButton.Left, WizardForm.NextButton.Top,
WizardForm.NextButton.Width, WizardForm.NextButton.Height);
WizardForm.NextButton.Parent:= TPanel.Create(WizardForm);
// теоретически, второе должно переназначать первое, но почему-то работает только так:
WizardForm.NextButton.Parent:= WizardForm;
Free; // здесь тоже непонятно, по идее панель должна сразу разрушаться, но...
end;
with TPanel.Create(WizardForm) do
begin
SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.Top,
WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
WizardForm.CancelButton.Parent:= TPanel.Create(WizardForm);
WizardForm.CancelButton.Parent:= WizardForm;
Free;
end;
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(WizardForm.Handle, clGreen, 0, LWA_COLORKEY);
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID > wpWelcome then
with TPanel.Create(WizardForm) do
begin
SetBounds(WizardForm.BackButton.Left, WizardForm.BackButton.Top,
WizardForm.BackButton.Width, WizardForm.BackButton.Height);
WizardForm.BackButton.Parent:= TPanel.Create(WizardForm);
WizardForm.BackButton.Parent:= WizardForm;
Free;
end;
end;
serg aka lain, спасибо, работает. Но есть проблема - у меня распаковка архива начинается только если выбранный компонент arc_yes, но инсталлятор, даже если компонент отключен, все равно запрашивает этот файл :( Нельзя ли как то связать компонент с проверкой?
Serega спасибо за Converter Reg,отличная прога :good:
serg aka lain
14-10-2009, 20:58
"Как сделать прозрачным часть окна инсталлятора, где расположены кнопки, но чтоб кнопки были видны." »
Ооо, WinApi. Вы случаем не знаете, как сделать средствами WinApi кнопки плоскими, ну как в классической теме,
знаю что вид кнопок зависит от текущего оформления винды, но всёж хотелось.
Serega, в последней версии компилятора от RT у меня Мастер скриптов не работал... в любом случае, из всех перепробованных связок, эта самая безотказная :)
serg aka lain
14-10-2009, 21:04
Нельзя ли как то связать компонент с проверкой? »
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
if IsComponentSelected('имя_компонента') then
if not FileExists(ExpandConstant('{src}\archieve.exe')) then
begin
SuppressibleMsgBox('Файл archieve.exe не найден в папке с инсталлятором!', mbCriticalError, MB_OK, MB_OK);
Abort;
end;
end;
serg aka lain спасибо) уже до самого дошло)
GrizzlyMK
14-10-2009, 21:54
Подскажите как испаравить.
http://pics.kz/s5/52/b3/f9/b1/52b3f9b199fc452796ca56a64e96b861_preview.jpg (http://pics.kz/viewfull491023)
Меня заинтересовал репак от ЕagleSH, вот скрины: 1 (http://i067.radikal.ru/0909/4e/92d1b7fa1c85.jpg) 2 (http://s02.radikal.ru/i175/0909/cf/4566b18e2610.jpg) 3 (http://s47.radikal.ru/i118/0909/d0/e3f02dd569e7.jpg) 4 (http://s46.radikal.ru/i113/0909/20/f6a11eb4e7f6.jpg) 5 (http://i019.radikal.ru/0909/ff/3541a7a1e1ea.jpg)
Может ли кто-нибудь такое смастерить??? P.S. У него видео растянуто по инсталлу & распаковка FreeArc :)
Накопилось несколько вопросов, помогайте кто чем может ;)
1) Как сделать, чтобы когда игру уже установлена, при запуске инсталла выскакивало такое вот окошко (http://pic.ipicture.ru/uploads/091004/cHuFIZMGap.jpg)?
2) Подскажите связку Precomp + FreeArc, если нужно прекомпить много мелких файлов. Можно сначала файлы паконуть 7-zip'ом без сжатия, потом Precomp & FreeArc. Может есть связка попроще? А если нет, то можно сделать так, чтоб после распаковки *.arc-архивов (при использовании скрипта Bulat'а v3.3) начиналась рекомпрессия, и лишь потом распаковка 7z. И можно сделать так, чтоб последние две стадии были с прогресс-барами??
3) Ещё есть такой баг: использую скрипт для лого в углу, но начиная со страницы выбора папки установки кликабельность ссылки пропадает!!! Какая процедура (из какого-то другого скрипта) может такое делать??
[Files]
Source: C:\logo.bmp; DestDir: {tmp}; Flags: dontcopy
[code]
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;
procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://сайт.ру', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;
LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;
LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;
BlackSelf
14-10-2009, 22:21
A1EXXX, на данный момент в условиях инно такое сделать нельзя (если очень хочется, переходи на ммб). Так как при размещении видео перекрываются все элементы, кроме edit'ов и различных button'ов с чек-боксами.
1).
[_code]
function InitializeSetup(): Boolean;
var
ResultCode:Integer;
ResultReg:string;
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'Software\2K Sports\NBA 2K10','InstallDir') then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\2K Sports\NBA 2K10','InstallDir', ResultReg)
if MsgBox('Запустить NBA 2K10?',mbconfirmation, mb_YesNo) = IDYES then
Exec(ResultReg+'\nba2k10.exe', '', '', SW_SHOW,ewNoWait, ResultCode)
end;
end;
2). Декомпрессию и распаковку архива сделать можно, но отобразить на прогресс-баре пока не удастся.
3). Показывай весь скрипт, тогда можно будет что-то сказать, а гадать, "какая процедура (из какого-то другого скрипта) может такое делать", мы можем долго.
спасибо за Converter »
Пользуйтесь на здоровье :wink:
Вы случаем не знаете, как сделать средствами WinApi кнопки плоскими, ну как в классической теме »
Не сталкивался с таким, подумаю на досуге...
в последней версии компилятора от RT у меня Мастер скриптов не работал... »
Есть такое дело, но я не использую мастера.
Просто на скорую руку, сделал для себя прогу и повесил кнопку в Total Commander. Нужна болванка скрипта, я нажимаю на кнопку и болванка готова...
Какая процедура (из какого-то другого скрипта) может такое делать?? »
Любая, которая создаёт, что-то поверх или переназначает LogoLabel. Присмотритесь к процедурам CurPageChanged, NextButtonClick, CurStepChanged.
в условиях инно такое сделать нельзя »
Т.е. инсталлятор, который на скринах, сделан не в Inno??
Декомпрессию и распаковку архива сделать можно »
Можно это как-то упростить (не так, как я описал выше)??
Готовый скрипт не храню (каждый раз пишу заново), состряпал по-быстрому [прикрепил]...
BlackSelf
14-10-2009, 22:55
Т.е. инсталлятор, который на скринах, сделан не в Inno?? »
Нет. Это ммб. В инно сделан setup_.exe
Можно это как-то упростить (не так, как я описал выше)?? »
Запаковать по одному файлу через for /r %%a in (*.*) do precomp04.exe -slow "%%a"
Ну и распаковать также, только с параметром -r и по маске *.pcf
По крайней мере, 7zip не надо будет использовать.
BlackSelf, можешь на примере любого файла расписать упаковку и распаковку (и как это всё в скрипте прописать), а то даже не знаю, туда ли параметры написал :(
Где при этом должен быть файл precomp04.exe? И "по одному файлу" - это как?? Если это для нескольких больших, то понятно, а если много мелких, то чёт не очень...
Подскажите как испаравить. »
; Автор kombat 77 http://forum.ru-board.com/profile.cgi?action=show&member=kombat 77
[Setup]
AppName=Test
AppVerName=Test v 1.0
DefaultDirName={pf}\Test
OutputDir=userdocs:Test.
Uninstallable=False
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Icons]
Name: "{userdesktop}\notepad"; Filename: "{win}\notepad.exe";
[Files]
Source: FileName1; Flags: dontcopy
Source: FileName2; Flags: dontcopy
[Code]
function GetModuleHandle(lpModuleName: LongInt): LongInt;
external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt;
external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
external 'DrawIconEx@user32.dll stdcall';
procedure InitializeWizard();
var
Rect: TRect;
HIcon: LongInt;
begin
ExtractTemporaryFile('FileName1');
HIcon := ExtractIcon(GetModuleHandle(0), ExpandConstant('{tmp}\FileName1'), 0);
WizardForm.SelectDirBitmapImage.Hide;
with TBitmapImage.Create(WizardForm) do
begin
SetBounds(WizardForm.SelectDirBitmapImage.Left, WizardForm.SelectDirBitmapImage.Top, ScaleX(32), ScaleY(32));
with Bitmap do
begin
Width := ScaleX(32);
Height := ScaleY(32);
Rect.Right := ScaleX(32);
Rect.Bottom := ScaleY(32);
Rect.Left := ScaleX(0);
Rect.Top := ScaleY(0);
Canvas.Brush.Color := WizardForm.Color;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
end;
Parent := WizardForm.SelectDirPage;
end;
ExtractTemporaryFile('FileName2');
HIcon := ExtractIcon(GetModuleHandle(0), ExpandConstant('{tmp}\FileName2'), 0);
WizardForm.SelectGroupBitmapImage.Hide;
with TBitmapImage.Create(WizardForm) do
begin
SetBounds(WizardForm.SelectGroupBitmapImage.Left, WizardForm.SelectGroupBitmapImage.Top, ScaleX(32), ScaleY(32));
with Bitmap do
begin
Width := ScaleX(32);
Height := ScaleY(32);
Rect.Right := ScaleX(32);
Rect.Bottom := ScaleY(32);
Rect.Left := ScaleX(0);
Rect.Top := ScaleY(0);
Canvas.Brush.Color := WizardForm.Color;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
end;
Parent := WizardForm.SelectProgramGroupPage;
end;
end;
Нет. Это ммб. В инно сделан setup_.exe »
мне кажется, это на Inno, а видео - это помоему сделано с помощью isFlash.dll от ExpeditoR'a.
Хотя я могу и ошибаться.
BlackSelf
14-10-2009, 23:27
A1EXXX, кинул в лс.
Serega, у меня есть исходники от игла. Сделано всё на ммб. С помощью isFlash, к огромному сожалению, такое сделать невозможно(
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.