Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [81] 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

ispolin
04-12-2013, 15:30
Использую расширенную версию(не самую новую - 5.4.3). В шапке есть ссылка на расширенную. »
Дружище можете поделиться своей папочкой? я скачал из шапки архивы, там уйма файлов, что куда я так и не понял

Johny777
04-12-2013, 15:53
ispolin, http://sendfile.su/905216

Nordek
04-12-2013, 22:34
я скачал из шапки архивы, там уйма файлов, что куда я так и не понял »

Начну сначала.
Определись какую версию будешь устанавливать ANSI или Unicode.

[hr]Скачиваешь:
ispack-5.5.1.exe (http://files.jrsoftware.org/ispack/ispack-5.5.1.exe)
InnoCompiler121216(7zip).zip (http://restools.hanzify.org/inno/InnoCompiler121216(7zip).zip)
Inno_ISCmplr_Setup121002(7zip).zip (http://restools.hanzify.org/inno/Inno_ISCmplr_Setup121002(7zip).zip)

Устанавливаешь: ispack-5.5.1.exe.
Открываешь архиватором 7z: InnoCompiler121216(7zip).zip
в InnoCompiler121216(7zip).zip открываешь папку ANSI
в папке ANSI выделяешь все файлы, перетягиваешь в C:\Program Files\Inno Setup 5 и соглашаешься заменой.

Теперь открываешь архиватором 7z: Inno_ISCmplr_Setup121002(7zip).zip
в Inno_ISCmplr_Setup121002(7zip).zip открываешь папку InnoSetup_ANSI, затем открываешь папку FullVCL
в папке FullVCL выделяешь все файлы, перетягиваешь в C:\Program Files\Inno Setup 5 и соглашаешься с заменой.
На этом всё.[hr][hr]Скачиваешь:
ispack-5.5.1-unicode.exe (http://files.jrsoftware.org/ispack/ispack-5.5.1-unicode.exe)
InnoCompiler121216(7zip).zip (http://restools.hanzify.org/inno/InnoCompiler121216(7zip).zip)
Inno_ISCmplr_Setup121002(7zip).zip (http://restools.hanzify.org/inno/Inno_ISCmplr_Setup121002(7zip).zip)

Устанавливаешь: ispack-5.5.1-unicode.exe
Открываешь архиватором 7z: InnoCompiler121216(7zip).zip
в InnoCompiler121216(7zip).zip открываешь папку Unicode
в папке Unicode выделяешь все файлы, перетягиваешь в C:\Program Files\Inno Setup 5 и соглашаешься заменой.

Теперь открываешь архиватором 7z: Inno_ISCmplr_Setup121002(7zip).zip
в Inno_ISCmplr_Setup121002(7zip).zip открываешь папку InnoSetup_Unicode, затем открываешь папку FullVCL
в папке FullVCL выделяешь все файлы, перетягиваешь в C:\Program Files\Inno Setup 5 и соглашаешься с заменой.

Завершающий этап (только для версии Unicode):
Открываешь архиватором 7z: InnoCompiler121216(7zip).zip
в InnoCompiler121216(7zip).zip открываешь папку UnicodeFontLink
в папке UnicodeFontLink есть файл CourierNew.reg
двойным щелчком запусти CourierNew.reg и согласись с внесением информации в реестр нажав Да.
после применения перезагрузи компьютер.
На этом всё.[hr]

TryRooM
05-12-2013, 03:00
http://rghost.ru/50691097 Второй путь

Tco 03
05-12-2013, 08:06
Здравствуйте.
Большая просьба подсказать, на основе этого (http://forum.oszone.net/post-1930003-232.html) скрипта, когда-то, где-то видел модифицированный скрипт товарища Johny777, но найти так и не смог.
Возможно ли добавить второй прогрессбар и реализовать точно такую же функцию, как в ISToolsDownload?
Дело в том, что мне необходимо скачать два файла и хотелось бы реализовать один главный прогрессбар (ход загрузки всех файлов) и второй, текущяя загрузка файла (в принципе он уже есть).
Общий прогрессбар добавить непроблема, проблема заключается в том, с чем сравнить текущую загрузку.?
Прогрессбар и общий объём загрузочных файлов обнуляется сразу после того, как начинается загрузка следующего файла.

ispolin
05-12-2013, 13:11
Спасибо за папочки. Проверил код, оказалось не то, что я хотел.
Подскажите пожалуйста другой скрипт. Нужно, чтобы после выбора определённого компонента (прога.exe) открывалась новая страница с текстом "Внимиание! бла бла" и кнопки на этой странице Назад и Дальше. Если определённый компонент не выбран то и дополнительная страница не появляется.

Shkutu
05-12-2013, 13:36
Если определённый компонент не выбран то и дополнительная страница не появляется. »

procedure InitializeWizard();
begin
Page := CreateOutputMsgMemoPage(wpSelectComponents,
'Внимание', '',
'', 'Внимание! бла-бла-бла');
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageFromID(PageID) of
Page: Result := not IsComponentSelected('proga');
end;
end;

ispolin
05-12-2013, 13:54
Shkutu, ругается

http://i57.fastpic.ru/big/2013/1205/35/d631c580deebc80db56bb27541a87e35.jpg

Shkutu
05-12-2013, 17:01
ругается »
ну да, переменные надо создавать перед использованием:)

var Page: TOutputMsgMemoWizardPage; // на всякий случай - переменная должна быть глобальной ;)

ispolin
05-12-2013, 17:08
Shkutu, блин для меня эти слова как инопланетный язык
вот
begin
Page: TOutputMsgMemoWizardPage; // на всякий случай - переменная должна быть глобальной ;)
Page := CreateOutputMsgMemoPage(wpSelectComponents,

'Внимание', '',
'', 'Внимание! бла-бла-бла');
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageFromID(PageID) of
Page: Result := not IsComponentSelected('proga');
end;
end;

так не так?
напишите плиз как нужно-правильно

Nordek
05-12-2013, 17:32
напишите плиз как нужно-правильно »
[Components]
Name: proga; Description: A

[Code]
var
Page: TOutputMsgMemoWizardPage;

procedure InitializeWizard();
begin
Page := CreateOutputMsgMemoPage(wpSelectComponents,
'Внимание', '',
'', 'Внимание! бла-бла-бла');
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageFromID(PageID) of
Page: Result := not IsComponentSelected('proga');
end;
end;

ispolin
05-12-2013, 17:57
Nordek,

http://i58.fastpic.ru/big/2013/1205/3f/45c6fa707d2e7f761690fa49e640d73f.jpg

Nordek
05-12-2013, 18:29
ispolin, А зачем ты закомментировал procedure InitializeWizard();? У тебя InitializeWizard не один?
Вставил то правильно?

ispolin
05-12-2013, 18:53
У тебя InitializeWizard не один? »
да не один
[Code]
function IsX64: Boolean;
begin
Result := Is64BitInstallMode and (ProcessorArchitecture = paX64);
end;
function IsX86: Boolean;
begin
Result := (Is64BitInstallMode=false) and (ProcessorArchitecture = paX86);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= True;
if CurPageID = wpSelectComponents then
if WizardSelectedComponents(False) = '' then begin
MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK);
Result:= False;
end;
end;
procedure InitializeWizard();
begin
//прячем имена файлов
WizardForm.FileNameLabel.Visible:= False;
//голубой цвет текста вместо блеклого
with WizardForm do begin
with BeveledLabel do begin
Font.Color:=clBlue;
Enabled:=True;
end;
end;
end;
var
Page: TOutputMsgMemoWizardPage;
//procedure InitializeWizard();
begin
Page := CreateOutputMsgMemoPage(wpSelectComponents,
'Предупреждение!', '',
'', 'Внимание! Прежде чем инсталировать Microsoft .NET Framework только 4.0 для Windows 7, установите версию 3.5.1 из Панель управления-Программы и компоненты-Включение и отключение компонентов Windows-Microsoft .NET Framework 3.5.1');
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageFromID(PageID) of
Page: Result := not IsComponentSelected('Framework\4');
end;
end;

Nordek
05-12-2013, 18:59
да не один »Так нужно было завести за энд,
а
var
Page: TOutputMsgMemoWizardPage;

подвинуть выше.

function IsX64: Boolean;
begin
Result := Is64BitInstallMode and (ProcessorArchitecture = paX64);
end;
function IsX86: Boolean;
begin
Result := (Is64BitInstallMode=false) and (ProcessorArchitecture = paX86);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= True;
if CurPageID = wpSelectComponents then
if WizardSelectedComponents(False) = '' then begin
MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK);
Result:= False;
end;
end;

var
Page: TOutputMsgMemoWizardPage;

procedure InitializeWizard();
begin
//прячем имена файлов
WizardForm.FileNameLabel.Visible:= False;
//голубой цвет текста вместо блеклого
with WizardForm do begin
with BeveledLabel do begin
Font.Color:=clBlue;
Enabled:=True;
end;
end;

begin
Page := CreateOutputMsgMemoPage(wpSelectComponents,
'Предупреждение!', '',
'', 'Внимание! Прежде чем инсталировать Microsoft .NET Framework только 4.0 для Windows 7, установите версию 3.5.1 из Панель управления-Программы и компоненты-Включение и отключение компонентов Windows-Microsoft .NET Framework 3.5.1');
end;
end;


function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageFromID(PageID) of
Page: Result := not IsComponentSelected('Framework\4');
end;
end;





Вообще в коде:
begin
Page := CreateOutputMsgMemoPage(wpSelectComponents,
'Предупреждение!', '',
'', 'Внимание! Прежде чем инсталировать Microsoft .NET Framework только 4.0 для Windows 7, установите версию 3.5.1 из Панель управления-Программы и компоненты-Включение и отключение компонентов Windows-Microsoft .NET Framework 3.5.1');
end;


begin и end; можно удалить, т.е

Page := CreateOutputMsgMemoPage(wpSelectComponents,
'Предупреждение!', '',
'', 'Внимание! Прежде чем инсталировать Microsoft .NET Framework только 4.0 для Windows 7, установите версию 3.5.1 из Панель управления-Программы и компоненты-Включение и отключение компонентов Windows-Microsoft .NET Framework 3.5.1');

и завести за end; т.е

было

procedure InitializeWizard();
begin
//прячем имена файлов
WizardForm.FileNameLabel.Visible:= False;
//голубой цвет текста вместо блеклого
with WizardForm do begin
with BeveledLabel do begin
Font.Color:=clBlue;
Enabled:=True;
end;
end;

begin
Page := CreateOutputMsgMemoPage(wpSelectComponents,
'Предупреждение!', '',
'', 'Внимание! Прежде чем инсталировать Microsoft .NET Framework только 4.0 для Windows 7, установите версию 3.5.1 из Панель управления-Программы и компоненты-Включение и отключение компонентов Windows-Microsoft .NET Framework 3.5.1');
end;
end;


стало
procedure InitializeWizard();
begin
//прячем имена файлов
WizardForm.FileNameLabel.Visible:= False;
//голубой цвет текста вместо блеклого
with WizardForm do begin
with BeveledLabel do begin
Font.Color:=clBlue;
Enabled:=True;
end;
end;

Page := CreateOutputMsgMemoPage(wpSelectComponents,
'Предупреждение!', '',
'', 'Внимание! Прежде чем инсталировать Microsoft .NET Framework только 4.0 для Windows 7, установите версию 3.5.1 из Панель управления-Программы и компоненты-Включение и отключение компонентов Windows-Microsoft .NET Framework 3.5.1');
end;

Shkutu
05-12-2013, 19:00
да не один »
Должен быть один)


[Code]
var Page: TOutputMsgMemoWizardPage;

function IsX64: Boolean;
begin
Result := Is64BitInstallMode and (ProcessorArchitecture = paX64);
end;

function IsX86: Boolean;
begin
Result := (Is64BitInstallMode=false) and (ProcessorArchitecture = paX86);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= True;
if CurPageID = wpSelectComponents then
if WizardSelectedComponents(False) = '' then begin
MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK);
Result:= False;
end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageFromID(PageID) of
Page: Result := not IsComponentSelected('Framework\4');
end;
end;

procedure InitializeWizard();
begin
//прячем имена файлов
WizardForm.FileNameLabel.Visible:= False;
//голубой цвет текста вместо блеклого
with WizardForm do begin
with BeveledLabel do begin
Font.Color:=clBlue;
Enabled:=True;
end;
end;

Page := CreateOutputMsgMemoPage(wpSelectComponents,
'Предупреждение!', '',
'', 'Внимание! Прежде чем инсталировать Microsoft .NET Framework только 4.0 для Windows 7, установите версию 3.5.1 из Панель управления-Программы и компоненты-Включение и отключение компонентов Windows-Microsoft .NET Framework 3.5.1');
end;

ispolin
05-12-2013, 19:13
Благодарю всех за помощь, одолели мы проблему!

Johny777
05-12-2013, 19:44
Tco 03, ну всё, с тебя ящик бухла:
написал полностью код закачки с нуля на основе тех же функций из Wininet.h/Wininet.pas
двойной прогресс как ты и хотел, ...
тот пример тут http://forum.oszone.net/post-2149513-443.html (гугл рулит), но это уже не важно!
справка по API:
function DownloadFiles
(
const urlFiles: array of String; // массив ссылок на закачку
const dstFiles: array of string; // массив путей сохраняемых файлов (каждый файл должен соответствовать соответствующей ссылке!)
const SkipExistingFiles: Boolean; // пропуск существующих файлов (True-да)
const CallBack: _DOWNLOAD_CALLBACK // указатель на функцию обратного вызова или nil
): Boolean;
////////////////////////////////////////////////////////////////////////
type
_DOWNLOAD_CALLBACK =
function(
const StatusMessage: Integer; // сообщение о статусе загрузки:
// DOWNLOAD_PREPARING,
// DOWNLOAD_IN_PROGRESS,
// DOWNLOAD_IN_PROGRESS_NEXT_FILE,
// DOWNLOAD_FINISHED.
const dstFile: String; // путь к текущему файлу назначения
const FileBytes: Extended; // размер текущего файла в байтах
const FileBytesWritten: Extended; // кол-во загруженных, записанных в файл байт от его размера
const TotalBytes: Extended; // размер всех файлов в байтах
const TotalBytesWritten: Extended // кол-во загруженных, записанных байт от размера всех файлов
): Boolean; // чтоб отменить загрузку нужно из вернуть False;
///////////////////////////////////////////////////////////////////////////////

// если функция DownloadFiles() вернула False, то можно узнать почему:
// function LastDownloadError(): Integer; возвращает следующие константы ошибок
const
DOWNLOAD_ERROR_ABORTED_BY_USER = 2;
DOWNLOAD_ERROR_COULD_NOT_DELETE_EXISTING_FILE = 4;
DOWNLOAD_ERROR_DOWNLOAD_URL_IS_NOT_VALID_URL = 8;



сам код загрузки + демо
procedure IncEx(var Int: Extended; const Value: Extended);
begin
Int := Int + Value;
end;
//////////////////////////////////////// download files ///////////////////////////////////////////////
type
Pointer = Longint;
HINTERNET = Pointer;

_DOWNLOAD_CALLBACK =
function(
const StatusMessage: Integer; // сообщение о статусе загрузки
const dstFile: String; // путь к текущему файлу назначения
const FileBytes: Extended; // размер текущего файла в байтах
const FileBytesWritten: Extended; // кол-во загруженных, записанных в файл байт от его размера
const TotalBytes: Extended; // размер всех файлов в байтах
const TotalBytesWritten: Extended // кол-во загруженных, записанных байт от размера всех файлов
): Boolean; // чтоб отменить загрузку нужно из вернуть False;

const
INTERNET_OPEN_TYPE_PRECONFIG = 0; { use registry configuration }
HTTP_QUERY_CONTENT_LENGTH = 5;


#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
function HttpQueryInfo(hRequest: HINTERNET; dwInfoLevel: DWORD;
lpvBuffer: AnsiString; var lpdwBufferLength: DWORD;
var lpdwReserved: DWORD): BOOL; external 'HttpQueryInfo{#A}@wininet.dll stdcall';
function InternetCloseHandle(hInet: HINTERNET): BOOL; external 'InternetCloseHandle@wininet.dll stdcall';
function InternetOpenUrl(hInet: HINTERNET; lpszUrl: String;
lpszHeaders: String; dwHeadersLength: DWORD; dwFlags: DWORD;
dwContext: DWORD): HINTERNET; external 'InternetOpenUrl{#A}@wininet.dll stdcall';
function InternetOpen(lpszAgent: String; dwAccessType: DWORD;
lpszProxy, lpszProxyBypass: String; dwFlags: DWORD): HINTERNET; external 'InternetOpen{#A}@wininet.dll stdcall';
function InternetReadFile(hFile: HINTERNET; lpBuffer: AnsiString;
dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; external 'InternetReadFile@wininet.dll stdcall';

/////////////////////////////////// handle Errors /////////////////////////////////
const
DOWNLOAD_ERROR_ABORTED_BY_USER = 2;
DOWNLOAD_ERROR_COULD_NOT_DELETE_EXISTING_FILE = 4;
DOWNLOAD_ERROR_DOWNLOAD_URL_IS_NOT_VALID_URL = 8;
var
downloadError: Integer;

function LastDownloadError(): Integer;
begin
Result := downloadError;
end;
/////////////////////////////////////////////////////////////////////////////////////

const
FILESIZE_BUFF_LEN = 30;
UNDEF_FILE_SIZE = -1;

function InternetFileSize
(
const hOpenedInet: HINTERNET; // in // with INTERNET_OPEN_TYPE_PRECONFIG flag
const urlFile: String; // in
var FileSize: Extended; // out
var hOpenedFile: HINTERNET // out
): Boolean;
var
Buff: AnsiString;
dwBufLen, dwReserved: DWORD;
begin
Result := False;
FileSize := UNDEF_FILE_SIZE;

SetLength(Buff, FILESIZE_BUFF_LEN);
dwBufLen := DWORD(FILESIZE_BUFF_LEN);

hOpenedFile := InternetOpenUrl( hOpenedInet, urlFile, '', 0, 0, 0 );
if hOpenedFile = 0 then
begin
downloadError := DOWNLOAD_ERROR_DOWNLOAD_URL_IS_NOT_VALID_URL;
Exit;
end;

if HttpQueryInfo( hOpenedFile, HTTP_QUERY_CONTENT_LENGTH, Buff, dwBufLen, dwReserved ) then
begin
FileSize := StrToFloat( Trim(Buff) );
Result := True;
end;
end;

function InternetFilesSizes
(
const hOpenedInet: HINTERNET; // in // with INTERNET_OPEN_TYPE_PRECONFIG flag
const urlFiles: array of String; // in
const urlFilesCount: Integer; // in
var TotalBytes: Extended; // out
var FileBytes: array of Extended; // out
var hOpenedFile: array of HINTERNET // out
): Boolean;
var
i, e: Integer;
begin
Result := True;
TotalBytes := 0;

SetArrayLength(FileBytes, urlFilesCount);
SetArrayLength(hOpenedFile, urlFilesCount);

for i := 0 to urlFilesCount-1 do
begin
Result := Result and InternetFileSize(hOpenedInet, urlFiles[i], FileBytes[i], hOpenedFile[i]);
if not Result then
begin
for e := 0 to i-1 do
InternetCloseHandle(hOpenedFile[e]);

Break;
end;

TotalBytes := TotalBytes + FileBytes[i];
end;
end;



const
MEGABYTE = 1024;
READ_WRITE_FILE_BUFF_SIZE = MEGABYTE;

// download messages
DOWNLOAD_PREPARING = 2;
DOWNLOAD_IN_PROGRESS = 4;
DOWNLOAD_IN_PROGRESS_NEXT_FILE = 8;
DOWNLOAD_FINISHED = 16;


function DownloadFiles
(
const urlFiles: array of String; // массив ссылок на закачку
const dstFiles: array of string; // массив путей сохраняемых файлов (каждый файл должен соответствовать соответствующей ссылке!)
const SkipExistingFiles: Boolean; // пропуск существующих файлов (True-да)
const CallBack: _DOWNLOAD_CALLBACK // указатель на функцию обратного вызова или nil
): Boolean;
var
i: Integer;

TotalBytes, TotalBytesWritten: Extended;
FileBytes: array of Extended;
FileBytesWritten: Extended;

hOpenedFile: array of HINTERNET;
hOpenedInet: HINTERNET;

urlFilesCount: Integer;

dstFileStream: TFileStream;
dwNumberOfBytesRead: DWORD;
Buff: AnsiString;

AbortedWhileWriting: Boolean;
begin
Result := False;
AbortedWhileWriting := False;


hOpenedInet := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, '', '', 0);
if hOpenedInet = 0 then Exit;
try
if CallBack <> nil then // callback
if not CallBack(DOWNLOAD_PREPARING, '', UNDEF_FILE_SIZE, UNDEF_FILE_SIZE, UNDEF_FILE_SIZE, UNDEF_FILE_SIZE) then
begin
downloadError := DOWNLOAD_ERROR_ABORTED_BY_USER;
Exit;
end;

urlFilesCount := GetArrayLength(urlFiles);
if not InternetFilesSizes(hOpenedInet, urlFiles, urlFilesCount, TotalBytes, FileBytes, hOpenedFile) then Exit;

SetLength(Buff, READ_WRITE_FILE_BUFF_SIZE);

if CallBack <> nil then TotalBytesWritten := 0; // callback

for i := 0 to urlFilesCount-1 do // download
begin

if CallBack <> nil then // callback
begin
FileBytesWritten := 0;

if not CallBack
(
DOWNLOAD_IN_PROGRESS_NEXT_FILE,
dstFiles[i],
FileBytes[i],
UNDEF_FILE_SIZE,
TotalBytes,
TotalBytesWritten
) then
begin
downloadError := DOWNLOAD_ERROR_ABORTED_BY_USER;
Exit;
end;
end;

if FileExists(dstFiles[i]) then
if SkipExistingFiles then Continue
else
if not DeleteFile(dstFiles[i]) then
begin
downloadError := DOWNLOAD_ERROR_COULD_NOT_DELETE_EXISTING_FILE;
Exit;
end;


dstFileStream := TFileStream.Create(dstFiles[i], fmCreate);
try
repeat

InternetReadFile(hOpenedFile[i], Buff, READ_WRITE_FILE_BUFF_SIZE, dwNumberOfBytesRead);
dstFileStream.Write(Buff, dwNumberOfBytesRead);

if CallBack <> nil then // callback
begin
IncEx( TotalBytesWritten, Integer(dwNumberOfBytesRead) );
IncEx( FileBytesWritten, Integer(dwNumberOfBytesRead) );

if not CallBack
(
DOWNLOAD_IN_PROGRESS,
dstFiles[i],
FileBytes[i],
FileBytesWritten,
TotalBytes,
TotalBytesWritten
) then
begin
downloadError := DOWNLOAD_ERROR_ABORTED_BY_USER;
AbortedWhileWriting := True;
Exit;
end;
end;

until (dwNumberOfBytesRead = 0);
finally
InternetCloseHandle(hOpenedFile[i]);
dstFileStream.Free;

if AbortedWhileWriting then DeleteFile(dstFiles[i]);
end;

end;

Result := True;
if CallBack <> nil then // callback
CallBack(DOWNLOAD_FINISHED, '', UNDEF_FILE_SIZE, UNDEF_FILE_SIZE, UNDEF_FILE_SIZE, UNDEF_FILE_SIZE);

finally
InternetCloseHandle(hOpenedInet);
end;
end;


///////////////////////////////////////////////////////////// demo ///////////////////////////////////////////////////////////////////////

var
FilePrpgressBar, TotalProgressBar: TNewProgressBar;
FileStatic: TNewStaticText;


function _DownloadCallBack(
const StatusMessage: Integer;
const dstFile: String;
const FileBytes: Extended;
const FileBytesWritten: Extended;
const TotalBytes: Extended;
const TotalBytesWritten: Extended
): Boolean;
begin
case StatusMessage of
DOWNLOAD_PREPARING: FileStatic.Caption := 'Preparing download...';

DOWNLOAD_IN_PROGRESS:
begin
TotalProgressBar.Position := Round( (TotalProgressBar.Max*TotalBytesWritten) / TotalBytes );
FilePrpgressBar.Position := Round( (FilePrpgressBar.Max*FileBytesWritten) / FileBytes );
end;

DOWNLOAD_IN_PROGRESS_NEXT_FILE:
begin
WizardForm.Caption := WizardForm.Caption + ' :) ';
FileStatic.Caption := dstFile;
end;

DOWNLOAD_FINISHED: MsgBox('Download Finished!', mbInformation, MB_OK);
end;

Application.ProcessMessages;

Result := not Application.Terminated;
end;


procedure DownloadBtnClick(Sender: TObject);
begin
DownloadFiles
( ['http://mse.dlservice.microsoft.com/download/7/6/0/760B9188-4468-4FAD-909E-4D16FE49AF47/ruRU/x86/mseinstall.exe',
'',
'http://mse.dlservice.microsoft.com/download/7/6/0/760B9188-4468-4FAD-909E-4D16FE49AF47/ruRU/x86/mseinstall.exe',
'http://mse.dlservice.microsoft.com/download/7/6/0/760B9188-4468-4FAD-909E-4D16FE49AF47/ruRU/x86/mseinstall.exe'
]
,['C:\test1.exe',
'C:\test2.exe',
'C:\test3.exe',
'C:\test4.exe'
],
False,
@_DownloadCallBack
);
end;


procedure InitializeWizard();
begin
with WizardForm do
begin
OuterNotebook.Hide;

WizardForm.Caption := '';

TotalProgressBar := TNewProgressBar.Create(WizardForm);
with TotalProgressBar do
begin
Parent := WizardForm;
SetBounds(10,10,WizardForm.ClientWidth-20,25);
Max := 1000;
end;

FilePrpgressBar := TNewProgressBar.Create(WizardForm);
with FilePrpgressBar do
begin
Parent := WizardForm;
SetBounds(10,40,WizardForm.ClientWidth-20,25);
end;

FileStatic := TNewStaticText.Create(WizardForm)
with FileStatic do
begin
Parent := WizardForm;
Left := 15;
Top := 77;
end;

with TButton.Create(WizardForm) do
begin
Parent := WizardForm;
SetBounds((WizardForm.ClientWidth-77) div 2, 270, 77, 25);
Caption := 'Download';
OnClick := @DownloadBtnClick;
end;
end;



end;


El Sanchez, ты тогда говорил:
P.S. Вообще-то пример в шапке устарел, заменю его как-нибудь. »
Теперь, думаю, нет необходимости :)
Предлагаю добавить код в шапку (с заменой, если сочтёшь нужным), тк он может многим пригодиться
PS:
только я так и не понял зачем нужен флаг в твоём коде InternetOpenUrl(... INTERNET_FLAG_NEED_FILE ), когда уже непосредственно получаешь указатель на файл для скачивания?
на MSDN сказано "Causes a temporary file to be created if the file cannot be cached". Не пойму я. Можешь пожалуйста объяснить:
"Создание временного файла, если он не может быть кэширован"?

Nordek
05-12-2013, 19:51
Должен быть один) »Он тебе ничего не должен.
//Пример событий имеющие дубликацию
procedure InitializeWizard();
begin
InitializeWizard1();
// InitializeWizard2();
// InitializeWizard3();
// InitializeWizard4();
// InitializeWizard5();
end;

function InitializeSetup(): Boolean;
begin
Result := InitializeSetup1(); if not Result then exit;
// Result := InitializeSetup2(); if not Result then exit;
// Result := InitializeSetup3(); if not Result then exit;
// Result := InitializeSetup4(); if not Result then exit;
// Result := InitializeSetup5(); if not Result then exit;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
// CurPageChanged2(CurPageID);
// CurPageChanged3(CurPageID);
// CurPageChanged4(CurPageID);
// CurPageChanged5(CurPageID);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
// CurStepChanged2(CurStep);
// CurStepChanged3(CurStep);
// CurStepChanged4(CurStep);
// CurStepChanged5(CurStep);
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup1();
// DeinitializeSetup2();
// DeinitializeSetup3();
// DeinitializeSetup4();
// DeinitializeSetup5();
end;


т.е те кто пользуется для совмещения скриптов программой Joiner, так и будет:
// --- Generated by InnoSetup Script Joiner version 3.0, Jul 22 2009, (c) Bulat Ziganshin <Bulat.Ziganshin@gmail.com>. More info at http://issjoiner.codeplex.com/

// --- Source: Inno Setup Script (2).iss ------------------------------------------------------------
procedure InitializeWizard1();
begin
with WizardForm.GroupEdit do
begin
Top := ScaleY(84);
end;
end;


// --- Source: Inno Setup Script.iss ------------------------------------------------------------
procedure InitializeWizard2();
begin
with WizardForm.DirEdit do
begin
Top := ScaleY(84);
end;
end;


// --- Dispatching code ------------------------------------------------------------

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;


ведь новички не знают как совмещать, вот и пользуются Joiner, вместо того чтоб сделать
так:
procedure InitializeWizard();
begin
with WizardForm.DirEdit do
begin
Top := ScaleY(84);
end;

with WizardForm.GroupEdit do
begin
Top := ScaleY(84);
end;


или так:
procedure InitializeWizard();
begin
WizardForm.DirEdit.Top := ScaleY(84);
WizardForm.GroupEdit.Top := ScaleY(84);
end;

Dimas2011
05-12-2013, 20:15
Когда выбираешь куда устанавливать файлы потом открывается сам список того что хочешь установить. Как сделать так чтобы когда наводишь на название какого-то файла выскакивала картинка? Говорю сразу я полный нуб в этом дела пожалуста сделайте хотябы для одного элемента плыз

#define ArcExtract "17"
#define ZipExtract "0"
#define SrepExtract "0"
#define RepExtract "0"
#define PrecompExtract "0"
#define OggDecode "0"
#define TakDecode "0"
#define ZipPak "0"

#define IsExtractBarMax "17"

;; ниже имя игры
#define MyAppName "test"
;; ниже версия
#define MyAppVersion "1.0"
;; ниже автор
#define MyAppPublisher "test"
;; ниже имя exe файла, на кторорый ссылается ярлык
#define MyAppExeName "WotLa.exe"
;; ниже версия, которая записывается в свойствах
#define vers1 "1.1.1.2"
;; ниже сколько требуется места на установку, в МБ
#define NeedSize1 "16000"
;Цвет инсталятора
#define colour "clblack"

[Setup]
AppName={#MyAppName}
AppverName={#MyAppVersion}
AppVersion={#MyAppVersion}
VersionInfoVersion={#vers1}
VersionInfoTextVersion={#vers1}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
WizardSmallImageFile=Files\WizardSmallImage.bmp
SetupIconFile=Files\icon.ico
WizardImageFile=Files\WizardImg.bmp
ShowTasksTreeLines=yes
OutputDir=Output
AllowCancelDuringInstall=no

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Types]
Name: full; Description: Full installation; Flags: iscustom


[Components]
Name: g0; Description: Тест; Flags: dontinheritcheck
Name: g0\c1; Description: A; Flags: exclusive
Name: g0\c2; Description: B; Flags: exclusive
Name: g0\c3; Description: C; Flags: exclusive
Name: g0\c4; Description: D; Flags: exclusive


[Files]
Source: Files\A.bmp; Flags: dontcopy nocompression
Source: Files\B.bmp; Flags: dontcopy nocompression
Source: Files\C.bmp; Flags: dontcopy nocompression
Source: Files\D.bmp; Flags: dontcopy nocompression
Source: Files\logo.bmp; Flags: dontcopy
Source: Files\BASS.dll; Flags: dontcopy
Source: Files\sound.mp3; Flags: dontcopy nocompression
Source: Files\MusicButton.bmp; Flags: dontcopy
Source: Files\DirBitmap.bmp; DestDir: "{tmp}"; Flags: dontcopy
Source: Files\GroupBitmap.bmp; DestDir: "{tmp}"; Flags: dontcopy
///////////////////////////////////////////////////////Файлы для распаковки======================================================================

;;-----------------------------------------------------------///////////////////////////--------------------------------------------------------
[CustomMessages]
rus.WelcomeLabel1=
rus.WelcomeLabel2=
rus.FinisLabel1=
rus.FinisLabel2=

rus.Tasks1=Установить &PhysX
rus.Tasks2=Установить &Microsoft Visual C++ Redist
rus.Tasks3=Обновить &DirectX (требуется интернет соединение)
rus.Prog=Дополнительное программное обеспечение:

rus.NeedSpace=Требуется места на диске:
rus.FreeSpace=Доступно места на диске:

rus.ru1=В пути установки присутствуют русские буквы, что недопустимо.
rus.ru2=Пожалуйста, повторите ввод.

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

[Code]
#ifdef colour
const
Color = {#colour}; //===Цвет инсталятора=======
#endif


//==================================================================Начало разметка формы=================================================================
var
FLabel1, FLabel2, WLabel1, WLabel2, PageNameLabel, PageDescriptionLabel,NeedSpaceLabel,FreeSpaceLabel: TLabel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
LogoImage: TBitmapImage;

ProgressBar1:TNewProgressBar;

const SmallWidth = 497;
//////---------------------------------------------------- музыка в инсталяторе
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;
AppPath: string;

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
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
end;
procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
PauseImage.Left := -32
end;

procedure PlayButtonOnClick(Sender: TObject);
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
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 Music;
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 := 465
PlayButton.Top := 64
PlayButton.Width := 23
PlayButton.Height := 23
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 := 23
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 := 465
PauseButton.Top := 64
PauseButton.Width := 23
PauseButton.Height := 23
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 := 23
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


end;

function InitializeSetup1(): 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 DeinitializeSetup1();
begin
BASS_Stop();
BASS_Free();
end;
/////----------------------------------------------------- конец музыка в инсталяторе

procedure GetFreeSpaceCaption(Sender: TObject); /////Вычисление свободного места на диске
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:FreeSpace}')+ ' ' + FloatToStr(round(FreeMB/1024*100)/100) + ' Gb' else
FreeSpaceLabel.Caption := ExpandConstant('{cm:FreeSpace}') + ' ' + IntToStr(FreeMB)+ ' Mb';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption; /////Вычисление требуемого места для установки
begin
if NeedSize > 1024 then

NeedSpaceLabel.Caption := ExpandConstant('{cm:NeedSpace}') + ' ' + FloatToStr(round(NeedSize/1024*100)/100) + ' Mb' else
NeedSpaceLabel.Caption := ExpandConstant('{cm:NeedSpace}') + ' ' + IntToStr(NeedSize)+ ' Mb';
end;

procedure InitializeWizard1();
begin
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
ProgressGauge.Hide;
FileNameLabel.Hide;
StatusLabel.Top:=ScaleY(20);
WizardForm.DiskSpaceLabel.Hide;
end;

with WizardForm do
begin
WizardBitmapImage.Width := ScaleY (498);
WizardBitmapImage.Height := ScaleX (314);
WizardBitmapImage2.Width := ScaleY (498);
WizardBitmapImage2.Height := ScaleX (314);
WizardSmallBitmapImage.Left:= WizardForm.WizardSmallBitmapImage.Left - (SmallWidth - WizardForm.WizardSmallBitmapImage.Width) + 2 WizardSmallBitmapImage.Width:= SmallWidth
end;

begin
WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(40);
WLabel1.Top := ScaleY(150);
WLabel1.Width := ScaleX(240);
WLabel1.Height := ScaleY(100);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 8;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clWhite;
WLabel1.Font.Name:= 'Comic Sans MS'
WLabel1.ShowAccelChar := False;
WLabel1.Caption :=ExpandConstant('{cm:WelcomeLabel1}');
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;

WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(190);
WLabel2.Left := ScaleX(40);
WLabel2.Width := ScaleX(240);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Size := 8;
WLabel2.Font.Style := [fsBold];
WLabel2.Font.Color:= clWhite;
WLabel2.Font.Name:= 'Comic Sans MS'
WLabel2.ShowAccelChar := False;
WLabel2.Caption := ExpandConstant('{cm:WelcomeLabel2}');
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;

FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(40);
FLabel1.Top := ScaleY(150);
FLabel1.Width := ScaleX(240);
FLabel1.Height := ScaleY(54);
FLabel1.AutoSize := False;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 8;
FLabel1.Font.Name := 'Comic Sans MS'
FLabel1.Font.Style := [fsBold];
FLabel1.Font.Color:= clWhite;
FLabel1.ShowAccelChar := False;
FLabel1.Caption := ExpandConstant('{cm:FinisLabel1}');
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;

FLabel2 :=TLabel.Create(WizardForm);
FLabel2.Top := ScaleY(190);
FLabel2.Left := ScaleX(40);
FLabel2.Width := ScaleX(240);
FLabel2.Height := ScaleY(77);
FLabel2.AutoSize := False;
FLabel2.WordWrap := True;
FLabel2.Font.Size := 8;
FLabel2.Font.Name := 'Comic Sans MS'
FLabel2.Font.Style := [fsBold];
FLabel2.Font.Color:= clWhite;
FLabel2.ShowAccelChar := False;
FLabel2.Caption := ExpandConstant('{cm:FinisLabel2}');
FLabel2.Transparent := True;
FLabel2.Parent := WizardForm.FinishedPage;
end;

PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
SetBounds(WizardForm.PageNameLabel.Left, WizardForm.PageNameLabel.Top, WizardForm.PageNameLabel.Width - 32, WizardForm.PageNameLabel.Height)
AutoSize:= False; WordWrap:= True; Transparent:= True;
Font.Color:= clWhite;
Font.Style:= WizardForm.PageNameLabel.Font.Style;
Parent:= WizardForm.MainPanel;
end;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
SetBounds(WizardForm.PageDescriptionLabel.Left, WizardForm.PageDescriptionLabel.Top, WizardForm.PageDescriptionLabel.Width - 32, WizardForm.PageDescriptionLabel.Height)
AutoSize:= False; WordWrap:= True; Transparent:= True;
Font.Color:= clWhite;
Font.Style:= WizardForm.PageDescriptionLabel.Font.Style;
Parent:= WizardForm.MainPanel;
end;

Music //музыка в инсталяторе
NeedSize := {#NeedSize1};

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
with WizardForm do
begin
DirEdit.OnChange := @GetFreeSpaceCaption;
DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

ProgressBar1:=TNewProgressBar.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar1.Left := WizardForm.ProgressGauge.Left;
ProgressBar1.Top := WizardForm.ProgressGauge.Top;
ProgressBar1.min:=0;
ProgressBar1.Width :=WizardForm.ProgressGauge.Width;
ProgressBar1.Height := WizardForm.ProgressGauge.Height;
ProgressBar1.Parent := WizardForm.InstallingPage;
ProgressBar1.Max:=4;
end;


ExtractTemporaryFile('logo.bmp');
LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := WizardForm;
Left := ScaleX(10);
Top := ScaleY(318);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));

end;
end;


Procedure CurPageChanged1(CurPageID: Integer);
Begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;

begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;end;
end;
//=======================================Конец разметка формы=======================================

function NextButtonClick1(CurPageID: Integer): Boolean;
var
i,j: integer;
s,c: string;

begin
Result := True;
if CurPageID = wpSelectDir then
begin
c := 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
for i:=1 to length(WizardForm.DirEdit.text) do
for j:=1 to length(c) do
begin
if WizardForm.DirEdit.text[i] = c[j] then //{app} Содержит русские символы
begin
s := ExpandConstant('{cm:ru1}')+#13#13+ExpandConstant('{cm:ru2}');
MsgBox(s, mbError, mb_Ok);
Result := False ; //Запрет перехода на следующую страницу
exit;
end
else Result := True; //Разрешаем переход на следующую страницу
end;
end;
end;
// --- Конец скрипта ------------------------------------------------------------
function InitializeSetup(): Boolean;
begin
Result := InitializeSetup1(); if not Result then exit;
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup1();
end;

procedure InitializeWizard();
begin
//=================================================Начало папки=======================================
ExtractTemporaryFile('DirBitmap.bmp');
ExtractTemporaryFile('GroupBitmap.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;

WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\GroupBitmap.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
//===================================Конец папки=====================

/////////////////////////////////////Чёрный инсталятор///////////////////////////////////////////////////
#ifdef colour
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.WelcomeLabel1.Font.Color:=clWhite;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clWhite;
end;
#endif
//////////////////////////////////////////////Конец чёрный инсталятор///////////////////////////////////////////////////////////////

InitializeWizard1();

end;


procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);

end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := NextButtonClick1(CurPageID); if not Result then exit;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin

end;




© OSzone.net 2001-2012