📄 pbfolderdialogdemo_unit.pas
字号:
unit PBFolderDialogDemo_Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, PBFolderDialog, CheckLst, ExtCtrls,
PBShellFolders; // Only necessary if you directly calls functions
// like BuildShellFolderPath.
type
TPBFolderDialogDemoForm = class(TForm)
Execute: TButton;
Label1: TLabel;
PBFolderDialog1: TPBFolderDialog;
ExecutePIDL: TButton;
FolderComboBox: TComboBox;
GroupBox1: TGroupBox;
Label9: TLabel;
Label10: TLabel;
RootComboBox: TComboBox;
CheckListBox1: TCheckListBox;
GroupBox2: TGroupBox;
Label2: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit2: TEdit;
Edit4: TEdit;
Bevel1: TBevel;
Edit1: TEdit;
Label3: TLabel;
BrowseForComboBox: TComboBox;
Label4: TLabel;
CheckListBox2: TCheckListBox;
Label5: TLabel;
PIDLLabel: TLabel;
Bevel2: TBevel;
VersionLabel: TLabel;
procedure ExecuteClick(Sender: TObject);
procedure SetProperties;
procedure ShowFolder;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ExecutePIDLClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
PBFolderDialogDemoForm: TPBFolderDialogDemoForm;
PIDL : PItemIDList = nil;
implementation
{$R *.DFM}
procedure TPBFolderDialogDemoForm.FormCreate(Sender: TObject);
var
t : integer;
begin
for t := CSIDL_TEMP to MAX_SHELLFOLDERNAMES
do if ShellFolderNames[t] <> '%%'
then FolderComboBox.Items.Add(ShellFolderNames[t]);
// First get the properties from PBFolderDialog1 !
FolderComboBox.Text := PBFolderDialog1.Folder;
RootComboBox.Items.Assign(FolderComboBox.Items);
RootComboBox.Text := PBFolderDialog1.RootFolder;
BrowseForComboBox.ItemIndex := Ord(PBFolderDialog1.BrowseFor);
Edit2.Text := PBFolderDialog1.DisplayName;
Edit4.Text := '0';
for t := 0 to CheckListBox1.Items.Count - 1 do
begin
CheckListBox1.Checked[t] := (TBrowseInfoFlags(t) in PBFolderDialog1.Flags);
end;
for t := 0 to CheckListBox2.Items.Count - 1 do
begin
CheckListBox2.Checked[t] := (TExtraFlags(t) in PBFolderDialog1.ExtraFlags);
end;
VersionLabel.Caption := '(Build with PBFolderDialog version: '
+ PBFolderDialog1.Version + ')';
end;
procedure TPBFolderDialogDemoForm.FormDestroy(Sender: TObject);
begin
FreeItemIDList(PIDL);
end;
procedure TPBFolderDialogDemoForm.SetProperties;
var
t : integer;
begin
// Copy from the form's controls to PBFolderDialog1's properties.
PBFolderDialog1.Folder := FolderComboBox.Text;
PBFolderDialog1.RootFolder := RootComboBox.Text;
PBFolderDialog1.BrowseFor := TBrowseFor(BrowseForComboBox.ItemIndex);
PBFolderDialog1.Flags := [];
for t := 0 to CheckListBox1.Items.Count - 1
do if CheckListBox1.Checked[t]
then PBFolderDialog1.Flags := PBFolderDialog1.Flags
+ [TBrowseInfoFlags(t)];
PBFolderDialog1.ExtraFlags := [];
for t := 0 to CheckListBox2.Items.Count - 1
do if CheckListBox2.Checked[t]
then PBFolderDialog1.ExtraFlags := PBFolderDialog1.ExtraFlags
+ [TExtraFlags(t)];
end;
procedure TPBFolderDialogDemoForm.ShowFolder;
begin
// Display the result !
FolderComboBox.Text := PBFolderDialog1.Folder;
Edit2.Text := PBFolderDialog1.DisplayName;
Edit4.Text := IntToStr(PBFolderDialog1.FolderAttributes);
Edit1.Text := BuildShellFolderPath(PBFolderDialog1.Folder);
if PIDL = nil then PIDLLabel.Caption := 'PIDL = (nil)'
else PIDLLabel.Caption := 'PIDL = (value)';
end;
procedure TPBFolderDialogDemoForm.ExecuteClick(Sender: TObject);
begin
SetProperties;
if PBFolderDialog1.Execute then ShowFolder;
end;
procedure TPBFolderDialogDemoForm.ExecutePIDLClick(Sender: TObject);
begin
SetProperties;
if PIDL = nil then PIDL := ExpandShellFolderPIDL(PBFolderDialog1.Folder, True);
if PBFolderDialog1.Execute(PIDL, True) then ShowFolder;
// Note: if user cancels, PIDL is not freed (still valid).
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -