Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)

Модерирует : gyra, Maz

Widok (23-04-2007 18:02): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

NightW0lf



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Код:
 
; Интерфейс установки максимально приближенный к InstallShield(я так думаю)реализованный стандартными(почти)средствами Inno Setup.Для создания слйд - шоу используется библиотека IsXbb.
; Используется Splash - заставка.
; При запуске инсталлятора отсутствует "мозолящий" глаза синий фон и имя программы.
; Скачать IsXbb.dll можно с http: //www.istool.org или http://data.cod.ru/381517258. Размер - ~33 Кб.
 
[Setup]
LicenseFile=License.rtf
InfoBeforeFile=Readme_rus.rtf
 
; Язык всех диалогов в инсталляторе:
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
 
[Files]
; RTF файлы
Source: "C:\License.rtf"; DestDir: {tmp}; Flags: dontcopy noencryption
Source: "C:\Readme_rus.rtf"; DestDir: {tmp}; Flags: dontcopy noencryption
 
; Библиотека для возможности проигрывания.mp3 музыки
Source: "C:\bass.dll"; DestDir: " {tmp}  "; Flags: dontcopy noencryption nocompression
 
; .mp3 музыка
Source: "C:\Human1.mp3"; DestDir: " {tmp}  "; Flags: dontcopy noencryption nocompression
 
 
; Рисунок используемый для отображения на странице подготовки(увидете - поймёте)
Source: "C:\Program Files\Inno Setup 5\WizModernSmallImage.bmp"; DestDir: {tmp}; Flags: dontcopy;
; Так же используется на странице подготовки как Splash - заставка
Source: "C:\Splash.bmp"; DestDir: {tmp}; Flags: dontcopy;
; В качестве фона используется изоброжение в формате.bmp.Уменьшить размер файла(почти без видимых потерь)монжо в Adobe Photoshop(Image = > Mode = > Idexed Color = > Palette: Local(_ANY_))
Source: "C:\Image.bmp"; DestDir: {tmp}; Flags: dontcopy;
; Библиотека для создания слайд - сшоу
Source: "C:\IsXbb.dll"; DestDir: {tmp}; Flags: dontcopy;
; Файлы для слайд - сшоу(их может быть и больше)
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:\5.jpg"; DestDir: {tmp}; Flags: dontcopy;
; Файлы проекта
; Source: "Work\ * . * "; DestDir: " {app}  "; Flags: overwritereadonly ignoreversion recursesubdirs createallsubdirs;
 
[Code]
const
{"1,2,3,4" - в разных углах, "5" - по центру, "6" - растянуть изображения}
  BACKGROUND = 6;
  TIMER = 16;
 
  BASS_ACTIVE_STOPPED = 0;
  BASS_ACTIVE_PLAYING = 1;
  BASS_ACTIVE_STALLED = 2;
  BASS_ACTIVE_PAUSED = 3;
  BASS_SAMPLE_LOOP = 4;
 
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';
 
 
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
  external 'BASS_Init@files:BASS.dll stdcall delayload';
 
function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
  external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
 
function BASS_Start(): Boolean;
  external 'BASS_Start@files:BASS.dll stdcall delayload';
 
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
  external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
 
function BASS_ChannelIsActive(handle: DWORD): Integer;
  external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
 
function BASS_ChannelPause(handle: DWORD): Boolean;
  external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
 
function BASS_Stop(): Boolean;
  external 'BASS_Stop@files:BASS.dll stdcall delayload';
 
function BASS_Pause(): Boolean;
  external 'BASS_Pause@files:BASS.dll stdcall delayload';
 
function BASS_Free(): Boolean;
  external 'BASS_Free@files:BASS.dll stdcall delayload';
 
var
  mp3Handle: HWND;
  mp3Name: string;
  Splash: TSetupForm;
 
 
function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('Human1.mp3');
  mp3Name := ExpandConstant('{tmp}\Human1.mp3');
  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
  BASS_Start();
  BASS_ChannelPlay(mp3Handle, False);
  Result := True;
end;
 
 
procedure PlayButtonOnClick(Sender: TObject);
begin
  case BASS_ChannelIsActive(mp3Handle) of
    BASS_ACTIVE_PAUSED:
      begin
        BASS_ChannelPlay(mp3Handle, False);
      end;
    BASS_ACTIVE_STOPPED:
      begin
        BASS_Init(-1, 44100, 0, 0, 0);
        mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
        BASS_Start();
        BASS_ChannelPlay(mp3Handle, False);
      end;
  end;
end;
 
 
procedure PauseButtonOnClick(Sender: TObject);
begin
  BASS_ChannelPause(mp3Handle);
end;
 
 
procedure StopButtonOnClick(Sender: TObject);
begin
  BASS_Stop();
  BASS_Free();
end;
 
 
procedure InitializeWizard();
var
  BackgroundBitmapImage: TBitmapImage;
  s: string;
  Form: TSetupForm;
  Width, Height: Integer;
  ProgressBar: TNewProgressBar;
  CancelButton: TButton;
  StaticText: TNewStaticText;
  BitmapImage: TBitmapImage;
  BitmapImage1: TBitmapImage;
  BitmapFileName: string;
  License: string;
  Readmerus: string;
  i: Integer;
  Name1: string;
  PlayButton, PauseButton, StopButton: TButton;
  Text: TNewStaticText;
  Panel1: TPanel;
begin
  WizardForm.Position := poScreenCenter;
  MainForm.BORDERSTYLE := bsNone;
  WizardForm.CancelButton.BringToFront;
 
{****************************************** [Для корректного отображения "License.rtf"] *********************************}
  ExtractTemporaryFile('License.rtf');
  LoadStringFromFile(ExpandConstant('{tmp}') + '\License.rtf', License)
    WizardForm.LicenseMemo.RTFText := License;
{****************************************** [Для корректного отображения "License.rtf"] *********************************}
 
 
{****************************************** [Для корректного отображения "Readme_rus.rtf"] ******************************}
  ExtractTemporaryFile('Readme_rus.rtf');
  LoadStringFromFile(ExpandConstant('{tmp}') + '\Readme_rus.rtf', Readmerus)
    WizardForm.InfoBeforeMemo.RTFText := Readmerus;
{****************************************** [Для корректного отображения "Readme_rus.rtf"] ******************************}
 
  Splash := CreateCustomForm;
  Splash.BorderStyle := bsNone;
  BitmapImage1 := TBitmapImage.Create(Splash);
  with BitmapImage1 do
  begin
    AutoSize := True;
    Align := alClient;
    Left := 0;
    Top := 0;
    Stretch := True;
    Parent := Splash;
  end;
  ExtractTemporaryFile('Splash.bmp');
  BitmapImage1.Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\Splash.bmp');
  Splash.Width := BitmapImage1.Width;
  Splash.Height := BitmapImage1.Height;
  Splash.Center;
  Splash.Show;
  BitmapImage1.Refresh;
  Form := CreateCustomForm();
  try
    with Form do
    begin
      ClientWidth := ScaleX(380);
      ClientHeight := ScaleY(120);
      BorderStyle := bsDialog;
      Left := GetSystemMetrics(16) - ClientWidth - ScaleX(8);
      Top := GetSystemMetrics(17) - ClientHeight - ScaleY(8);
    end;
    BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
    ExtractTemporaryFile(ExtractFileName(BitmapFileName));
    BitmapImage := TBitmapImage.Create(Form);
    BitmapImage.Left := ScaleX(8);
    BitmapImage.Top := ScaleY(8);
    BitmapImage.AutoSize := True;
    BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
    BitmapImage.Parent := Form;
    StaticText := TNewStaticText.Create(Form);
    StaticText.Top := BitmapImage.Top;
    StaticText.Left := BitmapImage.Left + BitmapImage.Width + ScaleX(8)
{Надпись которая будет отображатся на странице поготовки}
    StaticText.Caption := ''#10#13'"______" now preparing to install...';
    StaticText.AutoSize := True;
    StaticText.Parent := Form;
    CancelButton := TButton.Create(Form);
    CancelButton.Parent := Form;
    CancelButton.Width := ScaleX(75);
    CancelButton.Height := ScaleY(23);
    CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10);
    CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
    CancelButton.Caption := 'Cancel';
    CancelButton.ModalResult := mrCancel;
    CancelButton.Cancel := True;
    Form.Caption := 'Prepering...';
    ProgressBar := TNewProgressBar.Create(Form);
    with ProgressBar do
    begin
      Height := CancelButton.Height - ScaleY(8);
      Width := Form.Width - ScaleX(128);
      Top := CancelButton.Top;
      Left := BitmapImage.Left;
      Parent := Form;
      Min := 0;
      Max := 30;
      Position := 0;
    end;
    Form.ActiveControl := CancelButton;
    Form.Show();
    for i := 0 to 30 do
    begin
      ProgressBar.Position := i;
      Form.Repaint;
      Sleep(400);
      i := i + 2;
    end;
  finally
    Form.Free();
    Splash.Close;
    Width := GetSystemMetrics(0);
    Height := GetSystemMetrics(1);
    MainForm.Width := width;
    MainForm.Height := height;
    Width := MainForm.ClientWidth;
    Height := MainForm.ClientHeight;
    ExtractTemporaryFile('Image.bmp');
    s := ExpandConstant('{tmp}') + '\Image.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;
{Не забудте прописать здесь и ниже правильные имена и количество файлов для слайд-шоу!}
    ExtractTemporaryFile('1.jpg');
    ExtractTemporaryFile('2.jpg');
    ExtractTemporaryFile('3.jpg');
    ExtractTemporaryFile('4.jpg');
    ExtractTemporaryFile('5.jpg');
    MainForm.Visible := True;
    begin
      Panel1 := TPanel.Create(WizardForm);
      with Panel1 do
      begin
        Panel1.Parent := WizardForm;
        Panel1.Left := ScaleX(1);
        Panel1.Top := ScaleY(315);
        Panel1.Width := ScaleX(165);
        Panel1.Height := ScaleY(46);
        Panel1.TabOrder := 0;
        Panel1.Color := clWhite;
        Panel1.BevelInner := bvLowered;
        Panel1.BevelOuter := bvRaised;
        Panel1.BorderStyle := bsSingle;
 
        PlayButton := TButton.Create(WizardForm);
        PlayButton.Left := 5;
        PlayButton.Top := 335;
        PlayButton.Width := 50;
        PlayButton.Height := 20;
        PlayButton.Caption := 'play';
        PlayButton.OnClick := @PlayButtonOnClick;
        PlayButton.Parent := WizardForm;
        PlayButton.Cursor := crHand;
 
        PauseButton := TButton.Create(WizardForm);
        PauseButton.Left := 58;
        PauseButton.Top := 335;
        PauseButton.Width := 50;
        PauseButton.Height := 20;
        PauseButton.Caption := 'pause';
        PauseButton.OnClick := @PauseButtonOnClick;
        PauseButton.Parent := WizardForm;
        PauseButton.Cursor := crHand;
 
        StopButton := TButton.Create(WizardForm);
        StopButton.Left := 111;
        StopButton.Top := 335;
        StopButton.Width := 50;
        StopButton.Height := 20;
        StopButton.Caption := 'stop';
        StopButton.OnClick := @StopButtonOnClick;
        StopButton.Parent := WizardForm;
        StopButton.Cursor := crHand;
 
        Text := TNewStaticText.Create(WizardForm);
        Text.Caption := 'music';
        Text.Parent := WizardForm;
        Text.Font.Style := Text.Font.Style + [fsUnderline];
        Text.Font.Color := clNavy;
        Text.Top := 319;
        Text.Left := 71;
        Text.Color := clWhite;
      end;
    end;
  end;
end;
 
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall
    then
  begin
    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_AddImage(ExpandConstant('{tmp}') + '\4.jpg', BACKGROUND or TIMER);
    isxbb_AddImage(ExpandConstant('{tmp}') + '\5.jpg', BACKGROUND or TIMER);
    isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
{Указывается время отображения на экране каждого изображения}
    isxbb_StartTimer(8, BACKGROUND)
  end
  else
    if CurStep = ssPostInstall
      then
      isxbb_KillTimer(BACKGROUND);
end;
 
 
procedure CurPageChanged(CurPageID: Integer);
var
  Width, Height: Integer;
begin
  if CurPageID = wpInstalling
    then
  begin
{Здесь размер окна установки уменьшается, с него убирается всё лишнее и оно смещается в нижний правый угол экрана (не зависит от разрешения)}
    WizardForm.CancelButton.BringToFront;
    WizardForm.MainPanel.Visible := False;
    WizardForm.Bevel1.Visible := False;
{Размер получемого окна установки}
    Width := ScaleX(395);
    Height := ScaleY(150);
    WizardForm.Left := GetSystemMetrics(16) - Width - ScaleX(5);
    WizardForm.Top := GetSystemMetrics(17) - Height - ScaleY(-50);
    WizardForm.Width := ScaleX(395);
    WizardForm.Height := ScaleY(150);
    WizardForm.InnerNotebook.Left := ScaleX(10);
    WizardForm.InnerNotebook.Top := ScaleY(10);
    WizardForm.InnerNotebook.Width := ScaleX(370);
    WizardForm.StatusLabel.Left := ScaleX(0);
    WizardForm.StatusLabel.Top := ScaleY(0);
    WizardForm.StatusLabel.Width := WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left := ScaleX(0);
    WizardForm.FileNameLabel.Top := ScaleY(20);
    WizardForm.FileNameLabel.Width := WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top := ScaleY(40);
    WizardForm.ProgressGauge.Width := WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left := ScaleX(154);
    WizardForm.CancelButton.Top := ScaleY(80);
  end
    if CurPageID = wpFinished
      then
    begin
{Окно установки принимает стандартный вид}
      WizardForm.Width := 502;
      WizardForm.Height := 392;
      WizardForm.Position := poScreenCenter;
    end
end;
 
 
procedure DeinitializeSetup();
begin
  BASS_Stop();
  BASS_Free();
end;
 


Всего записей: 479 | Зарегистр. 08-11-2006 | Отправлено: 21:56 02-02-2007 | Исправлено: NightW0lf, 21:58 02-02-2007
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)
Widok (23-04-2007 18:02): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru