PDA

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


Страниц : 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

ShadeUa
18-01-2015, 23:57
на кнопку, на форму, картинку. удачи »
Спасибо , вот какраз удача не улыбнулась. Тут какая то ошибка , я думал его нужно обьявить , но я незнаю пока как , с етим у меня проблемы http://forum.oszone.net/attachment.php?attachmentid=121197&stc=1&d=1421614575

sergey3695
19-01-2015, 11:20
ShadeUa, botva2.iss подключи.

ShadeUa
19-01-2015, 11:49
botva2.iss подключи. »
Вроде , да

#define MyAppName "Test"
#define MyAppVerName "Test"
#define MyDefaultDirName "Test"
#define MyDefaultGroupName "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyDefaultDirName}
DefaultGroupName={#MyDefaultGroupName}
OutputBaseFilename=Setup
AllowNoIcons=true
ShowTasksTreeLines=true
[files]
Source: 1.png; DestDir: {tmp}; Flags: dontcopy
Source: botva2.dll; DestDir: {tmp}; Flags: dontcopy
Source: botva2.iss; DestDir: {tmp}; Flags: dontcopy

[code]
(*var
CreateFormFromImage : *)
#include "botva2.iss"
function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\1.png')) then ExtractTemporaryFile('1.png');
Result:=True;
end;

#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

const
GWL_WNDPROC = -4;
WM_NCLBUTTONDOWN = $00A1;
type
LPARAM = Integer;
WPARAM = Integer;
LRESULT = Integer;
TFNWndProc = Integer;
var
OldWindowProc: Longint;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';

function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
case Msg of
WM_NCLBUTTONDOWN:
begin
Msg := 0;
WizardForm.Close;
end;
end;
Result := CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam);
end;

procedure CloseForm(Sender: TObject);
begin
WizardForm.Close;
end;

procedure InitializeWizard;
begin
CreateFormFromImage(wizardform.Handle,ExpandConstant('{tmp}\1.png'));
ImgApplyChanges(WizardForm.Handle);
OldWindowProc := SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('WindowProc'));
end;

procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldWindowProc);
gdipShutdown;
end;

sergey3695
19-01-2015, 14:40
Source: botva2.iss; DestDir: {tmp}; Flags: dontcopy »
Зачем? Открой botva2.iss и почитай что там. Это не полностью готовый пример а лишь главный кусок решения. Я думал ты разбираешься хоть малость.

ROMKA-1977
19-01-2015, 22:45
Подскажите пож. в чём может бать проблема:
В код инсталятора на SelectDirPage прописана кастомная кнопка "Обзор", работает отлично но если ошибочно выбрать путь установки DVD ROM и далее повторно нажать на "Обзор" всплывает сообщение "Вставьте диск в устройство "DVD RW" которого при стандартной кнопке нет. Как отключить это сообщение?


#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_]
var
BrowseForm: TSetupForm;
BrowseForm2: TSetupForm;
DirTreeView: TFolderTreeView;
DirFolderTreeView: TStartMenuFolderTreeView;
EditTreeView: TNewEdit;
EditFolderTreeView: TNewEdit;
DB_Button: TNewButton;
GB_Button: TNewButton;
OldEvent_NoIconsCheckClick: TNotifyEvent;

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('{userst artup}'),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;

sergey3695
19-01-2015, 23:03
ROMKA-1977, так и должно быть. при стандартной также.

saurn
19-01-2015, 23:16
Как отключить это сообщение? »
Можно указать инсталу не реагировать, если выбран CD-ROM, как вариант.
#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;

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
/////////////////////////////////////////////////////////////////
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 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('{userst artup}'),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;


Тем же способом можете выводить сообщение, если выбран CD-ROM, типа "установка на выбранный диск невозможна" и т.д.

ROMKA-1977
19-01-2015, 23:29
Можно указать инсталу не реагировать, если выбран CD-ROM »
а возможен ли вариант полностью удалить отображение CD-ROM из DirTreeView?

saurn
19-01-2015, 23:37
возможен ли вариант полностью удалить отображение CD-ROM из DirTreeView »
Нет.

nik1967
20-01-2015, 11:00
ROMKA-1977, можешь ещё, как вариант, при выборе CD-ROM'а сделать неактивной нужную кнопку.
Вариант с nextbutton (http://forum.ru-board.com/topic.cgi?forum=5&topic=46338&start=1214&limit=1&m=1#1)

sergey3695
20-01-2015, 11:47
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('{userst artup}'),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;

El Sanchez
20-01-2015, 13:46
а возможен ли вариант полностью удалить отображение CD-ROM из DirTreeView? »
ROMKA-1977, можно только на Unicode-компиляторе, ибо придется работать с интерфейсом IFolderFilterSite для функции SHBrowseForFolder.
как вариант, при выборе 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;

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

nik1967
20-01-2015, 16:47
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;

ROMKA-1977
21-01-2015, 13:09
Подскажите:
в выше описанный мною код по вашим совтам прописол код сообщения "установка на выбранный диск невозможна" с блокировкой кнопки "Далее". Получилось так:


#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('{userst artup}'),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" всплывает окно с сообщением "установка на выбранный диск невозможна" после закрытия которого окно выбора директории закрывается. Возможно ли сделать так чтобы после закрытия окна с сообщением окно выбора директории не закрывалось.

Юрій_Окропірідзе@vk
22-01-2015, 14:36
Здраствуйте , в чем может быть проблема?
http://forum.oszone.net/attachment.php?attachmentid=121328&stc=1&d=1421926584

kotyarko@fb
22-01-2015, 14:52
Здраствуйте , в чем может быть проблема? »
Когда вы создаёте кастомную кнопку, к ней нужно обращаться не через её родителя WizardForm, как к родным кнопкам, а напрямую.
hNewBtnClick: Btn := NewButton1;

Юрій_Окропірідзе@vk
22-01-2015, 15:50
Когда вы создаёте кастомную кнопку, к ней нужно обращаться не через её родителя WizardForm, как к родным кнопкам, а напрямую.
Код: Выделить весь код
hNewBtnClick: Btn := NewButton1; »
Спасибо . Еще вопрос , можна как то что б при нажатии на кнопку , вместо окна з информацией открывалася картинка ?

kotyarko@fb
22-01-2015, 16:17
Еще вопрос , можна как то что б при нажатии на кнопку , вместо окна з информацией открывалася картинка ? »
Можно. Через BtnSetEvent выполнять функцию\процедуру, в которой создаётся форма для изображения и само изображение на этой форме.

Юрій_Окропірідзе@vk
22-01-2015, 18:12
Можно. Через BtnSetEvent выполнять функцию\процедуру, в которой создаётся форма для изображения и само изображение на этой форме. »
BtnSetEvent(INFbtn,BtnClickEventID,WrapBtnCallback(@LogoClick,4));
BtnSetEvent(INFBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(INFBtn,GetSysCursorHandle(32649));
ето вот ета форма?




© OSzone.net 2001-2012