type
TAddItemEvent = procedure(Sender: TObject; const ABasePath: String;
const AFileInfo: TSearchRec; var CanAdd: Boolean) of object;
TCustomShellTreeView = class(TCustomTreeView)
private
...
FOnAddItem: TAddItemEvent;
protected
...
property OnAddItem: TAddItemEvent read FOnAddItem write FOnAddItem;
end;
TShellTreeView = class(TCustomShellTreeView)
...
published
property OnAddItem;
...
function TCustomShellTreeView.PopulateTreeNodeWithFiles(
ANode: TTreeNode; ANodePath: string): Boolean;
var
i: Integer;
Files: TStringList;
NewNode: TTreeNode;
canAdd: Boolean; // <<< new
...
begin
...
Files := TStringList.Create;
try
Files.OwnsObjects := True;
GetFilesInDir(ANodePath, AllFilesMask, FObjectTypes, Files, FFileSortType);
Result := Files.Count > 0;
for i := 0 to Files.Count - 1 do
begin
// <<<<<<<<< new from here....
canAdd := true;
if Assigned(FOnAddItem) then
with TFileItem(Files.Objects[i]) do
FOnAddItem(Self, FBasePath, FileInfo, canAdd);
if not canAdd then
Continue;
// ... to here >>>>>>>>>>>>>>
NewNode := Items.AddChildObject(ANode, Files.Strings[i], nil);
....