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

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

Автор: Vitalliano
Дата сообщения: 08.12.2007 14:36
serg_aka_lain

Спасибо скрипт нашол, только где там устанавливать требуемые параметры??

Подскажы пожалуйста.

Вот скрипт, который использовал я:

function GetSystemMetrics(nIndex: Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer; external 'sndPlaySoundA@winmm.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: Integer): PChar; external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveFreeSpace(hdd: integer): Integer; external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer; external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetSoundCards(): Integer; external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';
function GetSoundCardName(): PChar; external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';
function GetSystemPage(): Integer; external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';
function GetSystemPhys(): Integer; external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';
function GetVideoCardName(): PChar; external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
function GetVidMemLocal(): Integer; external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

procedure InitializeWizard();
var
Page: TWizardPage;
Text: TNewStaticText;
Memo: TMemo;
begin
Page:=CreateCustomPage(wpWelcome, 'Аппаратное обеспечение', 'Программа установки обнаружила следующие необходимые компоненты');
Text:=TNewStaticText.Create(Page);
with Text do begin
Left:=0
Top:=0
Width:=417
Height:=14
Caption:='Все компоненты удовлетворяют требованиям игры'
Parent:=Page.Surface
end
Text:=TNewStaticText.Create(Page);
with Text do begin
Left:=0
Top:=210
Width:=417
Height:=14
Caption:='Когда Вы будете готовы продолжить установку, нажмите Далее.'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=30
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Процессор'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=55
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Видеокарта'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=80
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Звуковая карта'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=105
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Память'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=130
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='Файл подкачки'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=30
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:=ExpandConstant('{reg:HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0,ProcessorNameString|}');
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=55
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:=''+ GetVideoCardName
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=80
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:=''+ GetSoundCardName
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=105
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:='' + IntToStr(GetSystemPhys()) + 'Mb'
Parent:=Page.Surface
if GetSystemPhys+1<1024 then
Color:=$ccccff
end
Memo:=TMemo.Create(Page);
with Memo do begin
Left:=114
Top:=130
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:=''+ IntToStr(GetSystemPage()) + 'Mb'
Parent:=Page.Surface
end
end;
Автор: Velikom
Дата сообщения: 08.12.2007 15:04
Вопрос знатокам.

Скажите, уважаемые, можно ли с помощью «Inno Setup» создать инсталлятор, который:

Первым делом определяет язык системы. Если в качестве языка по умолчанию установлен русский, то выбирается русский язык установки, иначе - английский. При этом пользователю запрос на выбор языка установки не выдаётся.
Перед началом установки проверяет наличие в реестре определённого ключа («Ключ №1») и в случае его отсутствия задаёт вопрос о продолжении/об отмене установки.
На третьем этапе проверяет, не запущена ли определённая программа и в случае, если таковая запущена, снова задаёт вопрос о продолжении / об отмене установки (или, если это возможно, третьим пунктом предлагает закрыть эту программу).
В случае продолжения установки, при наличии в реестре ключей «Ключ №1», «Ключ №2» и «Ключ №3», а также при выполнении условий двух последующих пунктов сообщает о том, что все конечные директории установки корректно определены (с возможной корректировкой путей вручную; первых четырёх - в любом случае, пятого - только если его не удаётся обнаружить по фиксированному расположению) и предлагает продолжить установку (либо отказаться от неё - стандартным путём - нажатием на кнопку «Отмена»/«Выход»).
Четвёртый и пятый каталоги определяются следующим образом (первые три заимствовались из соответствующих ключей). Относительно «Директории №1» мы поднимаемся на один уровень вверх и находим «Директорию №4» там. Иными словами первый и четвёртый каталоги должны находиться в одной папке. Например, имеем (из «Ключа №1» или из указанных пользователем данных) следующий путь для первого каталога: «X:\Каталог_1\Каталог_2\Директория №1». В этом случае четвёртый каталог должен иметь такой адрес: «X:\Каталог_1\Каталог_2\Директория №4». Пятый каталог имеет фиксированное расположение и находится здесь «<Program Files>\Каталог_3\Директория_5».
После этого каждая директория проверяется на предмет её существования. Если какая-либо из них отсутствует, её создание инсталлятором не допускается.
В случае, если узнать расположение необходимых папок в автоматическом режиме не удаётся (либо они не существуют), пользователю перед продолжением установки предлагается указать местонахождение тех из них, которые не удалось найти инсталлятору самостоятельно.
В процессе установки дифференцировано распределяет файлы по указанным директориям, а после её окончания запускает по одному файлу из каждой папки, причём открывая файлы по-очереди: каждый последующий запускается после закрытия и удаления предыдущего. После закрытия и удаления последнего файла пользователю выдаётся сообщение о том, что установка успешно завершена.

Если описанное выше возможно воплотить в жизнь, или нечто подобное (в виде скрипта) уже где-то существует, не подскажете ли Вы, как это можно сделать, или не поделитесь ли ссылкой на уже готовый скрипт?
Автор: serg_aka_lain
Дата сообщения: 08.12.2007 15:28
Vitalliano

Если имеется ввиду минимальные требования то так:

пример для Оперативной памяти

with Memo do begin
Left:=114
Top:=105
Width:=303
Height:=22
ReadOnly:=True
Color:=$ccffcc
Text:='' + IntToStr(GetSystemPhys()) + 'Mb'
Parent:=Page.Surface
if GetSystemPhys+1<1024 then
Color:=$ccccff
end

если памяти меньше чем (в данном случае гигабайт), то цвет будет ($ccccff),
усли больше то $ccffcc -типа зеленый, тоесть надо указань необходимый минимум в
if GetSystemPhys+1<1024
Автор: Vitalliano
Дата сообщения: 08.12.2007 16:04
serg_aka_lain

Да, спасибро, в это понятно я именно немогу понять где выставляется минимальные треблвания процессора видяхи, звуковухи и винды, я добавил вот:

Memo:=TMemo.Create(Page);
with Memo do begin
Left:=0
Top:=155
Width:=110
Height:=22
ReadOnly:=True
Color:=clBtnFace
Text:='ОС'
Parent:=Page.Surface
end
Memo:=TMemo.Create(Page);
with Memo do begin
Text:=ExpandConstant('{reg:HKLM\Software\Microsoft\Windows NT\CurrentVersion,ProductName|}') + ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}') +' сборка ' +GetWindowsVersionString();
Left:=114;
Top:=155;
Width:=303;
Height:=22;
Color:=$ccffcc;
ReadOnly:=True
Parent:=Page.Surface;
end
end;
Автор: iTASmania_Inc
Дата сообщения: 08.12.2007 16:21
Vitalliano
Зачем изобретать велосипед, Victor_Dobrov уже давно сделал скрипт проверки системных требований - InnoSetup_Upgrade, где проверка системных требований идёт через реестр и API, что намного лучше юзания ДЛЛ.
Автор: Vitalliano
Дата сообщения: 08.12.2007 17:31
iTASmania_Inc

Спасибо, этого скрипта я еще не видел!!!

Буду смотреть.
Автор: Raf_SE
Дата сообщения: 08.12.2007 22:58
Допустим мод на Diablo II когда устанавливается то создает резервную копию заменяемых файлов в папке BACKUP. ВОПРОС: как сделать чтобы запуская деинсталятор он:
1. Переместил файлы из папки BACKUP, обратно в корень игры.
2. После этого удалил папку BACKUP со всем содержимым.

Пример (часть) скрипта
Source: {app}\binkw32.dll; DestDir: {app}\BACKUP; Tasks: "backup"; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly onlyifdoesntexist external
Автор: Vitalliano
Дата сообщения: 08.12.2007 22:59
iTASmania_Inc

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

Вот кусочек скрипта, который я использовал:

procedure InitializeWizard();
var

BackgroundBitmapImage: TBitmapImage;

s:string;

begin

// ExtractTemporaryFile('back.bmp'); //My_Image.bmp - указываемое изображение в секции [Files]
s:=ExpandConstant('{src}')+'\Res\back.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;

end;

//Procedure InitializeWizard();
Begin
    {значения системных требований (необязательно)}    NeedSys:= 5.1; NeedSp:= 2; NeedMB:= 250; NeedMHZ:= 1800; NeedRAM:= 512; NeedVRAM:= 128; NeedSwap:= 960; NeedSoundCard:= 'Creative'; NeedRegKey:= 'Software\Microsoft\.NETFramework'; NeedRegKeyOK:=' Пакет Microsoft .NET Framework установлен'; NeedRegKeyNO:=' Требуется установить Microsoft .NET Framework'
    InnoUpgrade <- Вот на это он выдает ошибку
    begin
End;
Автор: iTASmania_Inc
Дата сообщения: 08.12.2007 23:54
Vitalliano

Цитата:
Вот на это он выдает ошибку

Какую именно ошибку? Ошибок бывает много...
Насчёт фонового рисунка: опять-таки рекомендую скрипт, предложенный Victor_Dobrovым, если бы Вы не поленились, то обязательно нашли бы его в шапке.
Сам вариант спайки проверки системных требований и фонового рисунка можете взять отсюда.
Автор: Raf_SE
Дата сообщения: 09.12.2007 13:18
ПОМОГИТЕ у меня ОЧ важный вопрос:
------Часть скрипта----
LanguageDetectionMethod=uilanguage
ShowLanguageDialog=auto

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: desktopicon; Description: Создать ярлык на рабочем столе; GroupDescription: Ярлыки:

------
1. Как сделать чтобы инсталятор если не находил нужный язык в системе, не выдавал окно с выбором языков, а автоматически выбирал английский?
2. Как сделать чтобы если инсталятор выбрал язык интерфейса английский, то вместо "Создать ярлык на рабочем столе" писал "Create a shortcut on the desktop"?
3. Как сделать чтобы деинсталятор перед удалением спрашивал "Удалить сохранения игры?", если юзер выбирает "Да" тогда бы удалялась папка "SaveGames" со всем ее содержимым.
3. Как сделать чтобы деинсталятор перед удалением спрашивал "Удалить сохранения игры?", если юзер выбирает "Да" тогда бы удалялись все файлы формата "sv" из корня игры?
Автор: Vitalliano
Дата сообщения: 10.12.2007 00:12
Raf_SE
Для удаления сохраненных игр, лучше взять killsave.exe от 1С.

В секции [UninstallRun] пишеш

Filename: "{app}\Killsave.exe"; Parameters: "Kill"; WorkingDir: "{app}";

вот сам файл:
http://depositfiles.com/files/2654880
Автор: Vitalliano
Дата сообщения: 11.12.2007 00:35
Ребята, кто хочет, я выложил совмещенный скрипт Виктора Доброва вместе с бекскрином, инсталляция в левом нижнем углу и слайд шоу с параметром WindowVisible=yes.

Кто хочет забирайте, вот ссылка:

http://depositfiles.com/files/2666481
Автор: Victor_Dobrov
Дата сообщения: 11.12.2007 14:54
Vitalliano
Довесок в 6,4 Мб сырых BMP-шек к инсталлятору мало кого обрадует, может проще использовать это SlideShow?
Автор: Sampron
Дата сообщения: 11.12.2007 20:01
Никто не подскажет как можно реализовать такое в инно: http://funkyimg.com/viewer.php?img=80137install_listingJPG.jpg
Автор: Vitalliano
Дата сообщения: 12.12.2007 12:17
Victor_Dobrov

Дело в том, что тогда нельзя сделатьWindowsVisible=yes и инсталляцию по углам экрана, по крайней мере я пока незнаю можно ли так сделать, если можно то как?

Я хотел у тебя спросить как отключить в проверке системы одну строку, без NET. Frameworck???

Заранее благодарю.

Добавлено:
Точнее как удалить строку из проверки системы, отключить то отключил, но пустая сторка осталась???
Автор: Raf_SE
Дата сообщения: 12.12.2007 20:15
У меня тут нюбский вопрос: Как сделать чтобы имя деинсталятора было не "unins00.exe" а к примеру "Diablo.exe"?
Автор: Forslay
Дата сообщения: 12.12.2007 21:32
Подскажите пожалуйста, как можно реализовать такое, что бы по ходу инсталляции не было видно прогесс бара, и перечисляемых файлов....
========================================
Тоесть что бы не было видно что устанавливается, и сам прогресс этот...
наверное нада юзать /silent ? но как ?
============================================================
Заранее спасибо Вам...
Автор: Xom9I4oK
Дата сообщения: 12.12.2007 22:41
Кто-нибудь встречал такой баг или знает как лечить? Не отображается иконка инсталлера в проводнике и тотал коммандере (если размер инсталлера больше 500 метров) - если выкинуть почти все файлы и скомпилить заново, то все ОК!

p.s. Хм, вылечилось перекомпиливанием инсталла несколько раз...
Автор: iTASmania_Inc
Дата сообщения: 12.12.2007 22:47
Forslay
procedure InitializeWizard();
begin
WizardForm.FilenameLabel.Hide // Прячем извлекаемые файлы
WizardForm.ProgressGauge.Hide //Прячем прогресс-бар
end;
/silent - немного для другого.
Автор: Forslay
Дата сообщения: 13.12.2007 17:37
Народ может кто создавал свои текстурки для MP3 кнопок ?, поделитесь своими творениями...

Добавлено:
iTASmania_Inc, Спасибо Санёк за помощь !
Автор: Unc1e
Дата сообщения: 13.12.2007 23:44
Forslay

Цитата:
поделитесь своими творениями...

http://rapidshare.com/files/63042889/PlayWithTextures_best_TPanel.7z
Там скрипт и текстура ( by iTASmania_Inc )
Автор: geranik
Дата сообщения: 15.12.2007 08:04
Как убрать или заблокировать системный красный крест вверху, в углу?
Добавлено:
Ой... это же как отмена, понятно.
Автор: Forslay
Дата сообщения: 15.12.2007 09:35

Цитата:
Как убрать или заблокировать системный красный крест вверху, в углу?
Добавлено:
Ой... это же как отмена, понятно.

Вот вот, меня интересует почти тоже самое, только кнопочка отвечающая за функцию "Развернуть на весь экран"... Как её убрать? Я знаю что кнопка сворачивания убираеться какой то строкой в коде inno, но вот кнопка развёртки...
=========================================
Заранее спасибо!
=========================================
Unc1e, спасибо за текстурки, довольно красиво!
Автор: Angel_Smerti
Дата сообщения: 16.12.2007 16:05
Помогите правильно соединить, в скрипте, три клочка кода в один стройный ряд, а то я голову сломал, но не получилось.

[more=Вот моя головная боль...]
[Files]
#ifexist ScreenSaver
Source: {#ScreenSaver}; DestDir: embedded; Flags: dontcopy noencryption
#endif
Source: Bass.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: MusicButton.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
// Клочок кода для использования Обоев (Взял из набора «Слайдшоу» от Виктора Доброва)
var ErrorCode: Integer; BackgroundForm: TForm;

function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall';

Procedure BackgroundOnActivate(Sender: TObject); Begin if WizardForm.Visible then WizardForm.Show End;

Procedure InitializeBackground; Begin
BackgroundForm:= TForm.Create(nil)
    BackgroundForm.OnActivate:= @BackgroundOnActivate;
    BackgroundForm.BorderStyle:= bsNone    //    BackgroundForm.Color:= 0
    ShowWindow(BackgroundForm.Handle, sw_ShowMaximized)    // фоновое окно на полный экран
#ifexist ScreenSaver
{ ---------- установка значений реестра нужна только для SBSlideShow.scr ------------ }
if DirExists(ExpandConstant('{src}\')+ '{#ImagesDir}') then // проверка наличия папки нужна только для SBSlideShow
    RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'fold', ExpandConstant('{src}\') + '{#ImagesDir}') else    { если папка отсутствует, показываем Мои рисунки }
    RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'fold', ExpandConstant('{reg:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,My Pictures}'))
        RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'Alpha', '1');    // без этого ключа не пашет
            RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'timer', '2');    // время показа картинки в секундах
                RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'ShowName', '0');    // 1, чтобы отображать имя рисунка
                    RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'efTRUE', '1');    // 0, чтобы отключить эффекты
ExtractTemporaryFile(ExtractFileName('{#ScreenSaver}'));    // если сменить флаг ewNoWait на ewWaitUntilIdle, распаковка файлов будет происходить быстрее
    Exec(ExpandConstant('{tmp}\') + ExtractFileName('{#ScreenSaver}'), '/P '+ IntToStr(BackgroundForm.Handle),'', sw_Hide, ewNoWait, ErrorCode);
#endif
End;

Procedure InitializeWizard;
Begin
    InitializeBackground;    //    создание фонового окна и запуск скринсэвера
End;

Procedure DeinitializeSetup;
Begin
    BackgroundForm.Free    //    прекращаем работу скринсэвера
End;

// Клочок кода для проигрывания музыки (Взял вместе с текстурой из набора «by iTASmania_Inc»)
const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;
PlayButton, PauseButton, StopButton: TPanel;
PlayImage, PauseImage, StopImage: TBitmapImage;
PlayLabel, PauseLabel, StopLabel: TLabel;
MouseLabel: Tlabel;

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';

procedure PlayMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := -96
end;

procedure PlayMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
end;

procedure PlayMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PlayImage.Left <> -96 then PlayImage.Left := -192
StopImage.Left := -64
end;

procedure PauseMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -128
end;

procedure PauseMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -32
end;

procedure PauseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PauseImage.Left <> -128 then PauseImage.Left := -224
StopImage.Left := -64
end;

procedure StopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StopImage.Left := -160
end;

procedure StopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StopImage.Left := -64
end;

procedure StopMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if StopImage.Left <> -160 then StopImage.Left := -256
PlayImage.Left := 0
PauseImage.Left := -32
end;

procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
PauseImage.Left := -32
StopImage.Left := -64
end;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('sound.mp3');
mp3Name := ExpandConstant('{tmp}\sound.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);
PlayButton.Hide
PauseButton.Show
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);
PlayButton.Hide
PauseButton.Show
end;
end;
end;

procedure PauseButtonOnClick(Sender: TObject);
begin
BASS_ChannelPause(mp3Handle);
PauseButton.Hide
PlayButton.Show
end;

procedure StopButtonOnClick(Sender: TObject);
begin
BASS_Stop();
BASS_Free();
PauseButton.Hide
PlayButton.Show
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('MusicButton.bmp')

MouseLabel := TLabel.Create(WizardForm)
MouseLabel.Width := WizardForm.Width
MouseLabel.Height := WizardForm.Height
MouseLabel.Autosize := False
MouseLabel.Transparent := True
MouseLabel.OnMouseMove := @MouseMove
MouseLabel.Parent := WizardForm

PlayButton := TPanel.Create(WizardForm)
PlayButton.Left := 50
PlayButton.Top := 320
PlayButton.Width := 32
PlayButton.Height := 33
PlayButton.Cursor := crHand
PlayButton.ShowHint := True
PlayButton.Hint := 'Воспроизведение музыки'
PlayButton.OnClick := @PlayButtonOnClick
PlayButton.Parent := WizardForm

PlayImage := TBitmapImage.Create(WizardForm)
PlayImage.Left := 0
PlayImage.Top := 0
PlayImage.Width := 288
PlayImage.Height := 33
PlayImage.Enabled := False
PlayImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PlayImage.Parent := PlayButton
//
PlayImage.ReplaceColor:=$E2E2E2
PlayImage.ReplaceWithColor:=clBtnFace


PlayLabel := TLabel.Create(WizardForm)
PlayLabel.Width := PlayButton.Width
PlayLabel.Height := PlayButton.Height
PlayLabel.Autosize := False
PlayLabel.Transparent := True
PlayLabel.OnClick := @PlayButtonOnClick
PlayLabel.OnMouseDown := @PlayMouseDown
PlayLabel.OnMouseUp := @PlayMouseUp
PlayLabel.OnMouseMove := @PlayMouseMove
PlayLabel.Parent := PlayButton

PauseButton := TPanel.Create(WizardForm)
PauseButton.Left := 50
PauseButton.Top := 320
PauseButton.Width := 32
PauseButton.Height := 33
PauseButton.Cursor := crHand
PauseButton.ShowHint := True
PauseButton.Hint := 'Приостановить музыку'
PauseButton.OnClick := @PauseButtonOnClick
PauseButton.Parent := WizardForm

PauseImage := TBitmapImage.Create(WizardForm)
PauseImage.Left := -32
PauseImage.Top := 0
PauseImage.Width := 288
PauseImage.Height := 33
PauseImage.Enabled := False
PauseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PauseImage.Parent := PauseButton
//
PauseImage.ReplaceColor:=$E2E2E2
PauseImage.ReplaceWithColor:=clBtnFace

PauseLabel := TLabel.Create(WizardForm)
PauseLabel.Width := PauseButton.Width
PauseLabel.Height := PauseButton.Height
PauseLabel.Autosize := False
PauseLabel.Transparent := True
PauseLabel.OnClick := @PauseButtonOnClick
PauseLabel.OnMouseDown := @PauseMouseDown
PauseLabel.OnMouseUp := @PauseMouseUp
PauseLabel.OnMouseMove := @PauseMouseMove
PauseLabel.Parent := PauseButton

StopButton := TPanel.Create(WizardForm)
StopButton.Left := 82
StopButton.Top := 320
StopButton.Width := 32
StopButton.Height := 33
StopButton.Cursor := crHand
StopButton.ShowHint := True
StopButton.Hint := 'Остановить музыку'
StopButton.OnClick := @StopButtonOnClick
StopButton.Parent := WizardForm

StopImage := TBitmapImage.Create(WizardForm)
StopImage.Left := -64
StopImage.Top := 0
StopImage.Width := 288
StopImage.Height := 33
StopImage.Enabled := False
StopImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
StopImage.Parent := StopButton
//
StopImage.ReplaceColor:=$E2E2E2
StopImage.ReplaceWithColor:=clBtnFace

StopLabel := TLabel.Create(WizardForm)
StopLabel.Width := StopButton.Width
StopLabel.Height := StopButton.Height
StopLabel.Autosize := False
StopLabel.Transparent := True
StopLabel.OnClick := @StopButtonOnClick
StopLabel.OnMouseDown := @StopMouseDown
StopLabel.OnMouseUp := @StopMouseUp
StopLabel.OnMouseMove := @StopMouseMove
StopLabel.Parent := StopButton
end;

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

// Клочок кода для проверки реестра (И этот клочок кода мне подкинул Виктор Добров)
Function InitializeSetup: Boolean;
Begin
if RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1')
or RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{80DB2577-43E3-4C34-00AF-0D7967B942C9}')
then
result:= true
else
MsgBox('Игра {#SetupSetting("AppName")} не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbInformation, mb_Ok)
End;
[/more]
Автор: iTASmania_Inc
Дата сообщения: 16.12.2007 17:05
Angel_Smerti
http://files.unn.ru/9154447685
Хотя бы так...
Автор: Angel_Smerti
Дата сообщения: 16.12.2007 19:02
iTASmania_Inc - СПАСИБО БОЛЬШОЕ все работает как нельзя лучше!!!
Автор: Raf_SE
Дата сообщения: 17.12.2007 15:12
ееее А так никто не знает, как сделать чтобы имя деинсталятора было не "unins000.exe" а к примеру "UninsDiablo.exe"
Автор: Serega4
Дата сообщения: 19.12.2007 11:11
Народ помогите запустить файл по нажатию на кнопку

Вот мой код:

procedure ButtonOnClick(Sender: TObject);
var
Form: TSetupForm;
OKButton, CancelButton: TButton;
Lbl: TLabel;
res: integer;
s: string;
begin
s:=ExpandConstant('{app}')+'\proga.exe';
Exec(s, '', '', SW_SHOWNORMAL, ewNoWait, res);

Не работает почемуто
Автор: Chuvakstepan
Дата сообщения: 19.12.2007 16:44
Народ подскажите как сделать такое у себя в инсталляторе:

Полностью использовать Corona Skin не хочу
Автор: GnomS
Дата сообщения: 19.12.2007 20:37
Привет всем жителям.
Попробовал использовать данный инсталятор для себя.
Есть один вопрос.
Создал скрипт. Все работает нормально. При инстале в папку программы копируется несколько файлов *.exe и они во время инсталяции запускаются в hidden режиме для считывания некоторых данных и создают нужные файлы в нужных местах. Как сделать так что бы инсталятор сам удалил файлы *.exe после их отработки.
заранее спосибо.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


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