Jump to content
Korean Random
EvilAlex

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

Recommended Posts

Помогите, не могу понять какого хрена на win xp не работает

Edited by Dark_Knight_MiX

Share this post


Link to post

Short link
Share on other sites

Помогите, не могу понять какого хрена на win xp не работает

[Code]function WindowsXP: boolean;begin  Result := (GetWindowsVersion shr 24) = 5;end;procedure CopyAdioFile(FromPlace, ToPlace: String);var  ResultCode: Integer;begin  if WindowsXP then    begin      Exec(ExpandConstant('xcopy.exe'), '/E /C /H /R /Y /F /I ' + FromPlace +  '\*' + ' ' + ToPlace, ExpandConstant('{app}'), SW_SHOW, ewWaitUntilTerminated, ResultCode);    end;  if not WindowsXP then    begin      Exec(ExpandConstant('{cmd}'), '"/c for %a in (*) do mklink' + ' ' + '"' + ToPlace + '\%~nxa"' + ' ' + '"%~fa"', FromPlace, SW_SHOW, ewWaitUntilTerminated, ResultCode);    end;end;procedure CopyAdioProcedure;begin  if not DirExists(ExpandConstant('{app}\res_mods\{#Patch}\audio')) then     begin      CreateDir(ExpandConstant('{app}\res_mods'));      CreateDir(ExpandConstant('{app}\res_mods\{#Patch}'));      CreateDir(ExpandConstant('{app}\res_mods\{#Patch}\audio'));    end;  WizardForm.StatusLabel.Caption := 'Копирование audio...';  CopyAdioFile(ExpandConstant('{app}\res\audio'), ExpandConstant('{app}\res_mods\{#Patch}\audio'));end;procedure CurStepChanged(CurStep: TSetupStep);begin  if WindowsXP then    begin      If CurStep=ssPreInstall then        begin          CopyAdioProcedure;        end;    end;  if not WindowsXP then    begin      If CurStep=ssPostInstall then        begin          CopyAdioProcedure;        end;    end;end;
Не используй PreInstall.

Share this post


Link to post

Short link
Share on other sites

Не используй PreInstall.

а как мне еще поставить перед установкой копирование

Share this post


Link to post

Short link
Share on other sites

а как мне еще поставить перед установкой копирование

ssInstall вполне подойдет. Неужели за все время, как ты работаешь с инно, не смог запомнить что и когда отрабатывает? Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

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

перепутал :dots:

Edited by Dark_Knight_MiX

Share this post


Link to post

Short link
Share on other sites

как узнать какая версия винды стоит? что бы писать типо

if WinXP then
....

ты подумал что под новый год тебе просто так дадут готовый скрипт? :heh:

Читай внимательней:"Скрипт с примером".Мне нужен лишь скрипт ,чтобы картинка напротив была , как у маракаси , например.

Share this post


Link to post

Short link
Share on other sites

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

картинка и описание

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

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

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

[Components]
Name: comp1; Description: "{cm:CompName1}"; 
Name: comp2; Description: "{cm:CompName2}"; 
Name: comp3; Description: "{cm:CompName1}";
Name: comp4; Description: "{cm:CompName2}";
Name: comp5; Description: "{cm:CompName1}";
Name: comp6; Description: "{cm:CompName2}";

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

var
CompDescs: array of TComponentDesc;
CompDescPanel, CompDescImgPanel: TPanel;
CompDescText: 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.Caption := CompDescs[CompIndex].Description;
CompDescText.Enabled := True;
end else
begin
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
CompDescText.Caption := CustomMessage('ComponentsInfo');
CompDescText.Enabled := False;
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
CompDescText.Caption := CustomMessage('ComponentsInfo');
CompDescText.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;

function GetComponentIndex(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.ComponentsList.ItemCount-1 do begin
    if (WizardForm.ComponentsList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
end;

procedure InitializeWizard;
begin
ExtractTemporaryFile('MainPic.bmp');
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;

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;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
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 := TLabel.Create(WizardForm);
with CompDescText 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(GetComponentIndex(CustomMessage('CompName1')), CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
AddCompDescription(GetComponentIndex(CustomMessage('CompName2')), CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
end;

 

картинка

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[CustomMessages]
CompName1=Компонент 1
CompName2=Компонент 2

ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.

CompDesc1=Описание первого компонента
CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage.bmp"; DestName: "MainPic.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
Name: comp3; Description: "{cm:CompName1}"; Types: full
Name: comp4; Description: "{cm:CompName2}"; Types: full
Name: comp5; Description: "{cm:CompName1}"; Types: full
Name: comp6; Description: "{cm:CompName2}"; Types: full
Name: comp7; Description: "{cm:CompName1}"; Types: full
Name: comp8; Description: "{cm:CompName2}"; Types: full

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

var
  CompDescs: array of TComponentDesc;
  CompDescImgPanel: TPanel;
  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;
end else
begin
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  LastIndex := -1;
 CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
end;

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

function GetComponentIndex(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.ComponentsList.ItemCount-1 do begin
    if (WizardForm.ComponentsList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('MainPic.bmp');
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(200));
  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;

  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;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
  end;

  AddCompDescription(GetComponentIndex(CustomMessage('CompName1')), 'CompDescImg1.bmp');  //по названию компонента
  AddCompDescription(GetComponentIndex(CustomMessage('CompName2')), 'CompDescImg2.bmp');  //по названию компонента
end;

 

описание

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[CustomMessages]
CompName1=Компонент 1
CompName2=Компонент 2
CompName3=Компонент 3
CompName4=Компонент 4
CompName5=Компонент 5
CompName6=Компонент 6

ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.

CompDesc1=Описание первого компонента
CompDesc2=Описание второго компонента
CompDesc3=Описание третьего компонента
CompDesc4=Описание четвертого компонента

[Components]
Name: comp1; Description: "{cm:CompName1}"; 
Name: comp2; Description: "{cm:CompName2}"; 
Name: comp3; Description: "{cm:CompName3}";
Name: comp4; Description: "{cm:CompName4}";
Name: comp5; Description: "{cm:CompName5}";
Name: comp6; Description: "{cm:CompName6}";

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

var
CompDescs: array of TComponentDesc;
CompDescPanel: TPanel;
CompDescText: TLabel;
CompIndex, LastIndex: Integer;

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
CompDescText.Caption := CompDescs[CompIndex].Description;
CompDescText.Enabled := True;
end else
begin
CompDescText.Caption := CustomMessage('ComponentsInfo');
CompDescText.Enabled := False;
end;
LastIndex := Index;
end;

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

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

function GetComponentIndex(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.ComponentsList.ItemCount-1 do begin
    if (WizardForm.ComponentsList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
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;

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

CompDescText := TLabel.Create(WizardForm);
with CompDescText 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(GetComponentIndex(CustomMessage('CompName1')), CustomMessage('CompDesc1'));
AddCompDescription(GetComponentIndex(CustomMessage('CompName2')), CustomMessage('CompDesc2'));
AddCompDescription(GetComponentIndex(CustomMessage('CompName3')), CustomMessage('CompDesc3'));
AddCompDescription(GetComponentIndex(CustomMessage('CompName4')), CustomMessage('CompDesc4'));
end;

 

как то так

Edited by Dark_Knight_MiX
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

картинка и описание

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

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

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

[Components]
Name: comp1; Description: "{cm:CompName1}"; 
Name: comp2; Description: "{cm:CompName2}"; 
Name: comp3; Description: "{cm:CompName1}";
Name: comp4; Description: "{cm:CompName2}";
Name: comp5; Description: "{cm:CompName1}";
Name: comp6; Description: "{cm:CompName2}";

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

var
CompDescs: array of TComponentDesc;
CompDescPanel, CompDescImgPanel: TPanel;
CompDescText: 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.Caption := CompDescs[CompIndex].Description;
CompDescText.Enabled := True;
end else
begin
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
CompDescText.Caption := CustomMessage('ComponentsInfo');
CompDescText.Enabled := False;
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
CompDescText.Caption := CustomMessage('ComponentsInfo');
CompDescText.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;

function GetComponentIndex(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.ComponentsList.ItemCount-1 do begin
    if (WizardForm.ComponentsList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
end;

procedure InitializeWizard;
begin
ExtractTemporaryFile('MainPic.bmp');
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;

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;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
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 := TLabel.Create(WizardForm);
with CompDescText 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(GetComponentIndex(CustomMessage('CompName1')), CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
AddCompDescription(GetComponentIndex(CustomMessage('CompName2')), CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
end;

 

картинка

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[CustomMessages]
CompName1=Компонент 1
CompName2=Компонент 2

ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.

CompDesc1=Описание первого компонента
CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage.bmp"; DestName: "MainPic.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
Name: comp3; Description: "{cm:CompName1}"; Types: full
Name: comp4; Description: "{cm:CompName2}"; Types: full
Name: comp5; Description: "{cm:CompName1}"; Types: full
Name: comp6; Description: "{cm:CompName2}"; Types: full
Name: comp7; Description: "{cm:CompName1}"; Types: full
Name: comp8; Description: "{cm:CompName2}"; Types: full

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

var
  CompDescs: array of TComponentDesc;
  CompDescImgPanel: TPanel;
  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;
end else
begin
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  LastIndex := -1;
 CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
end;

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

function GetComponentIndex(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.ComponentsList.ItemCount-1 do begin
    if (WizardForm.ComponentsList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('MainPic.bmp');
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(200));
  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;

  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;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
  end;

  AddCompDescription(GetComponentIndex(CustomMessage('CompName1')), 'CompDescImg1.bmp');  //по названию компонента
  AddCompDescription(GetComponentIndex(CustomMessage('CompName2')), 'CompDescImg2.bmp');  //по названию компонента
end;

 

описание

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[CustomMessages]
CompName1=Компонент 1
CompName2=Компонент 2
CompName3=Компонент 3
CompName4=Компонент 4
CompName5=Компонент 5
CompName6=Компонент 6

ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.

CompDesc1=Описание первого компонента
CompDesc2=Описание второго компонента
CompDesc3=Описание третьего компонента
CompDesc4=Описание четвертого компонента

[Components]
Name: comp1; Description: "{cm:CompName1}"; 
Name: comp2; Description: "{cm:CompName2}"; 
Name: comp3; Description: "{cm:CompName3}";
Name: comp4; Description: "{cm:CompName4}";
Name: comp5; Description: "{cm:CompName5}";
Name: comp6; Description: "{cm:CompName6}";

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

var
CompDescs: array of TComponentDesc;
CompDescPanel: TPanel;
CompDescText: TLabel;
CompIndex, LastIndex: Integer;

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
CompDescText.Caption := CompDescs[CompIndex].Description;
CompDescText.Enabled := True;
end else
begin
CompDescText.Caption := CustomMessage('ComponentsInfo');
CompDescText.Enabled := False;
end;
LastIndex := Index;
end;

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

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

function GetComponentIndex(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.ComponentsList.ItemCount-1 do begin
    if (WizardForm.ComponentsList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
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;

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

CompDescText := TLabel.Create(WizardForm);
with CompDescText 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(GetComponentIndex(CustomMessage('CompName1')), CustomMessage('CompDesc1'));
AddCompDescription(GetComponentIndex(CustomMessage('CompName2')), CustomMessage('CompDesc2'));
AddCompDescription(GetComponentIndex(CustomMessage('CompName3')), CustomMessage('CompDesc3'));
AddCompDescription(GetComponentIndex(CustomMessage('CompName4')), CustomMessage('CompDesc4'));
end;

 

как то так

Спасибо большое!

Share this post


Link to post

Short link
Share on other sites
А как изменить дефолтную картинку на свою
post-35143-0-72345100-1452419745.png

Уже разобрался))


Пойдет?

post-35143-0-39737400-1452442981_thumb.png

Edited by CiberGame

Share this post


Link to post

Short link
Share on other sites

 

 

Думаешь стоит убрать?
Кому она там нужна?

Вот представь, что ты пользователь, скачавший какую-то программу. И при её открытии начнёт играть музыка, что ты сделаешь? - Правильно, выключишь. Как и 95% остальных пользователей.

Share this post


Link to post

Short link
Share on other sites

Кому она там нужна?

Вот представь, что ты пользователь, скачавший какую-то программу. И при её открытии начнёт играть музыка, что ты сделаешь? - Правильно, выключишь. Как и 95% остальных пользователей.

 

Согласен 

Share this post


Link to post

Short link
Share on other sites

Privet vsem pamaghite pajalusta dabaviti iseio nescalicao failov ea zdelal no ne paluceaitsa sspasiba za ranie 

 

[Setup]
AppName=Sound
AppVerName=1.0
DefaultDirName={pf}\Sound
OutputDir=Output

RawDataResource=SndA:bugreporter_succeeded.wav |SndC:buttonclickreleaseo.WAV |SndB:Button.wav
              


[Components]
Name: "main"; Description: "Main Files"; 
Name: "main\a"; Description: "A Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\b"; Description: "B Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\c"; Description: "C Files"; Flags: exclusive disablenouninstallwarning;
//Name: "main\d"; Description: "B Files"; Flags: exclusive disablenouninstallwarning;
//Name: "main\e"; Description: "A Files"; Flags: exclusive disablenouninstallwarning;
//Name: "main\f"; Description: "B Files"; Flags: exclusive disablenouninstallwarning;



[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: 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('main\a') then
 begin
  sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
 if IsComponentSelected('main\b') then
 begin
  sndPlaySound(pSoundMemory_B, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
 if IsComponentSelected('main\c') then
 begin
  sndPlaySound(pSoundMemory_C, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
end;

procedure InitializeWizard();
begin
 IndexLast := -1;

 pSoundMemory_A := GetResourceSoundAddr('_IS_SNDA');
 pSoundMemory_B := GetResourceSoundAddr('_IS_SNDB');
 pSoundMemory_C := GetResourceSoundAddr('_IS_SNDB');
    
 WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end;

Edited by asterix93

Share this post


Link to post

Short link
Share on other sites

Пробуй

[Setup]
AppName=Sound
AppVerName=1.0
DefaultDirName={pf}\Sound
OutputDir=Output

RawDataResource=SndA:A.wav |SndB:B.WAV |SndC:C.wav |SndD:D.wav |SndE:E.wav |SndF:F.WAV |

[Components]
Name: "main"; Description: "Main Files";
Name: "main\A"; Description: "A Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\B"; Description: "B Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\C"; Description: "C Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\D"; Description: "D Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\E"; Description: "E Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\F"; Description: "F Files"; Flags: exclusive disablenouninstallwarning;

[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, pSoundMemory_F: 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('main\A') then
 begin
  sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
 if IsComponentSelected('main\B') then
 begin
  sndPlaySound(pSoundMemory_B, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\C') then
 begin
  sndPlaySound(pSoundMemory_C, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\D') then
 begin
  sndPlaySound(pSoundMemory_D, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\E') then
 begin
  sndPlaySound(pSoundMemory_E, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\F') then
 begin
  sndPlaySound(pSoundMemory_F, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
end;

procedure InitializeWizard();
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');
 pSoundMemory_F := GetResourceSoundAddr('_IS_SNDF');
 WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end; 

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Пробуй

[Setup]
AppName=Sound
AppVerName=1.0
DefaultDirName={pf}\Sound
OutputDir=Output

RawDataResource=SndA:A.wav |SndB:B.WAV |SndC:C.wav |SndD:D.wav |SndE:E.wav |SndF:F.WAV |

[Components]
Name: "main"; Description: "Main Files";
Name: "main\A"; Description: "A Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\B"; Description: "B Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\C"; Description: "C Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\D"; Description: "D Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\E"; Description: "E Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\F"; Description: "F Files"; Flags: exclusive disablenouninstallwarning;

[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, pSoundMemory_F: 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('main\A') then
 begin
  sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
 if IsComponentSelected('main\B') then
 begin
  sndPlaySound(pSoundMemory_B, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\C') then
 begin
  sndPlaySound(pSoundMemory_C, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\D') then
 begin
  sndPlaySound(pSoundMemory_D, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\E') then
 begin
  sndPlaySound(pSoundMemory_E, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\F') then
 begin
  sndPlaySound(pSoundMemory_F, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
end;

procedure InitializeWizard();
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');
 pSoundMemory_F := GetResourceSoundAddr('_IS_SNDF');
 WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end; 

Agromnaea spasiba palucilas nashol u menea asibca no esti drugaea prableama cagda delaiu vot tac slisna oba

 

[Setup]
AppName=Sound
AppVerName=1.0
DefaultDirName={pf}\Sound
OutputDir=Output
RawDataResource=SndA:bugreporter_succeeded.wav |SndB:buttonclickreleaseo.WAV |SndC:Button.wav |SndD:leave.wav |SndE:ButtonOnMouse.wav |SndF:WindowsLogoffSound.wav
             

[Components]
Name: "main"; Description: "Main Files";
Name: "main\a"; Description: "A Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\b"; Description: "B Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\c"; Description: "C Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\d"; Description: "D Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\e"; Description: "E Files"; Flags: exclusive disablenouninstallwarning;
Name: "f"; Description: "F Files";

[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,pSoundMemory_F: 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('main\a') then
begin
  sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
if IsComponentSelected('main\b') then
begin
  sndPlaySound(pSoundMemory_B, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
if IsComponentSelected('main\c') then
begin
  sndPlaySound(pSoundMemory_C, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
if IsComponentSelected('main\d') then
begin
  sndPlaySound(pSoundMemory_D, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
if IsComponentSelected('main\e') then
begin
  sndPlaySound(pSoundMemory_E, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
if IsComponentSelected('f') then
begin
  sndPlaySound(pSoundMemory_F, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
end;
procedure InitializeWizard();
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');
pSoundMemory_F := GetResourceSoundAddr('_IS_SNDF');
   
WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end;

Sound test.zip

Edited by asterix93

Share this post


Link to post

Short link
Share on other sites

Пробуй

[Setup]
AppName=Sound
AppVerName=1.0
DefaultDirName={pf}\Sound
OutputDir=Output

RawDataResource=SndA:A.wav |SndB:B.WAV |SndC:C.wav |SndD:D.wav |SndE:E.wav |SndF:F.WAV |

[Components]
Name: "main"; Description: "Main Files";
Name: "main\A"; Description: "A Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\B"; Description: "B Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\C"; Description: "C Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\D"; Description: "D Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\E"; Description: "E Files"; Flags: exclusive disablenouninstallwarning;
Name: "main\F"; Description: "F Files"; Flags: exclusive disablenouninstallwarning;

[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, pSoundMemory_F: 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('main\A') then
 begin
  sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
 if IsComponentSelected('main\B') then
 begin
  sndPlaySound(pSoundMemory_B, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\C') then
 begin
  sndPlaySound(pSoundMemory_C, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\D') then
 begin
  sndPlaySound(pSoundMemory_D, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\E') then
 begin
  sndPlaySound(pSoundMemory_E, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
  if IsComponentSelected('main\F') then
 begin
  sndPlaySound(pSoundMemory_F, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
 end;
end;

procedure InitializeWizard();
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');
 pSoundMemory_F := GetResourceSoundAddr('_IS_SNDF');
 WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end; 

есть же лучше http://krinkels.org/threads/ozuchivanie-komponentov.2429/page-2#post-23989

  • Upvote 1

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...