Имя пользователя:
Пароль:
 | Правила  

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

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

Аватара для 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] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



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

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

Отправлено: 11:48, 10-03-2014

 

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


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

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


ROMKA-1977, при неправильном пути DirTreeView ничего не отображает. (в основе пример saurn,).
Скрытый текст
Код: Выделить весь код
#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[code_]
/////////////////////////////////////////////////////////
#define A = (Defined UNICODE) ? "W" : "A"
/////////////////////////////////////////////////////////
const
    DRIVE_CDROM = 5;
/////////////////////////////////////////////////////////
function GetDriveType( lpRootPathName: String ): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';
/////////////////////////////////////////////////////////

var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;
  DEdit: boolean;

procedure DirTreeViewChange(Sender: TObject);
begin
if DEdit then
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then
  EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}' else
  EditTreeView.Text := DirTreeView.Directory;
end;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1: EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));

    2: begin
          DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3: if EditTreeView.Text <> WizardForm.DirEdit.Text then
    /////////////////////////////////////////////////////////////////
         if GetDriveType( AddBackslash( ExtractFileDrive( EditTreeView.Text ) ) ) <> DRIVE_CDROM then
    /////////////////////////////////////////////////////////////////
           WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4: EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5: begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6: if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseA(Sender: TObject);
begin
  DEdit:= True;
end;

procedure BrowseC(Sender: TObject; var action: TCloseAction);
begin
  DEdit:= False;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;
    OnActivate:= @BrowseA;
    OnClose:= @BrowseC;
    
    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := WizardForm.DirEdit.Text;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    if GetDriveType( AddBackslash( ExtractFileDrive( WizardForm.DirEdit.Text ) ) ) <> DRIVE_CDROM then
    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
   OldEvent_NoIconsCheckClick(Sender);
   GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;
end;

Отправлено: 11:47, 20-01-2015 | #2351



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

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


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

Ветеран


Contributor


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

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


Цитата ROMKA-1977:
а возможен ли вариант полностью удалить отображение CD-ROM из DirTreeView? »
ROMKA-1977, можно только на Unicode-компиляторе, ибо придется работать с интерфейсом IFolderFilterSite для функции SHBrowseForFolder.
Цитата nik1967:
как вариант, при выборе CD-ROM'а сделать неактивной нужную кнопку. »
ROMKA-1977, например, этой кнопкой может быть кнопка OK диалога.
Скрытый текст

Код: Выделить весь код
[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
    COINIT_APARTMENTTHREADED  = $2;
    MAX_PATH = 260;
    BIF_RETURNONLYFSDIRS = $1;
    BIF_DONTGOBELOWDOMAIN = $2;
    BIF_NEWDIALOGSTYLE = $40;
    BIF_UAHINT = $0100;
    BFFM_INITIALIZED = $1;
    BFFM_SELCHANGED = $2;
    WM_USER = $0400;
    BFFM_ENABLEOK = (WM_USER + 101);
    BFFM_SETSELECTION = (WM_USER + 102);
    DRIVE_REMOVABLE = 2;
    DRIVE_FIXED = 3;
    DRIVE_RAMDISK = 6;
    
type
    BROWSEINFO = record
        hwndOwner: HWND;
        pidlRoot: Longint;
        pszDisplayName: String;
        lpszTitle: String;
        ulFlags: UINT;
        lpfn: Longint;
        lParam: Longint;
        iImage: Integer;
    end;

function CoInitializeEx(pvReserved: Longint; dwCoInit: DWORD): Longint; external 'CoInitializeEx@ole32.dll stdcall';
procedure CoUninitialize; external 'CoUninitialize@ole32.dll stdcall';
function SHBrowseForFolder(lpbi: BROWSEINFO): Longint; external 'SHBrowseForFolder{#A}@shell32.dll stdcall';
function SHGetPathFromIDList(pidl: Longint; pszPath: String): BOOL; external 'SHGetPathFromIDList{#A}@shell32.dll stdcall';
function GetDriveType(lpRootPathName: String): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';

var
    AButton: TButton;
    AEdit: TEdit;

//////////////////////////////////////////////////////////////////////////////////////
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam, lpData: Longint): Integer;
var
    szDrive: String;
begin
    case uMsg of
        BFFM_INITIALIZED: SendMessage(hwnd, BFFM_SETSELECTION, 1, lpData);
        BFFM_SELCHANGED:
            begin
                SendMessage(hwnd, BFFM_ENABLEOK, 0, 0);
                szDrive := StringOfChar(#0, MAX_PATH);
                if SHGetPathFromIDList(lParam, szDrive) then
                begin
                    szDrive := AddBackslash(ExtractFileDrive(Trim(szDrive)));
                    case GetDriveType(szDrive) of
                        DRIVE_REMOVABLE,
                        DRIVE_FIXED,
                        DRIVE_RAMDISK: SendMessage(hwnd, BFFM_ENABLEOK, 0, 1);
                    end;
                end;
            end;
    end;
    Result := 0;
end;

//////////////////////////////////////////
procedure AButtonOnClick(Sender: TObject);
var
    bi: BROWSEINFO;
    szSel: AnsiString;
    pidl: Longint;
begin
    { fill BROWSEINFO struct }
    bi.pszDisplayName := StringOfChar(#0, MAX_PATH);
    bi.lpszTitle := SetupMessage(msgBrowseDialogLabel);
    bi.ulFlags := BIF_RETURNONLYFSDIRS or BIF_DONTGOBELOWDOMAIN or BIF_NEWDIALOGSTYLE or BIF_UAHINT;
    szSel := AEdit.Text;
    if (szSel <> '') then
    #ifdef UNICODE
        bi.lParam := CastAnsiStringToInteger(szSel);
    #else
        bi.lParam := CastStringToInteger(szSel);
    #endif
    bi.lpfn := CallbackAddr('BrowseCallbackProc');

    { browse }
    try
        if CoInitializeEx(0, COINIT_APARTMENTTHREADED) = 0 then Exit;
        pidl := SHBrowseForFolder(bi);
        if (pidl <> 0) then
        begin
            if SHGetPathFromIDList(pidl, bi.pszDisplayName) then
                AEdit.Text := Trim(bi.pszDisplayName);
        end;
    finally
        CoUninitialize;
    end;
end;

///////////////////////////
procedure InitializeWizard;
begin
    WizardForm.OuterNotebook.Hide;
    
    { AButton }
    AButton := TButton.Create(WizardForm);
    with AButton do
    begin
        Parent := WizardForm;
        Left := Parent.ClientWidth - Width;
        Caption := SetupMessage(msgButtonWizardBrowse);
        OnClick := @AButtonOnClick;
    end;

    { AEdit }
    AEdit := TEdit.Create(WizardForm);
    with AEdit do
    begin
        Parent := WizardForm;
        Top := Top + (AButton.Height - Height) div 2;
        Width := AButton.Left;
    end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:46, 20-01-2015 | #2352


Аватара для ROMKA-1977

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


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

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


Цитата saurn:
Тем же способом можете выводить сообщение, если выбран CD-ROM, типа "установка на выбранный диск невозможна" »
Ели вы про MsgBox то подскажите как правильно его в данном случае применить (с MsgBox опыта у меня мало) например вывод сообщения при на жатии на кнопку "OK".

Отправлено: 15:06, 20-01-2015 | #2353


Аватара для nik1967

Старожил


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

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


ROMKA-1977,
как вариант.
Код: Выделить весь код
[Setup]
AppName=Game
AppVersion=Game_v1
DefaultDirName=D:\Games
OutputDir=.

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
  DRIVE_CDROM = 5;
var
	AboutButton: TButton;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';

function CDROM(Drive: String): Boolean;
begin
  Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
  Path: String;
begin 
	Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
	WizardForm.NextButton.Enabled:= not CDROM(Path);
	AboutButton.Enabled:= not CDROM(Path);
		if CDROM(Path) then MsgBox('Установка на выбранный диск невозможна!', mbError, MB_OK);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
	case CurPageID of
		wpSelectDir: 
		begin
			GetDrive(nil);
			WizardForm.DirEdit.OnChange:= @GetDrive;
		end;
	end;
end;

procedure AboutButtonClick(Sender: TObject);
begin
	MsgBox('Это очень замечательная игра!', mbInformation, MB_OK);
end;

procedure InitializeWizard;
begin
	AboutButton:= TButton.Create(WizardForm);
	with AboutButton do begin
		SetBounds(ScaleX(10), WizardForm.NextButton.Top, WizardForm.NextButton.Width, WizardForm.NextButton.Height);
		Caption:= 'О релизе';
		OnClick:= @AboutButtonClick;
		Parent:= WizardForm;	
	end;
end;

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".

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

Отправлено: 16:47, 20-01-2015 | #2354


Аватара для ROMKA-1977

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


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

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


Подскажите:
в выше описанный мною код по вашим совтам прописол код сообщения "установка на выбранный диск невозможна" с блокировкой кнопки "Далее". Получилось так:
читать дальше »

Код: Выделить весь код
#define Name "Test" 

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[Code_]
#define A = (Defined UNICODE) ? "W" : "A"

const
  DRIVE_CDROM = 5;

var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton; 
  OldEvent_NoIconsCheckClick: TNotifyEvent;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';

function CDROM(Drive: String): Boolean;
begin
  Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
  Path: String;
begin 
	Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
	WizardForm.NextButton.Enabled:= not CDROM(Path);
		if CDROM(Path) then MsgBox('Установка на выбранный диск невозможна!', mbError, MB_OK);
end;

procedure DirTreeViewChange(Sender: TObject);
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then
  EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}' else
  EditTreeView.Text := DirTreeView.Directory;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1: EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));

    2: begin
          DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3: if EditTreeView.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4: EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5: begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6: if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
   OldEvent_NoIconsCheckClick(Sender);
   GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;

end;

procedure CurPageChanged(CurPageID: Integer);
begin
    case CurPageID of
       wpSelectDir: 
       begin
          GetDrive(nil);
          WizardForm.DirEdit.OnChange:= @GetDrive;
       end;
   end;
end;

Проблема: если ошибочно выбрать путь установки DVD ROM и нажать на кнопку "OK" всплывает окно с сообщением "установка на выбранный диск невозможна" после закрытия которого окно выбора директории закрывается. Возможно ли сделать так чтобы после закрытия окна с сообщением окно выбора директории не закрывалось.

Отправлено: 13:09, 21-01-2015 | #2355


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


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

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


Изображения
Тип файла: jpg 2015-01-22 13-34-54 Ошибка компиляции.jpg
(149.0 Kb, 13 просмотров)

Здраствуйте , в чем может быть проблема?
http://forum.oszone.net/attachment.p...1&d=1421926584

Отправлено: 14:36, 22-01-2015 | #2356


Аватара для kotyarko@fb

Старожил


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

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


Цитата Юрій_Окропірідзе@vk:
Здраствуйте , в чем может быть проблема? »
Когда вы создаёте кастомную кнопку, к ней нужно обращаться не через её родителя WizardForm, как к родным кнопкам, а напрямую.
Код: Выделить весь код
hNewBtnClick: Btn := NewButton1;

-------
http://forum.worldoftanks.ru/topic/1429925-/
Исходник моего установщика: https://bitbucket.org/Kotyarko_O/kmp


Отправлено: 14:52, 22-01-2015 | #2357


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


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

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


Цитата kotyarko@fb:
Когда вы создаёте кастомную кнопку, к ней нужно обращаться не через её родителя WizardForm, как к родным кнопкам, а напрямую.
Код: Выделить весь код
hNewBtnClick: Btn := NewButton1; »
Спасибо . Еще вопрос , можна как то что б при нажатии на кнопку , вместо окна з информацией открывалася картинка ?

Отправлено: 15:50, 22-01-2015 | #2358


Аватара для kotyarko@fb

Старожил


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

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


Цитата Юрій_Окропірідзе@vk:
Еще вопрос , можна как то что б при нажатии на кнопку , вместо окна з информацией открывалася картинка ? »
Можно. Через BtnSetEvent выполнять функцию\процедуру, в которой создаётся форма для изображения и само изображение на этой форме.

-------
http://forum.worldoftanks.ru/topic/1429925-/
Исходник моего установщика: https://bitbucket.org/Kotyarko_O/kmp


Отправлено: 16:17, 22-01-2015 | #2359


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


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

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


Цитата kotyarko@fb:
Можно. Через BtnSetEvent выполнять функцию\процедуру, в которой создаётся форма для изображения и само изображение на этой форме. »
BtnSetEvent(INFbtn,BtnClickEventID,WrapBtnCallback(@LogoClick,4));
BtnSetEvent(INFBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(INFBtn,GetSysCursorHandle(32649));
ето вот ета форма?

Отправлено: 18:12, 22-01-2015 | #2360



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты 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




 
Переход