Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Genri
Дата сообщения: 29.11.2006 21:20
svs123456789
Если я тебя правильно понял, то проблема у тебя с параметрами:
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}

Если так, то это можно решить следующим образом:
Код:
#define MyAppName "Имя"
#define MyAppVerName "'" + MyAppName + " ver 1.0'"
#define MyAppExeName "test.exe"
#define MyAppLongName "'" + MyAppName + "'"
[Setup]
AppName={#MyAppLongName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyAppName}
Автор: mikar
Дата сообщения: 30.11.2006 07:16
Genri
Я может быть неточно выразился, мне нужно изменить иконку деинсталлятора в папке с установленной программой, а также иконку в правом верхнем углу в окне Деинсталляции.

UninstallDisplayIcon={app}\MyProg.exe,1 изменяет иконку на странице Установка и удаление программ Панели управления, а UninstallIconFile={app}\MyProg.ico не проходит, да и в Справке написано:
Цитата:
Obsolete in 5.0.0. As Setup and Uninstall have been merged into a single executable, setting a custom icon for Uninstall is no longer possible.

А как можно поменять цвет шрифта, используемого на страницах Приветствие и Установка завершена (задается WelcomeFontName=Verdana и WelcomeFontSize=12)?
Автор: GRom V
Дата сообщения: 30.11.2006 07:35
Genri

Цитата:
Пример здесь
Линк на innocallback.dll можно найти постом выше.


Не мог бы дать линк на innocallback.dll - чето не нашел!?
Автор: Genri
Дата сообщения: 30.11.2006 08:59
GRom V
http://www.sherlocksoftware.org/file.php?id=21
Автор: GRom V
Дата сообщения: 30.11.2006 09:24
Genri

Спасибо!
Автор: Genri
Дата сообщения: 30.11.2006 14:10
mikar

Цитата:
мне нужно изменить иконку деинсталлятора в папке с установленной программой
..........
As Setup and Uninstall have been merged into a single executable, setting a custom icon for Uninstall is no longer possible.

Действительно. Уже невозможно.
Тогда могу только посоветовать следующее:

Код:
[Setup]
UninstallFilesDir={app}\uninst

[Icons]
Name: "{app}\Uninstall My Program"; Filename: "{uninstallexe}"; IconFilename: "aaa.exe"
Автор: svs123456789
Дата сообщения: 30.11.2006 14:36
Genri

Цитата:
проблема с параметрами:

СПАСИБО!
Автор: Genri
Дата сообщения: 30.11.2006 15:39
mikar
Сорри, тебя еще и страница Установка завершена интересует. Тогда еще проще:

Код:
procedure CurPageChanged(CurPageID: Integer);
begin
Case CurPageID of
wpWelcome: WizardForm.WelcomeLabel1.Font.Color:= clRed;
wpFinished: WizardForm.FinishedHeadingLabel.Font.Color:= clGreen;
end;
end;
Автор: svs123456789
Дата сообщения: 30.11.2006 17:15
не работает скрипт из Руководство по Inno Setup 5
[more]
[Code]
const
BACKGROUND=6;
TIMER=16;

//function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
//external 'isxbb_AddImage@files:isxbb.dll stdcall';

//function isxbb_Init(hWnd: Integer): Integer;
//external 'isxbb_Init@files:isxbb.dll stdcall';

//procedure InitializeWizard();
//begin
// ExtractTemporaryFile('1.jpg');
// isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
// isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//end;

function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';
function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';

function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
//В начале этапа установки запускаем слайд-шоу
if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//Таймер показа изображений, в секундах
isxbb_StartTimer(3,BACKGROUND)
end
//На завершающем этапе останавливаем таймер, при этом возвращается фоновое изображение по умолчанию
else if CurStep=ssPostInstall then
isxbb_KillTimer(BACKGROUND);
end;
[/more]
картинки видимо сменяются с недоступной глазу скоростью
Автор: Genri
Дата сообщения: 30.11.2006 19:07
svs123456789
Твой код вставил один в один. Все пашет. Проблема где-то в другом.

isxbb_Init(......); ты вызываешь 2 раза. ИМХО второй раз лишнее.
Автор: svs123456789
Дата сообщения: 30.11.2006 20:51
а что означает BACKGROUND=6; и TIMER=16;
Автор: Genri
Дата сообщения: 30.11.2006 21:52
svs123456789

Цитата:
что означает BACKGROUND=6; и TIMER=16;

Просто поименованные константы. По ним длл-ка распознает, куда выводить изображение. В оригинале:
const
TOPLEFT        = 1;
TOPRIGHT    = 2;
BOTTOMLEFT    = 3;
BOTTOMRIGHT    = 4;
CENTER        = 5;
BACKGROUND    = 6;
TOP        = 7;
BOTTOM        = 8;
LEFT        = 9;
RIGHT        = 10;
TIMER        = 16;
Автор: mikar
Дата сообщения: 01.12.2006 06:00
Genri
Спасибо за помощь и за ответы на все вопросы.
Автор: svs123456789
Дата сообщения: 01.12.2006 15:51
Genri
значит isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
означает побитовое "или" 6 и 16 ?
я пробовал их (числа) изменять и получил в финале мозаику

я пробовал изменять 3 в isxbb_StartTimer(3,BACKGROUND) НО так и не получил анимации!
обидно!
Автор: Genri
Дата сообщения: 01.12.2006 16:34
svs123456789

Цитата:
означает побитовое "или" 6 и 16

Типа того. Хотя в чистом виде битовая маска была бы, если бы значения всех констант были равны степеням двойки. Но в данном случае, очевидно разработчика устроил и такой вариант (т.е. старший бит в 10110 определяет таймер, а все остальное одна из остальных констант, так как очевидно два местоположения задать нельзя).

3 в isxbb_StartTimer(3,BACKGROUND) это шаг таймера в секундах.

Если хочешь, можешь в личку выслать весь код. Конфиденциальность гарантирую
Автор: svs123456789
Дата сообщения: 02.12.2006 18:16
Genri
СПАСИБО !!! оказывается проблема была a JPG - не все jpg умеет воспроизводить dll сабжа
Автор: Chanka
Дата сообщения: 03.12.2006 11:08
Блин проблема.

Вставляю изображение через код

[Code]
procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
begin
ExtractTemporaryFile('My_Image.bmp'); //My_Image.bmp - указываемое изображение в секции [Files]
s:=ExpandConstant('{tmp}')+'\My_Image.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
end;

И хочу вставить через ISSI смал имэйдж большего размера.
[ISSI]

#define ISSI_IncludePath "C:\ISSI"
#define ISSI_WizardSmallBitmapImage "C:\ISSI\Install_Images\SmallImage.bmp"
#define ISSI_WizardSmallBitmapImage_x 176
#define ISSI_IncludePath "C:\ISSI"
#include ISSI_IncludePath+"\_issi.isi"


Но при компиляции останавливается на procedure InitializeWizard(); и ругается. Что не так? Помогите!!!
Автор: Genri
Дата сообщения: 03.12.2006 14:32
Chanka

Цитата:
при компиляции останавливается на procedure InitializeWizard()

Переименуй procedure InitializeWizard() в procedure ISSI_InitializeWizard() и в секцию [ISSI] добавь #define ISSI_InitializeWizard (можно вместо одной лишней #define ISSI_IncludePath "C:\ISSI" - их у тебя две)
Автор: Chanka
Дата сообщения: 03.12.2006 18:54
Genri,

не помогло Пишет unknown identifier 'ISSI_InitializeWizard'


[ISSI]
#define ISSI_WizardSmallBitmapImage "C:\ISSI\Install_Images\SmallImage.bmp"
#define ISSI_WizardSmallBitmapImage_x 176
#define ISSI_InitializeWizard
#define ISSI_IncludePath "C:\ISSI"
#include ISSI_IncludePath+"\_issi.isi"
Автор: Genri
Дата сообщения: 03.12.2006 20:13
Chanka
Прочитай внимательно мой пост. Надо сделать две вещи:

1. В секцию [ISSI] добавить строку:
#define ISSI_InitializeWizard
-- это ты сделал

2. В секции Code процедуру:
procedure InitializeWizard();
...переименовать в:
procedure ISSI_InitializeWizard();
-- судя по ошибке, ты это не сделал или ошибся в написании.
Автор: Chanka
Дата сообщения: 03.12.2006 22:42
Спасибо, Genri!


Просто я поставил [ISSI], а под ним код, а надо было наоборот

Еще один вопросик: можно ли использовать в качестве фона JPG изображение но только не через isxbb.dll?
Автор: Genri
Дата сообщения: 03.12.2006 23:26
Chanka

Цитата:
можно ли использовать в качестве фона JPG изображение

Насколько я знаю, без использования внешних длл, только BMP
Автор: GRom V
Дата сообщения: 04.12.2006 02:05
Genri

Цитата:
[Setup]
AppName=My Program
AppVerName=My Program
CreateAppDir=No
WindowVisible=Yes

[Files]
; Копирование *.dll для демонстрации
Source: "{sys}\*.dll"; DestDir: {tmp}; Flags: external
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: pic1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: pic2.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
BackgroundBitmapImage: TBitmapImage;
TimerID: LongWord;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:innocallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';


//**************************************//
function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
begin
Result:= (Position-Min)/((Max - Min)/100) ;
end;
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
percent: integer;

begin
percent:= PercentProgress;
(* К сожалению, Inno Setup не поддерживает
задание диапазона в операторе Case. Типа:
Case X of
1 .. 10: xxx;
11 .. 20: yyy; *)
with BackgroundBitmapImage do
begin
if ((percent > 0) and (percent < 10) and (Tag <> 1)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic1.bmp');
Tag:= 1;
end else
if ((percent > 11) and (percent < 20) and (Tag <> 2)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic2.bmp');
Tag:= 2;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;

begin
if CurPageID = wpInstalling then
begin
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 500, pfunc);

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
with BackgroundBitmapImage do
begin
Left := 50;
Top := 100;
AutoSize := True;
Center := True;
Parent := MainForm;
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic1.bmp');
Tag:= 1;
end;
end;
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('pic1.bmp');
ExtractTemporaryFile('pic2.bmp');
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;



Этот скрипт очень даже ен плох! Но подскажи - как сделать чтоб форма рисовалась не сразу, т.е первая картинка вылетала не сразу а через какое то время - например(if ((percent > 10) and (percent <20))
Заранее благодарен.
Автор: Genri
Дата сообщения: 04.12.2006 10:42
GRom V
Ты исправляешь посты быстрее, чем я отвечаю

1. Рисовать или нет, можно использовать свойство Visible. Например:

Код:
procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;

begin
if CurPageID = wpInstalling then
begin
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 500, pfunc);

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
with BackgroundBitmapImage do
begin
Left := 50;
Top := 100;
AutoSize := True;
Center := True;
Parent := MainForm;
Visible := False; // все подготовили, но скрыли.
end;
end;
end;
Автор: Chanka
Дата сообщения: 04.12.2006 12:25
А можно ли сделать как 1с делает в своих игрушках. Когда запускаешь сетап, сначала рисуется форма с картинкой до панели задач, потом появляется мастер и панель задач прикрывается. Всё это происходит очень быстро. Кто-нибудь знает, как это сделать?
Автор: AtotIK
Дата сообщения: 04.12.2006 15:43
Не видел как делает 1С (а в каких игрухах?), но способ есть:

1. Нужен рисунок сделанный в 32-битном цвете. Желательно с прозрачным фоном.

2. Запускиется специальная прога (если надо - завтра залью, весит она ~200 кб) из Temp'а которая отображает эту картинку "наплывами" - сначала она постепенно появляется, а потом постепенно пропадает.

Вот и всё.
Автор: omals
Дата сообщения: 04.12.2006 16:47
Привет
в скрипте для закачки файла и его инсталяции (по выбора юзверя) использую isxdl.dll (http://www.istool.org/default.aspx/isx/isxdl).
Вопрос: Как в silent режиме спрятать окно прогресса закачки?. Возможно ли это?
если да, то как? а может у кого-то есть исходники isxdl.dll (на том сайте не смог найти)?
Спасибо
Автор: Chanka
Дата сообщения: 04.12.2006 17:05

Цитата:
Не видел как делает 1С (а в каких игрухах?)


Например: Prey, Call of Juarez, El Matador и.т.д.


Цитата:
если надо - завтра залью


Заливай
Автор: Genri
Дата сообщения: 04.12.2006 18:04
Chanka

Цитата:
сначала рисуется форма с картинкой до панели задач, потом появляется мастер и панель задач прикрывается

Очевидно речь идет о двух свойствах формы: BorderStyle:= bsNone и WindowState:= wsMaximized. Первое в Inno Setup выставить можно, а второе к сожалению не поддерживается (по крайней мере мне не известно).

Добавлено:
Chanka
Не очень красиво, но решить можно следующим образом:

Код:
[Code]
function ShowWindow(hWnd: LongWord; nCmdShow: LongWord): LongWord;
external 'ShowWindow@user32.dll stdcall';

procedure InitializeWizard();
begin
MainForm.BorderStyle:= bsNone;
ShowWindow(MainForm.Handle, SW_SHOWMAXIMIZED);
end;
Автор: Chanka
Дата сообщения: 04.12.2006 20:50
Genri,

пойдёт

Еще вопросик:

Если вставить этот код, то не отображаются компоненты. Как-нибудь можно это поправить?

[Code]
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
width, height:Integer;
begin
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
ExtractTemporaryFile('1.bmp');
s:=ExpandConstant('{tmp}')+'\1.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: ICONS


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.