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

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

Автор: CapsLosk
Дата сообщения: 19.01.2007 01:45
Genri
Я всеж надеюсь что ты мне поможешь!!!
Автор: Genri
Дата сообщения: 19.01.2007 01:47
CapsLosk -- не понял. в ПМ не смотрел?
Автор: CapsLosk
Дата сообщения: 19.01.2007 03:18
Genri

Огромное тебе спасибо!!! Все работает, единственное когда нажимаешь "отмену"
сразу же идет переключение на фоновое окно - т.е. splash тутже пропадает и появляется фоновое окно где и требуется подтверждение. Можно ли сделать чтоб подтверждение об остановке выскакивало тамже:

Нажимаю отмена, все просто тормозится и вычкакивает подтверждение,
отказываюсь от отмены - продолжается splash и извлечение файлов?

Добавлено:
Скрипт на всякий пожарный (если ты вдруг уже удалил) - скинул в личку.
Есче раз огромное спасибо!
Автор: Genri
Дата сообщения: 19.01.2007 12:14
CapsLosk -- ну, я же не могу предугадать, как тебе надо. У тебя заложен именно такой алгоритм (сначала MainForm.Visible := True;, потом Splash.Close; и только потом отображение формы с прогресс-баром и кнопкой отмена).
Если надо так, как ты описал выше, то найди строчки:
MainForm.Visible := True;
и
Splash.Close;
...и перенеси их ниже (туда, где строка Form.Free(); ). Должно быть так:
MainForm.Visible := True;
Form.Free();
Splash.Close;

Автор: NightW0lf
Дата сообщения: 19.01.2007 13:39
EagleSH
Проверь личку!
Автор: EagleSH
Дата сообщения: 19.01.2007 13:46
NightW0lf
гуд! пасиб.

блин всеже транспорент интересует, неужто всё так безнадежно...
Автор: AtotIK
Дата сообщения: 19.01.2007 13:55
2 Genri

Вставил твой код который был в архиве с исходниками (JPEG_*.iss) в мой (который я скидывал сюда на 69 страницу).

Всё работает норально с WindowVisible=yes...Но мне это не надо...Со значением no при запуске инсталла картинка отоброжается на 4-ую часть экрана...Но это ещё не проблема...Мне удалось растянуть его на весь экран...:-\

Получается так, что картинка отображается в центре экрана...И получается, что если она больше разрешения экрана, то вся не видна...Вопрос к тебе:

Как сделать, что-бы картинка *.jpg подгонялась под разрешение экрана?
Автор: NightW0lf
Дата сообщения: 19.01.2007 14:16
AtotIK

Цитата:
Как сделать, что-бы картинка *.jpg подгонялась под разрешение экрана?

А тебе надо чтобы *.JPG была картинка заднего фона или слайд шоу?
Автор: AtotIK
Дата сообщения: 19.01.2007 14:18
И то и то...Они все размещаются в центре экрана (у меня разерешение 1024х768, а картинки 1600х1200)...Надо, что-бы подгонялись все.
Автор: NightW0lf
Дата сообщения: 19.01.2007 15:01
AtotIK

Цитата:
И то и то...Они все размещаются в центре экрана (у меня разерешение 1024х768, а картинки 1600х1200)...Надо, что-бы подгонялись все.

У меня есть пример когда картинка из BMP а слайд шоу из JPG и с параметром WindowVisible=no и они подгоняются под любой размер экрана.

[more=Пример]

Код:
[Setup]
WindowVisible=no

[Files]
Source: "x:\License.rtf"; DestDir: {tmp}; Flags: dontcopy noencryption
Source: "other_files"; DestDir: {tmp};

Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\Fon.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
const
BACKGROUND = 6; // "5"-по центру, "6"-растянуто на весь экран, "1,2,3,4"-в разных углах экрана
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';
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';
function GetSystemMetrics(nIndex: Integer): Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s: string;
License: string;
width, height: Integer;
begin
{********************Для корректного отображения заголовков**********}
WizardForm.Position := poScreenCenter; //Добавленно мною
{********************Для корректного отображения заголовков**********}
MainForm.BORDERSTYLE := bsNone;

{********************Для корректного отображения rtf файлов**********} //Добавленно мною
ExtractTemporaryFile('License.rtf');
LoadStringFromFile(ExpandConstant('{tmp}') + '\License.rtf', License)
WizardForm.LicenseMemo.RTFText := License;
{********************Для корректного отображения rtf файлов**********} //Добавленно мною

width := GetSystemMetrics(0);
height := GetSystemMetrics(1);
MainForm.Width := width;
MainForm.Height := height;
width := MainForm.ClientWidth;
height := MainForm.ClientHeight;
ExtractTemporaryFile('Fon.bmp');
s := ExpandConstant('{tmp}') + '\Fon.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Left := 0;
BackgroundBitmapImage.Top := 0;
BackgroundBitmapImage.Width := width;
BackgroundBitmapImage.Height := height;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch := True;
MainForm.Visible := True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall
then
begin
ExtractTemporaryFile('1.jpg'); //это файлы для слайд-шоу, их может быть и больше
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
isxbb_AddImage(ExpandConstant('{tmp}') + '\1.jpg', BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}') + '\2.jpg', BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}') + '\3.jpg', BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
isxbb_StartTimer(3, BACKGROUND) //это таймер для слайд-шоу в секундах
end
else if CurStep = ssPostInstall then
isxbb_KillTimer(BACKGROUND);
end;
Автор: Genri
Дата сообщения: 19.01.2007 17:13
AtotIK
Цитата:
Как сделать, что-бы картинка *.jpg подгонялась под разрешение экрана?
-- сколько людей - столько мнений. До этого меня спрашивали:
Цитата:
Genri,
Я у тебя уже спрашивал, как сделать, чтобы картинка не растягивалась, а находилась по центру. Как это же сделать в этой конструкции которую ты сегодня делал?


Мне не хочется возвращаться к вопросу изменения исходников. Используй другие методы. Например так, как предлагается выше.
Автор: Midway
Дата сообщения: 19.01.2007 17:40
Ламерский вопрос:
Как удалить из папки куда будет устанавливаться прога старую версию продукта?
Ведь могут быть и библиотеки испоьзуемые системой...
Автор: Sanyk36
Дата сообщения: 19.01.2007 21:01
Как сделать, что бы в Выборе папки установки было окно с выбором дисков для установки, что бы не тыкать обзор, а сразу выбрать нужный диск, что то наподобе как у Inno Setup 3
Автор: NightW0lf
Дата сообщения: 19.01.2007 21:17
Sanyk36

Цитата:
Как сделать, что бы в Выборе папки установки было окно с выбором дисков для установки, что бы не тыкать обзор, а сразу выбрать нужный диск, что то наподобе как у Inno Setup 3

По крайней мере на сколько я знаю то не как, т.к. начиная с пятой версии Inno Setup перестал поддерживать эту возможность.

Автор: Sanyk36
Дата сообщения: 19.01.2007 22:21
И ещё такой вопрос, можно сделать так, что бы SFX архив не упаковывался Inno Setup, а лежал в одной папке с готовым Setup.exe, так что бы Setup.exe подхватывал его и начинал распаковывать в заданную инсталятором папку. А тож SFX сначало распаковывается из Setup.exe и только потом начинает распаковка самого SFX
Автор: NightW0lf
Дата сообщения: 20.01.2007 12:40
Sanyk36

Цитата:
И ещё такой вопрос, можно сделать так, что бы SFX архив не упаковывался Inno Setup, а лежал в одной папке с готовым Setup.exe, так что бы Setup.exe подхватывал его и начинал распаковывать в заданную инсталятором папку. А тож SFX сначало распаковывается из Setup.exe и только потом начинает распаковка самого SFX

Можно!
[more=Пример]

Код:
[Run]
;Запуск внешних SFX 7-ZIP архивов
;-При желании можно установить дополнительные флаги, например, hidewizard скрывает окно инсталлятора при выполнении распаковки архива.
;-При запуске устанавливаем параметр -y, который обозначает "Всегда Да" при любых действиях, параметр -o "{app}" который означает, что надо распаковать в указанную папку. Флаг waituntilterminated должен быть всегда в этом случае:
Filename: "{src}\SFX_ARCHIVE.exe"; WorkingDir: "{src}"; Parameters: "-y -o""{app}"""; StatusMsg: "Распаковка файлов игры..."; Flags: waituntilterminated
Автор: NightW0lf
Дата сообщения: 21.01.2007 12:45
Такой вопрос:
Как можно сделать чтобы в этом коде была не кнопка "About" а надпись "About"?

Код:
[code]
procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('Это демо версия программы.', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.innosetup.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
var
AboutButton, CancelButton: TButton;
URLLabel: TNewStaticText;
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText: TNewStaticText;

begin
CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := '&About...';
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;

URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'www.innosetup.com';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2;
URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Left := 50;
BackgroundBitmapImage.Top := 100;
BackgroundBitmapImage.AutoSize := True;
BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Parent := MainForm;

BackgroundBitmapText := TNewStaticText.Create(MainForm);
BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
BackgroundBitmapText.Caption := 'TBitmapImage';
BackgroundBitmapText.Parent := MainForm;
end;
Автор: Genri
Дата сообщения: 21.01.2007 13:47
NightW0lf -- насколько я понимаю, в самом простейшем варианте, достаточно в
var
AboutButton, CancelButton: TButton;
URLLabel: TNewStaticText;
.. перенести AboutButton к URLLabel :
var
CancelButton: TButton;
AboutButton, URLLabel: TNewStaticText;

и соответственно вместо:
AboutButton := TButton.Create(WizardForm);
... создавать компонент как:
AboutButton := TNewStaticText.Create(WizardForm);

или речь шла о чем-то другом?
Автор: NightW0lf
Дата сообщения: 21.01.2007 17:18
Genri
Спасибо работает!
Автор: Sero
Дата сообщения: 21.01.2007 18:13

Цитата:
Такой вопрос:
Как можно сделать чтобы в этом коде была не кнопка "About" а надпись "About"?


Можно

Код:
[code]
procedure AboutTextOnClick(Sender: TObject);
begin
MsgBox('This is simple demo', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.innosetup.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
var
AboutText : TNewStaticText;
URLLabel: TNewStaticText;
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText: TNewStaticText;
CancelButton: TButton;

begin
CancelButton := WizardForm.CancelButton;
AboutText := TNewStaticText.Create(WizardForm);
AboutText.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutText.Top := CancelButton.Top;
AboutText.Width := CancelButton.Width;
AboutText.Height := CancelButton.Height;
AboutText.Caption := '&About...';
AboutText.OnClick := @AboutTextOnClick;
AboutText.Parent := WizardForm;
AboutText.Cursor := crHand;
AboutText.Font.Color := clBlue;
AboutText.Font.Style :=[fsUnderline];

URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'www.innosetup.com';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := AboutText.Top + AboutText.Height - URLLabel.Height - 2;
URLLabel.Left := AboutText.Left + AboutText.Width + ScaleX(20);

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Left := 50;
BackgroundBitmapImage.Top := 100;
BackgroundBitmapImage.AutoSize := True;
BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Parent := MainForm;

BackgroundBitmapText := TNewStaticText.Create(MainForm);
BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
BackgroundBitmapText.Caption := 'TBitmapImage';
BackgroundBitmapText.Parent := MainForm;
end;
Автор: NightW0lf
Дата сообщения: 21.01.2007 21:33
Genri
Посмотри личку.

Добавлено:
Еще такой вопрос:
Как сделать, чтобы после удаления удались абсолютно ВСЕ ключи созданные во время установи?
Автор: Sero
Дата сообщения: 21.01.2007 22:54

Цитата:
Как сделать, чтобы после удаления удались абсолютно ВСЕ ключи созданные во время установи


К каждому параметру добавь флаг uninsdeletevalue
Автор: NightW0lf
Дата сообщения: 21.01.2007 23:28
Sero

Цитата:
К каждому параметру добавь флаг uninsdeletevalue

Спасибо попробую!
Автор: yurri
Дата сообщения: 22.01.2007 00:13
Уважаемые господа (товарищи) !

Подскажите как оптимизировать создание инстталятора под
многопроцессорную систему (если это конечно возможно)
Автор: Sero
Дата сообщения: 22.01.2007 00:27
NightW0lf
Как можно сделать чтобы WizardSmallImageFile в инстталяторе был 170х55 а не 55х55.
Автор: CapsLosk
Дата сообщения: 22.01.2007 01:38
Genri

Огромное тебе Человечье спасибо - очень помог
Автор: Sanyk36
Дата сообщения: 22.01.2007 02:32
Sero

Цитата:
Как можно сделать чтобы WizardSmallImageFile в инстталяторе был 170х55 а не 55х55.

попробуй в Рестораторе подредактировать C:\Program Files\Inno Setup 5\Setup.e32
Открой RCData/TWizardForm, найди это в 558 строке и сделай как ниже:

Код: object WizardSmallBitmapImage: TBitmapImage
Left = 440 //Заменить на 325
Top = 0
Width = 55 //Заменить на 170
Height = 58
BackColor = clWindow
end
object PageDescriptionLabel: TNewStaticText
Left = 40
Top = 26
Width = 389 //Заменить на 274
Height = 29
AutoSize = False
Caption = '*'
ShowAccelChar = False
TabOrder = 1
WordWrap = True
end
object PageNameLabel: TNewStaticText
Left = 24
Top = 10
Width = 405 //Заменить на 290
Height = 14
AutoSize = False
Caption = '*'
ShowAccelChar = False
TabOrder = 0
end
Автор: NightW0lf
Дата сообщения: 22.01.2007 09:51
Sero

Цитата:
Как можно сделать чтобы WizardSmallImageFile в инстталяторе был 170х55 а не 55х55.

[more=Пример]

Код:
[Setup]
WizardSmallImageFile = C: \SmallImage.bmp
; Здесь использован рисунок с размерами 170 х55

[code]
procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 55; ///Размер рисунка
Width := 170; ///
end;
with PageNameLabel do begin
Width := Width - 497; ///Поставьте здесь значения на 0 если хотите вернуть текст
Left := Left + 497; ///
end;
with PageDescriptionLabel do begin
Width := Width - 497; ///Поставьте здесь значения на 0 если хотите вернуть текст
Left := Left + 497; ///
end;
end;
end;
Автор: Sero
Дата сообщения: 22.01.2007 11:54

Цитата:
попробуй в Рестораторе подредактировать C:\Program Files\Inno Setup 5\Setup.e32
Открой RCData/TWizardForm, найди это в 558 строке и сделай как ниже:


Спасибо за пример, но можно сделать это в [Code] как у NightW0lf, но только чтобы текст был виден.

Автор: EagleSH
Дата сообщения: 22.01.2007 12:42
господа программеры в след файлах присудствует словечко transparent

Compil32.exe

dsTransparent
Transparent
Transparent
IsThemeBackgroundPartiallyTransparent
Transparent
Transparent

--------------------

ISCmplr.dll:

TransparentColor
TRANSPARENT


--------------------


setup.e32:

Transparent
IsThemeBackgroundPartiallyTransparent


также есть WordWrap, которая в коде пашет (WizardForm.SelectDirLabel.WordWrap:=True;), а вот транспарент та и не удалось правильную запись сделать... нужно ковырять.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

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


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