FireMonkey フレームワークには、ファイル ツリー コンポーネント (もちろんクロスプラットフォーム) が見つかりませんでした。誰でもそのようなコンポーネントについて何か考えがあるか、知っていますか? 私には基本的なことのように聞こえます。
シンプルな「エクスプローラーのような」ツリービューを探していますが、スタイルを変更したり、継承して変更したりできるので、本当にきれいかどうかはあまり重要ではありません。アイデア?...
FireMonkey フレームワークには、ファイル ツリー コンポーネント (もちろんクロスプラットフォーム) が見つかりませんでした。誰でもそのようなコンポーネントについて何か考えがあるか、知っていますか? 私には基本的なことのように聞こえます。
シンプルな「エクスプローラーのような」ツリービューを探していますが、スタイルを変更したり、継承して変更したりできるので、本当にきれいかどうかはあまり重要ではありません。アイデア?...
(すぐに使える)コンポーネントはありませんが、すべてのプラットフォームで動作する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 を使用して、おそらく役立つ別のレコードを示しました...