TTMSFMXDirectoryTreeView

Hi,

I use a TTMSFMXDirectoryTreeView to images images from a folder...

There is a way to display the loaded image instead of the default icon?

Thank you!

Here is a complete sample on how to achieve that.




unit Unit36;


interface


uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.TMSBaseControl, FMX.TMSTreeViewBase, FMX.TMSTreeViewData,
  FMX.TMSCustomTreeView, FMX.TMSTreeView, FMX.TMSDirectoryTreeView, Generics.Collections;


type
  TForm36 = class(TForm)
    TMSFMXDirectoryTreeView1: TTMSFMXDirectoryTreeView;
    procedure FormCreate(Sender: TObject);
    procedure TMSFMXDirectoryTreeView1GetNodeIcon(Sender: TObject;
      ANode: TTMSFMXTreeViewVirtualNode; AColumn: Integer; ALarge: Boolean;
      var AIcon: TBitmap);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    FImages: TObjectList<TBitmap>;
    FImagesFiles: TStringList;
  public
    { Public declarations }
  end;


var
  Form36: TForm36;


implementation


{$R *.fmx}


uses
  FMX.TMSUtils;


procedure TForm36.FormCreate(Sender: TObject);
begin
  FImages := TObjectList<TBitmap>.Create;
  FImagesFiles := TStringList.Create;
  TMSFMXDirectoryTreeView1.LoadDrives;
end;


procedure TForm36.FormDestroy(Sender: TObject);
begin
  FImages.Free;
  FImagesFiles.Free;
end;


procedure TForm36.TMSFMXDirectoryTreeView1GetNodeIcon(Sender: TObject;
  ANode: TTMSFMXTreeViewVirtualNode; AColumn: Integer; ALarge: Boolean;
  var AIcon: TBitmap);
var
  n: TTMSFMXDirectoryTreeViewNode;
  bmp, bmpdraw: TBitmap;
begin
  if (ANode.Node is TTMSFMXDirectoryTreeViewNode) then
  begin
    n := ANode.Node as TTMSFMXDirectoryTreeViewNode;
    if TTMSFMXUtils.IndexOfTextInArray(ExtractFileExt(LowerCase(n.FileName)), ['.jpg', '.jpeg', '.png', '.gif', '.bmp']) > -1 then
    begin
      if FImagesFiles.IndexOf(n.FileName) > -1 then
      begin
        AIcon := FImages[FImagesFiles.IndexOf(n.FileName)];
        Exit;
      end;


      bmp := TBitmap.Create;
      bmpdraw := TBitmap.Create(24, 24);
      try
        bmp.LoadFromFile(n.FileName);
        bmpdraw.Canvas.BeginScene;
        bmpdraw.Canvas.DrawBitmap(bmp, RectF(0, 0, bmp.Width, bmp.Height), RectF(0, 0, 24, 24), 1);
        bmpdraw.Canvas.EndScene;
      finally
        bmp.Free;
        FImages.Add(bmpdraw);
        FImagesFiles.Add(n.FileName);
        AIcon := bmpdraw;
      end;
    end;
  end;
end;


end.



Thank you!
Hi again,

The supported platform for TTMSFMXDirectoryTreeView is Windows and Mac, but i tested on iOS and Android.

On iOS is working, only the filename didn't load (but the image is loading with no problem)

On Android not working at all.

I want to ask if you have a different control who can be used as file explorer but on all 4 platform, or can be upgraded this tool to work ?

Thank you!

Hi, This is unfortunately not possible due to security restrictions (iOS sandbox, as well as shortcomings on retrieving file information). We'll add this on our feature request list for investigation.

Ok, thank you!