Jump to content
Korean Random
EvilAlex

Создание инсталляторов для модпаков на базе Inno Setup

Recommended Posts

'Есть пример.'

[Setup]
AppName=Моя программа
AppVersion=1.5
AppPublisher=YURSHAT
AppPublisherURL=http://krinkels.org/
DefaultDirName={pf}\Моя программа

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

[CustomMessages]
RU.CompName1=Компонент 1
RU.CompName2=Компонент 2
RU.ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.
RU.ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.
RU.CompDesc1=Описание первого компонента
RU.CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full

[Code]
type
  TComponentDesc = record
    Description: String;
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescPanel, CompDescImgPanel: TPanel;
  CompDescText: array[1..2] of TLabel;
  CompIndex, LastIndex: Integer;
  CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
    CompDescImg.Show;

    CompDescText[2].Caption := CompDescs[CompIndex].Description;
    CompDescText[2].Enabled := True;
  end else
  begin
    CompDescText[2].Caption := CustomMessage('ComponentsInfo');
    CompDescText[2].Enabled := False;
    CompDescImg.Hide;
  end;
  LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  CompDescImg.Hide;
  CompDescText[2].Caption := CustomMessage('ComponentsInfo');
  CompDescText[2].Enabled := False;
  LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].Description := ADescription;
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(205));
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));
    BevelInner := bvLowered;
  end;

  CompDescText[1] := TLabel.Create(WizardForm);
  with CompDescText[1] do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsImgInfo');
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    Hide;
  end;

  CompDescPanel := TPanel.Create(WizardForm);
  with CompDescPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(125), ScaleX(225), ScaleY(80));
    BevelInner := bvLowered;
  end;

  CompDescText[2] := TLabel.Create(WizardForm);
  with CompDescText[2] do
  begin
    Parent := CompDescPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsInfo');
  end;

  AddCompDescription(1, CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
  AddCompDescription(2, CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
end;

А можешь мне встроить это в скрипт? Просто я не знаю как это вставлять и что редактировать. Могу скинуть в лч его.

Edited by Prost

Share this post


Link to post

Short link
Share on other sites

есть пример лога распаковки файлов на странице установки?


А можешь мне встроить это в скрипт? Просто я не знаю как это вставлять и что редактировать. Могу скинуть в лч его.

взял и добавил в код,дальше сам дописывай.

Share this post


Link to post

Short link
Share on other sites

есть пример лога распаковки файлов на странице установки?

взял и добавил в код,дальше сам дописывай 

Я думаю будет лучше, если это будет делать человек понимающий в этой программе, я не особо знаю как прописывать код, единственное что я могу сделать это просто выбор модов и всё. Хотелось бы сделать с картинками но я не умею этого делать

Edited by Prost

Share this post


Link to post

Short link
Share on other sites

Я думаю будет лучше, если это будет делать человек понимающий в этой программе, я не особо знаю как прописывать код, единственное что я могу сделать это просто выбор модов и всё. Хотелось бы сделать с картинками но я не умею этого делать

ну го в лс

Edited by Ekspoint

Share this post


Link to post

Short link
Share on other sites

есть нормальный  пример лога распаковки файлов на странице установки?

почему лог установки создается после второго раза установки? а то когда ставишь первый раз он не пишется,почему так?

Share this post


Link to post

Short link
Share on other sites

Подскажите что за ошибка?

Как её исправить? 

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);

есть нормальный пример лога распаковки файлов на странице установки?

'Это имеется ввиду?'

post-16412-0-00508100-1416647512_thumb.png

post-16412-0-11474800-1416647526_thumb.png

Share this post


Link to post

Short link
Share on other sites

Стоковый код. Будет выглядеть иначе, чем у меня.

[Code]
var
 FilesMemo: TNewMemo;

procedure AddToMemo();
var
 AFile: String;
begin
 AFile := ExpandConstant(CurrentFilename);
 if ExtractFileExt(AFile) = '' then
  FilesMemo.Lines.Add('CreateFolder: ' + RemoveBackslash(AFile))
 else
  FilesMemo.Lines.Add('Extract: ' + AFile);
end;

procedure InitializeWizard();
begin
 FilesMemo := TNewMemo.Create(WizardForm);
 FilesMemo.SetBounds(ScaleX(0), ScaleY(80), ScaleX(418), ScaleY(120));
 FilesMemo.WordWrap := False;
 FilesMemo.Parent := WizardForm.InstallingPage;
 FilesMemo.ScrollBars := ssVertical;
 FilesMemo.ReadOnly := True;
 FilesMemo.Clear;
end;
Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

 

Стоковый код. Будет выглядеть иначе, чем у меня.

[Code]
var
 FilesMemo: TNewMemo;

procedure AddToMemo();
var
 AFile: String;
begin
 AFile := ExpandConstant(CurrentFilename);
 if ExtractFileExt(AFile) = '' then
  FilesMemo.Lines.Add('CreateFolder: ' + RemoveBackslash(AFile))
 else
  FilesMemo.Lines.Add('Extract: ' + AFile);
end;

procedure InitializeWizard();
begin
 FilesMemo := TNewMemo.Create(WizardForm);
 FilesMemo.SetBounds(ScaleX(0), ScaleY(80), ScaleX(418), ScaleY(120));
 FilesMemo.WordWrap := False;
 FilesMemo.Parent := WizardForm.InstallingPage;
 FilesMemo.ScrollBars := ssVertical;
 FilesMemo.ReadOnly := True;
 FilesMemo.Clear;
end;

это хрень не рабочая,я прошу рабочий!!

AtotIK скинь нормальный 

Edited by Ekspoint

Share this post


Link to post

Short link
Share on other sites
procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);

 

 

всё равно ошибка

Share this post


Link to post

Short link
Share on other sites

Внимание вопрос: какая у вас версия инно?

5.1.0

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);

Теперь всё заработало, но картинки не показывает. В чём проблема? Могу скинуть скрипт в лч

Edited by Prost

Share this post


Link to post

Short link
Share on other sites

Скинь код в лс, гляну


Кстати, напомните кто либо склеротику как в форме что открывается кнопкой скроллбар прописать:)

Share this post


Link to post

Short link
Share on other sites

почему у меня звук лезет на нижний компонент тоже который не прописан?

[Setup]
RawDataResource=SndA:звуки модов\тихая.WAV |SndB:звуки модов\средняя.WAV |SndC:звуки модов\громкая.WAV |SndD:звуки модов\тихая 10 сек.WAV |SndE:звуки модов\громкая 10  сек.WAV
[Code]
#define A = (Defined UNICODE) ? "W" : "A"
Type
HINST = THandle;
HMODULE = HINST;
Pointer = Longint;
HRSRC = THandle;
HGLOBAL = THandle;
Const
SND_ASYNC           = $0001;
SND_NODEFAULT       = $0002;
SND_MEMORY          = $0004;
RT_RCDATA           = 10;
Function sndPlaySound(lpszSoundName: Pointer; uFlags: UINT): BOOL; external 'sndPlaySound{#A}@Winmm.dll stdcall';
Function LoadResource(hModule: HINST; hResInfo: HRSRC): HGLOBAL; external '[email protected] stdcall';
Function FindResource(hModule: HMODULE; lpName: String; lpType: Longint): HRSRC; external 'FindResource{#A}@kernel32.dll stdcall';
Function LockResource(hResData: HGLOBAL): Pointer; external '[email protected] stdcall';
Var
pSoundMemory_A, pSoundMemory_B, pSoundMemory_C, pSoundMemory_D, pSoundMemory_E: Pointer;
IndexLast: Integer;
   
Function GetResourceSoundAddr(const ResourceName: String): Pointer;
var
hResourceSound: HRSRC;
begin
hResourceSound := FindResource(HInstance, ResourceName, RT_RCDATA);
Result := LockResource(LoadResource(HInstance, hResourceSound));
end;
Procedure ComponentsOnClickCheck(Sender: TObject);
begin
if IsComponentSelected('KMP\22\2\1') then
begin
  sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
//"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""//
begin
if IsComponentSelected('KMP\22\2\2') then
begin
  sndPlaySound(pSoundMemory_B, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
end;
//"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""//
begin
if IsComponentSelected('KMP\22\2\3') then
begin
  sndPlaySound(pSoundMemory_C, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
end;
//"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""//
begin
if IsComponentSelected('KMP\22\2\4') then
begin
  sndPlaySound(pSoundMemory_D, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
end;
//"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""//
begin
if IsComponentSelected('KMP\22\2\5') then
begin
  sndPlaySound(pSoundMemory_E, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
end;
//"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""//
end;
procedure InitializeWizard8();
begin
IndexLast := -1;
pSoundMemory_A := GetResourceSoundAddr('_IS_SNDA');
pSoundMemory_B := GetResourceSoundAddr('_IS_SNDB');
pSoundMemory_C := GetResourceSoundAddr('_IS_SNDC');
pSoundMemory_D := GetResourceSoundAddr('_IS_SNDD');
pSoundMemory_E := GetResourceSoundAddr('_IS_SNDE');

   
WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end;

Share this post


Link to post

Short link
Share on other sites

Скинь код в лс, гляну

Кстати, напомните кто либо склеротику как в форме что открывается кнопкой скроллбар прописать:)

ты мне?

Edited by Prost

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...