Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 6]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


Цитата ispolin:
напишите плиз как нужно-правильно »
Код: Выделить весь код
[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;

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:32, 05-12-2013 | #1611



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ispolin

Ветеран


Автор проектов


Сообщения: 532
Благодарности: 85

Профиль | Отправить PM | Цитировать


Nordek,

-------


Отправлено: 17:57, 05-12-2013 | #1612


SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


ispolin, А зачем ты закомментировал procedure InitializeWizard();? У тебя InitializeWizard не один?
Вставил то правильно?

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Отправлено: 18:29, 05-12-2013 | #1613


Аватара для ispolin

Ветеран


Автор проектов


Сообщения: 532
Благодарности: 85

Профиль | Отправить PM | Цитировать


Цитата Nordek:
У тебя 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;

-------


Отправлено: 18:53, 05-12-2013 | #1614


SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


Цитата ispolin:
да не один »
Так нужно было завести за энд,
а
Код: Выделить весь код
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;

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Последний раз редактировалось Nordek, 05-12-2013 в 19:25.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:59, 05-12-2013 | #1615


Пользователь


Сообщения: 149
Благодарности: 38

Профиль | Отправить PM | Цитировать


Цитата ispolin:
да не один »
Должен быть один)
читать дальше »

[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;
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:00, 05-12-2013 | #1616


Аватара для ispolin

Ветеран


Автор проектов


Сообщения: 532
Благодарности: 85

Профиль | Отправить PM | Цитировать


Благодарю всех за помощь, одолели мы проблему!

-------


Отправлено: 19:13, 05-12-2013 | #1617


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:44, 05-12-2013 | #1618


SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


Shkutu
Цитата Shkutu:
Должен быть один) »
Он тебе ничего не должен.
Код: Выделить весь код
//Пример событий имеющие дубликацию
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;

Отправлено: 19:51, 05-12-2013 | #1619


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Когда выбираешь куда устанавливать файлы потом открывается сам список того что хочешь установить. Как сделать так чтобы когда наводишь на название какого-то файла выскакивала картинка? Говорю сразу я полный нуб в этом дела пожалуста сделайте хотябы для одного элемента плыз
читать дальше »

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

Отправлено: 20:15, 05-12-2013 | #1620



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход