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.
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!