Войти

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


Страниц : 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

A1EXXX
14-10-2009, 17:24
Preparing... » Это я перепутал со страницей "Всё готово к установке" :blush2:
Спасибо за подсказку, разберусь! :)

x-net
14-10-2009, 17:35
A1EXXX дай ссылку на твой inno который пользуешься

A1EXXX
14-10-2009, 17:46
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)

Serega
14-10-2009, 18:55
+ поверх (чтоб на русском было) »
Но тогда Inno станет 5.2.3, в место 5.3.5

Serega
14-10-2009, 19:38
Здравствуйте, где-то видел вопрос, но уже не могу найти где... Одним словом он меня заинтирестовал.
Суть вопроса: "Как сделать прозрачным часть окна инсталлятора, где расположены кнопки, но чтоб кнопки были видны."

[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;

MrAWP
14-10-2009, 19:51
serg aka lain, спасибо, работает. Но есть проблема - у меня распаковка архива начинается только если выбранный компонент arc_yes, но инсталлятор, даже если компонент отключен, все равно запрашивает этот файл :( Нельзя ли как то связать компонент с проверкой?

Wiper
14-10-2009, 20:33
Serega спасибо за Converter Reg,отличная прога :good:

serg aka lain
14-10-2009, 20:58
"Как сделать прозрачным часть окна инсталлятора, где расположены кнопки, но чтоб кнопки были видны." »
Ооо, WinApi. Вы случаем не знаете, как сделать средствами WinApi кнопки плоскими, ну как в классической теме,
знаю что вид кнопок зависит от текущего оформления винды, но всёж хотелось.

A1EXXX
14-10-2009, 20:59
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;

MrAWP
14-10-2009, 21:34
serg aka lain спасибо) уже до самого дошло)

GrizzlyMK
14-10-2009, 21:54
Подскажите как испаравить.
http://pics.kz/s5/52/b3/f9/b1/52b3f9b199fc452796ca56a64e96b861_preview.jpg (http://pics.kz/viewfull491023)

A1EXXX
14-10-2009, 21:57
Меня заинтересовал репак от Е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). Показывай весь скрипт, тогда можно будет что-то сказать, а гадать, "какая процедура (из какого-то другого скрипта) может такое делать", мы можем долго.

Serega
14-10-2009, 22:32
спасибо за Converter »
Пользуйтесь на здоровье :wink:

Вы случаем не знаете, как сделать средствами WinApi кнопки плоскими, ну как в классической теме »
Не сталкивался с таким, подумаю на досуге...

в последней версии компилятора от RT у меня Мастер скриптов не работал... »
Есть такое дело, но я не использую мастера.
Просто на скорую руку, сделал для себя прогу и повесил кнопку в Total Commander. Нужна болванка скрипта, я нажимаю на кнопку и болванка готова...

Какая процедура (из какого-то другого скрипта) может такое делать?? »
Любая, которая создаёт, что-то поверх или переназначает LogoLabel. Присмотритесь к процедурам CurPageChanged, NextButtonClick, CurStepChanged.

A1EXXX
14-10-2009, 22:40
в условиях инно такое сделать нельзя »
Т.е. инсталлятор, который на скринах, сделан не в Inno??
Декомпрессию и распаковку архива сделать можно »
Можно это как-то упростить (не так, как я описал выше)??

Готовый скрипт не храню (каждый раз пишу заново), состряпал по-быстрому [прикрепил]...

BlackSelf
14-10-2009, 22:55
Т.е. инсталлятор, который на скринах, сделан не в Inno?? »
Нет. Это ммб. В инно сделан setup_.exe
Можно это как-то упростить (не так, как я описал выше)?? »
Запаковать по одному файлу через for /r %%a in (*.*) do precomp04.exe -slow "%%a"
Ну и распаковать также, только с параметром -r и по маске *.pcf
По крайней мере, 7zip не надо будет использовать.

A1EXXX
14-10-2009, 23:11
BlackSelf, можешь на примере любого файла расписать упаковку и распаковку (и как это всё в скрипте прописать), а то даже не знаю, туда ли параметры написал :(
Где при этом должен быть файл precomp04.exe? И "по одному файлу" - это как?? Если это для нескольких больших, то понятно, а если много мелких, то чёт не очень...

Serega
14-10-2009, 23:22
Подскажите как испаравить. »

; Автор 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