Любой компонент для отображения файловой системы / файлового дерева в FireMonkey? - PullRequest
3 голосов
/ 18 ноября 2011

Не удалось найти ни одного компонента файлового дерева (конечно, кроссплатформенного) в платформе FireMonkey. Кто-нибудь имеет какие-либо идеи или знает такой компонент? Для меня это звучит как обычная вещь.

Я ищу простое «похожее на проводник» древовидное представление, не очень важное, если оно действительно красивое, так как я, вероятно, могу изменить его стиль или унаследовать и изменить. Идеи? ...

1 Ответ

2 голосов
/ 13 марта 2012

Там нет компонента (из коробки), но вы можете быстро реализовать его, используя модуль System.IOUtils , который работает на всех платформах.

ДляНапример, чтобы дать вам представление:

uses
  System.IOUtils, FMX.TreeView, ...

type
  TForm2 = class(TForm)
    tvPath: TTreeView;
    procedure FormCreate(Sender: TObject);
  private
...

procedure TForm2.FormCreate(Sender: TObject);
var
  sRoot    : string;
  sdaDrives: TStringDynArray;
  sDrive   : string;
  tviDrive : TTreeViewItem;
  osv      : TOSVersion;
begin
  if TOSVersion.Platform = pfMacOS then
  begin
    // Root's folders
    sRoot     := '/';
    sdaDrives := TDirectory.GetDirectories(sRoot);
    for sDrive in sdaDrives do
    begin
      tviDrive      := TTreeViewItem.Create(Self);
      tviDrive.Text := sDrive;
      tvPath.AddObject(tviDrive);
    end;
    sdaDrives := TDirectory.GetFiles(sRoot);
  end
  else
  begin
    // Root's folders
    sRoot     := TDirectory.GetDirectoryRoot(ParamStr(0)); // you probably want to use TDirectory.GetLogicalDrives before this one...
    sdaDrives := TDirectory.GetDirectories(sRoot);
    for sDrive in sdaDrives do
    begin
      tviDrive      := TTreeViewItem.Create(Self);
      tviDrive.Text := sDrive;
      tvPath.AddObject(tviDrive);
    end;
    sdaDrives := TDirectory.GetFiles(sRoot);
  end;
  // files
  for sDrive in sdaDrives do
  begin
    tviDrive            := TTreeViewItem.Create(Self);
    tviDrive.Text       := ExtractFileName(sDrive);
    tviDrive.Font.Style := [TFontStyle.fsItalic];
    tvPath.AddObject(tviDrive);
  end;
end;

Это всего лишь подтверждение концепции, поскольку она работает на обеих платформах ... конечно, еще есть над чем поработать ... Я использовал System.SysUtils.TOSVersion, чтобы показать вам еще одну запись, которая может быть также полезна ...

...