⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pbfolderdialogdemo_unit.pas

📁 wil编辑器所需控件,传奇wil文件查看编辑器所用到的另一个重要控件,也是在外国站上下的
💻 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 + -