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

Статус
В этой теме нельзя размещать новые ответы.

LexBell

Борода
Супер модератор
А можно узнать, почему надоела?
логично-же, что справка - это тебе не боевик какой-нибудь или фэнтези :) А по делу - не нужно читать справку подряд, хотя и желательно. Я лично обхожусь тем, что просто ищу в ней то, что поможет мне в данный момент.
 

RameR

Новичок
Нашел более оптимальную версию создания слайд шоу...
Наконец-то))
Пожалуйста помогите слайд шоу сделать в WizardForm (в окне инсталлятора), и его подгоном (ширина высота и расположение типа SetBounds).
Скрипт прилагается:
[Setup]
AppName=Assassin's Creed III
AppVerName=Assassin's Creed III
DefaultDirName={sd}\GAMES\Assassin's Creed III
DefaultGroupName=Ubisoft\Assassin's Creed III
DirExistsWarning=no
DisableReadyPage=yes
OutputDir=.
OutputBaseFilename=Setup
UninstallFilesDir={app}\Uninstall
CreateUninstallRegKey=no
SolidCompression=yes

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: Slide\*.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: ISgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: CAM\*; DestDir: {app}; Flags: ignoreversion

[UninstallDelete]
Type: filesandordirs; Name: "{app}"

Код:
Const
 Indent=25;

Function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
Function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
Procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
Procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
Procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
Procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';

Procedure InitializeWizard;
 Begin
  ssInitialize(GetWindowLong(MainForm.Handle,-8),1,False,1,$FF000000);
  end;

Procedure CurStepChanged(CurStep: TSetupStep);
 Begin
 If CurStep=ssInstall then begin
  ExtractTemporaryFile('Image1.bmp');
  ssAddImage(ExpandConstant('{tmp}')+'\Image1.bmp');
  ExtractTemporaryFile('Image2.bmp');
  ssAddImage(ExpandConstant('{tmp}')+'\Image2.bmp');
  ExtractTemporaryFile('Image3.bmp');
  ssAddImage(ExpandConstant('{tmp}')+'\Image3.bmp');
  ExtractTemporaryFile('Image4.bmp');
  ssAddImage(ExpandConstant('{tmp}')+'\Image4.bmp');
  ssStartShow;
  end;
 If CurStep=ssPostInstall then ssStopShow;
  end;

Procedure CurPageChanged(CurPageID: Integer);
 Begin
 If CurPageID=wpInstalling then begin
  WizardForm.MainPanel.Visible:=False;
  end;
   end;

Procedure DeinitializeSetup;
 Begin
  ssDeInitialize;
  end; [/SPOILER]
Надеюсь на ващу помощь!
 

sergey3695

Ветеран
Модератор
RameR, если не ошибаюся, то так можно сделать слайдшоу только на заднем фоне инсталлятора (на развернутой MainForm)
А чем тебе isSlideShow.dll или смена картинок по таймеру не катят?

Как сделать чтобы взависимоти от распаковки через cmd, двигался прогрессбар и отображались проценты? (сторонние библиотеки не нужны, про isdone (ISExec) я знаю)
 
Последнее редактирование:

RameR

Новичок
Залез в дебри Delphi...дескрипторы...хэндлы! Да помогут мне боги))
Function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
Function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeO ut:boolean;StretchMode:integer;BkgColorWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
Скорей всего зд есь придеться копать чтобы на WizardForm'е сделать этот слайд!...буду дальше искать решение...хотя это может быть ограничением самой ISgsg.dll...
sergey3695,
опробывал слайд шоу через innoCallback.dll и SBSlideShow, но больше понравился через ISgsg.dll
Сейчас гляну ISSlideShow.dll...
sergey3695,
Пожалуйста выложи на rghost'е, если можешь! на народе не хочет скачивать!
Заранее ThankS!!!
 
Последнее редактирование:

log1st

Мимокрокодил
Почему unarc.dll не распаковывает архивы, которые запаролены?

ArcExtract(ArchivesMassive, Dirs_Edit.Text+ExtractPath, 'password', '', '')

ArchivesMassive - массив с путями, ведущими к архивам.
Dirs_Edit - эдит, содержащий путь, выбранный пользователем для распаковки
ExtractPath - массив с путями, указывающими в какую папку распаковать архив (связан с archivesmassive)
 

South

Знаток
Проверенный
Залез в дебри Delphi...дескрипторы...хэндлы! Да помогут мне боги))
Function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
Function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeO ut:boolean;StretchMode:integer;BkgColorWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
Скорей всего зд есь придеться копать чтобы на WizardForm'е сделать этот слайд!...буду дальше искать решение...хотя это может быть ограничением самой ISgsg.dll...
в эти дебри можете не лезть.
GetWindowLong(MainForm.Handle,-8) = Application.Handle
слайд-шоу рисуется в собственном окне. на WizardForm его вывести не получится, хотя дописать dll не сложно
 

RameR

Новичок
South,
Дописать саму Dll или дописать в Inno?
Не сложно, кто знает как это сделать)
Если не трудно не подскажешь как и чем это можно сделать?Самим Delphi...
попробую скачать его и открыть им эту Dll!
 

YURSHAT

Тех. админ
Администратор
Дописать саму Dll
Да, исправить .dll
Не сложно, кто знает как это сделать)
Товарищ South знает как, ибо он автор этой .dll (ISgsg.dll) :)

Если не трудно не подскажешь как и чем это можно сделать?Самим Delphi...
попробую скачать его и открыть им эту Dll
:D
Что бы исправить .dll нужно иметь исходники этой dll. Исходники у автора .dll :)
 

RameR

Новичок
Есть одна задумка!
Обрисую ситуацию:
#define AppName "Assassin's Creed III"
- переменная обычная
#define CapName "Assassin''s Creed III"
- переменная для Caption в Procedure CurPageChanged с двумя артиклями, чтобы Inno не ругался.
Не знаю возможно или нет...Менять цвет текста для #define CapName "Assassin''s Creed III"

То есть выглядит это все так например:
Procedure InitializeWizard;
With WelcomeLabel1 do begin
Parent := WizardForm;
Height := 16;
Top := 0;
Font.Name := 'Tahoma';
Font.Color := $c5b89c;
Font.Height := 16;
end;
Procedure CurPageChanged(CurPageID : integer);
Begin
HideComponents;
Case CurPageID of
//WelcomePage:
wpWelcome: begin
With WizardForm do begin
WelcomeLabel1.Caption := 'Добро пожаловать! Вас приветствует мастер установки игры {#CapName}.';
WelcomeLabel1.Width := 600;
WelcomeLabel1.Left := 95;
WelcomeLabel1.Top := 502;
end;
end;
Цвет - $c5b89c задан для всего текста куда и входит переменная {#CapName}!
И хочется поменять текст {#CapName} на любой другой цвет, чтобы выделялось из основного текста!
Будет круто если это можно будет реализовать, что-то подобное видел в TextModule_v0.2_by_aLLeXUs!
Заранее, Спасибо!
 

Mailchik

Старожил
Проверенный
Будет круто если это можно будет реализовать, что-то подобное видел в TextModule_v0.2_by_aLLeXUs!
Раз видели, почему бы не просмотреть скрипт? В нём как раз таки реализовано это..
Так же есть модуль ReDrawText от Shegorat'а.
ReDrawText & TextModule
 

Comancheros

Мимокрокодил
Добрый вечер,подскажите как убрать выделение в листе компонентов.
 

makst

Новичок
Привет, есть вопрос насчет "records.inf Так насколько я знаю нужно один раз установить игру с "Тестовым прогоном" потом создавшийся "records.inf" скинуть рядом с "setup.exe" и компилировать скрипт. Так вот можно ли както самому вручную внести данные в "records.inf" чтоб пропустить этот шаг
установить игру с "Тестовым прогоном"
 

RameR

Новичок
kkels,
Можно, почитай Readme для ISDone 0.6 Final в пункте Работа с библиотекой, написанна автоматическая и ручная растановка процентов!Все расписанно и понято что и как)
Если при автоматической растановке еще нужно разкомментировать #define Records, и после скомпилировать его!
 
Последнее редактирование:

Mailchik

Старожил
Проверенный
Comancheros,
Код:
WizardForm.ComponentsList.WantTabs := True;
[HR][/HR][HR][/HR]
можно ли както самому вручную внести данные в "records.inf" чтоб пропустить этот шаг
Да, можно. Но если бы вы прочитали справку к ISDone, у вас бы не возник этот вопрос.
Об ручной расстановке процентов...
 

Лёха

Участник
Народ подскажите, почему при компиляции инстала последняя функция вызывает ошибку
и как сделать так что бы картинка не перекрывала текст(была на заднем плане)
Код:
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "InstallFiles\"; Flags: dontcopy;

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"

[cod]
var
WizardImg: Longint;

function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetPosition(img :Longint; NewLeft, NewTop, NewWidth, NewHeight :integer); external 'ImgSetPosition@{tmp}\botva2.dll stdcall delayload';
procedure ImgRelease(img :Longint); external 'ImgRelease@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetVisibility(img :Longint; Visible :boolean); external 'ImgSetVisibility@{tmp}\botva2.dll stdcall delayload';
function ImgGetVisibility(img:Longint):boolean; external 'ImgGetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown;  external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';

function InitializeSetup: Boolean;
begin
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('innocallback.dll');
  Result:=True;
end;

//************************************************ [Начало - Вставка изображений] ***************************************************//
procedure CreateWizardImage;
var
  i: integer;
begin
  WizardForm.ClientWidth:=ScaleX(798);
  WizardForm.ClientHeight:=ScaleY(543);
  WizardForm.Center;
  WizardForm.OuterNotebook.Hide;
  WizardForm.InnerNotebook.Hide;
  WizardForm.Bevel.Hide;

  ExtractTemporaryFile('Workspace.png');

ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Workspace.png'),ScaleX(42), ScaleY(160),ScaleX(714),ScaleY(309),True,True);
ImgApplyChanges(WizardForm.Handle);
end;

//************************************************ [Конец - Вставка изображений] ***************************************************//

procedure InitializeWizard;
begin
CreateWizardImage;
end;
[COLOR="Red"]
procedure DeinitializeSetup;
begin
  gdipShu tdown;
end;[/COLOR]
 

Mailchik

Старожил
Проверенный
Лёха, какие там у вас ошибки? скомпилил, всё отлично скомпилилось.
Код:
procedure DeinitializeSetup;
begin
  gdipShutdown;
end;
между u и t не должно быть пробела, хотя я думаю это причуды тэга
Код:
 

Лёха

Участник
Mailchik,
нет, я целиком взял из Сборка часто спрашиваемых скриптов, Версия: 1.4. там с пробелом ))
вообще бы не помешало пройтись по сборке и исправить ошибки коих там много.
и как мне текст на передний план вывести, а то у меня его нет.
 
Последнее редактирование:

Edison007

Ветеран
Модератор

Adil

Старожил
Всем добрый вечерь :hi:
Мне надо закинуть 2 файла в папку C:\ProgramData
Проблема в том, что на Windows 7 я использую константу {commonappdata},
А для Windows XP мне использовать ту же константу?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху