Thema: Delphi ShellTreeView FILTER ?!

Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: ShellTreeView FILTER ?!

  Alt 6. Okt 2007, 08:18
Moin Tommy,

wie sieht denn dein Filter aus? Der Code ist soweit ganz in Ordnung, allerdings behandelt er nur einen Spezialfall (einzelne Maske, match nur für extension, kein wildchar in ext erlaubt). Denke daran, dass ZIP-Dateien wie Folder behandelt werden.

Wenn du so weitermachen willst, dann ersetze "CompareText() = 0" noch durch "SameText()" - zu den originellen Komponentenbezeichnern schreibe ich jetzt mal nichts.

Hier eine universelle Lösung:

Delphi-Quellcode:
const
  shlwapi = 'SHLWAPI.DLL';

function PathMatchSpec(pszFileParam, pszSpec: PAnsiChar): BOOL;
    stdcall external shlwapi name 'PathMatchSpecA';

function PathMatchSpecs(const fn: TFileName; const mask: string): Boolean;
var
  s: TStrings;
  ok: Boolean;
  i: Integer;
begin
  ok := False;
  with TStringList.Create do
  try
    Delimiter := ';';
    DelimitedText := mask;
    for i := 0 to Pred(Count) do
    begin
      ok := ok or PathMatchSpec(PChar(fn), PChar(Strings[i]));
      if ok then
        Break;
    end;
  finally
    Free;
  end;
  Result := ok;
end;

procedure TDemoForm.ShellTreeViewAddFolder(Sender: TObject;
  AFolder: TShellFolder; var CanAdd: Boolean);
begin
  CanAdd := AFolder.IsFolder or PathMatchSpecs(AFolder.DisplayName, FilterComboBox.Mask);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat