📄 selfolderform.pas
字号:
unit SelFolderForm;
{
Inno Setup
Copyright (C) 1997-2004 Jordan Russell
Portions by Martijn Laan
For conditions of distribution and use, see LICENSE.TXT.
"Select Folder" form
$jrsoftware: issrc/Projects/SelFolderForm.pas,v 1.11 2004/07/02 23:04:44 jr Exp $
}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
SetupForm, StdCtrls, FolderTreeView, NewStaticText;
type
TSelectFolderForm = class(TSetupForm)
BrowseLabel: TNewStaticText;
PathEdit: TEdit;
NewFolderButton: TButton;
OKButton: TButton;
CancelButton: TButton;
procedure PathEditChange(Sender: TObject);
procedure NewFolderButtonClick(Sender: TObject);
private
{ Private declarations }
FFolderTreeView: TCustomFolderTreeView;
FNewFolderName: String;
FStartMenu, FAppendDir: Boolean;
procedure FolderTreeViewChange(Sender: TObject);
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
constructor Create2(AOwner: TComponent; AStartMenu: Boolean);
end;
function ShowSelectFolderDialog(const StartMenu, AppendDir: Boolean;
var Path: String; const NewFolderName: String): Boolean;
implementation
uses
PathFunc, Msgs, MsgIDs, Main, SetupTypes, Wizard;
{$R *.DFM}
function ShowSelectFolderDialog(const StartMenu, AppendDir: Boolean;
var Path: String; const NewFolderName: String): Boolean;
var
Form: TSelectFolderForm;
begin
Form := TSelectFolderForm.Create2(nil, StartMenu);
try
Form.FAppendDir := AppendDir;
Form.FNewFolderName := NewFolderName;
Form.NewFolderButton.Visible := not AppendDir and (NewFolderName <> '');
if StartMenu then begin
with Form.FFolderTreeView as TStartMenuFolderTreeView do
if IsNT then
SetPaths(GetRealShellFolder(False, sfPrograms, False),
GetRealShellFolder(True, sfPrograms, False),
GetRealShellFolder(False, sfStartup, False),
GetRealShellFolder(True, sfStartup, False))
else
SetPaths(GetRealShellFolder(False, sfPrograms, False),
'', GetRealShellFolder(False, sfStartup, False), '');
end;
Path := TrimRight(RemoveBackslashUnlessRoot(PathRemoveExtraBackslashes(Trim(Path))));
if AppendDir then begin
if PathExtractDir(Path) <> Path then
Form.FFolderTreeView.ChangeDirectory(PathExtractDir(Path), True);
end
else
Form.FFolderTreeView.ChangeDirectory(Path, True);
if StartMenu or (Form.FFolderTreeView.Directory <> '') then
Form.ActiveControl := Form.FFolderTreeView;
Form.PathEdit.Text := Path;
Result := (Form.ShowModal = mrOK);
if Result then
Path := Trim(Form.PathEdit.Text);
finally
Form.Free;
end;
end;
{ TSelectFolderForm }
constructor TSelectFolderForm.Create(AOwner: TComponent);
var
W: Integer;
begin
inherited;
if not FStartMenu then begin
FFolderTreeView := TFolderTreeView.Create(Self);
TFolderTreeView(FFolderTreeView).OnChange := FolderTreeViewChange;
TFolderTreeView(FFolderTreeView).OnRename := WizardForm.DirTreeRename;
end
else begin
FFolderTreeView := TStartMenuFolderTreeView.Create(Self);
TStartMenuFolderTreeView(FFolderTreeView).OnChange := FolderTreeViewChange;
TStartMenuFolderTreeView(FFolderTreeView).OnRename := WizardForm.GroupTreeRename;
end;
FFolderTreeView.SetBounds(16, 64, 317, 229);
FFolderTreeView.Visible := False;
FFolderTreeView.Parent := Self;
PathEdit.BringToFront; { for MSAA }
BrowseLabel.BringToFront; { for MSAA }
FFolderTreeView.TabOrder := 2;
FFolderTreeView.Visible := True;
InitializeFont;
CenterInsideControl(WizardForm, False);
Caption := SetupMessages[msgBrowseDialogTitle];
BrowseLabel.Caption := SetupMessages[msgBrowseDialogLabel];
NewFolderButton.Caption := SetupMessages[msgButtonNewFolder];
NewFolderButton.Width := CalculateButtonWidth([msgButtonNewFolder]);
W := CalculateButtonWidth([msgButtonOK, msgButtonCancel]);
CancelButton.Caption := SetupMessages[msgButtonCancel];
CancelButton.Left := CancelButton.Left + CancelButton.Width - W;
CancelButton.Width := W;
OKButton.Caption := SetupMessages[msgButtonOK];
OKButton.Left := CancelButton.Left - ScalePixelsX(6) - W;
OKButton.Width := W;
end;
constructor TSelectFolderForm.Create2(AOwner: TComponent; AStartMenu: Boolean);
begin
FStartMenu := AStartMenu;
Create(AOwner);
end;
procedure TSelectFolderForm.PathEditChange(Sender: TObject);
begin
OKButton.Enabled := (Trim(PathEdit.Text) <> '');
end;
procedure TSelectFolderForm.FolderTreeViewChange(Sender: TObject);
begin
if FAppendDir then
PathEdit.Text := AddBackslash(FFolderTreeView.Directory) + FNewFolderName
else
PathEdit.Text := FFolderTreeView.Directory;
NewFolderButton.Enabled := FStartMenu or (FFolderTreeView.Directory <> '');
end;
procedure TSelectFolderForm.NewFolderButtonClick(Sender: TObject);
begin
FFolderTreeView.CreateNewDirectory(FNewFolderName);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -