📄 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 call 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;
Edit2: TEdit;
Bevel1: TBevel;
Edit1: TEdit;
Label3: TLabel;
BrowseForComboBox: TComboBox;
Label4: TLabel;
CheckListBox2: TCheckListBox;
Label5: TLabel;
PIDLLabel: TLabel;
Bevel2: TBevel;
VersionLabel: TLabel;
TestXPFilter: TCheckBox;
CheckListBox3: TCheckListBox;
procedure ExecuteClick(Sender: TObject);
procedure SetProperties;
procedure ShowFolder;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ExecutePIDLClick(Sender: TObject);
procedure PBFolderDialog1XPIncludeItem(Sender: TPBFolderDialog; DialogHandle: HWND;
const ShellFolder : IShellFolder; const ParentPIDL, ItemPIDL: PItemIDList; const Folder : String;
const Attr : TFolderAttributeSet; var IncludeItem : Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
PBFolderDialogDemoForm: TPBFolderDialogDemoForm;
PIDL : PItemIDList = nil;
implementation
{$R *.DFM}
procedure TPBFolderDialogDemoForm.FormCreate(Sender: TObject);
var
t : integer;
OSVersionInfo : TOSVersionInfo;
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;
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;
ZeroMemory(@OSVersionInfo, SizeOf(TOSVersionInfo));
OSVersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(OSVersionInfo) and (((OSVersionInfo.dwMajorVersion = 5) and (OSVersionInfo.dwMinorVersion >= 1))
or (OSVersionInfo.dwMajorVersion > 5)) then TestXPFilter.Enabled := True;
VersionLabel.Caption := '(Built using PBFolderDialog version: '
+ PBFolderDialog1.Version + ' - licensed)';
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;
var
t : integer;
begin
// Display the result !
FolderComboBox.Text := PBFolderDialog1.Folder;
Edit2.Text := PBFolderDialog1.DisplayName;
for t := 0 to CheckListBox3.Items.Count - 1 do
begin
CheckListBox3.Checked[t] := (TFolderAttributes(t) in PBFolderDialog1.FolderAttributes);
end;
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 PBFolderDialog1.Execute(PIDL, True) then ShowFolder;
// Note: if user cancels, PIDL is not freed (still valid).
end;
procedure TPBFolderDialogDemoForm.PBFolderDialog1XPIncludeItem(
Sender: TPBFolderDialog; DialogHandle: HWND; const ShellFolder : IShellFolder;
const ParentPIDL, ItemPIDL: PItemIDList; const Folder : String; const Attr : TFolderAttributeSet;
var IncludeItem : Boolean);
begin
if not TestXPFilter.Checked then Exit;
if (atRemovable in Attr) or (atHidden in Attr) then IncludeItem := False;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -