<pre class="brush: delphi">unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ShellApi, FileCtrl;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    FileListBox1: TFileListBox;
    DirectoryListBox1: TDirectoryListBox;
    DriveComboBox1: TDriveComboBox;
    Label5: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Label6: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
  public
  end;

var 
 Form1: TForm1;
 FileInfo: SHFILEINFO; 

implementation 

{&#36;R *.DFM} 

procedure TForm1.Button1Click(Sender: TObject); 
var
  Filename: String;
  attrs: string;
  attributes: integer;
begin 
  Form1.Repaint;
  if (filelistbox1.ItemIndex &lt;&gt; - 1) then
  begin 
    Filename := FileListBox1.FileName; 
  end 
  else 
  begin
    Filename := DirectoryListBox1.Directory; 
  end; 
  Edit1.Text := filename; 
  // 表示名の取得
  SHGetFileInfo(PChar(FileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME);
  Edit2.Text := FileInfo.szDisplayName; 
  // ファイル種別の取得
  SHGetFileInfo(PChar(FileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_TYPENAME);
  Edit3.Text := FileInfo.szTypeName; 
  // ファイルに関連づいたアイコンの取得
  SHGetFileInfo(PChar(FileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);
  Drawicon(canvas.handle,5,170,FileInfo.hIcon);
  Form1.Repaint; 
  // ファイル属性の取得
  attributes := GetFileAttributes(PChar(FileName));
  attrs := '';
  if Bool(attributes and FILE_ATTRIBUTE_READONLY) then attrs := attrs + 'R';
  if Bool(attributes and FILE_ATTRIBUTE_HIDDEN) then attrs := attrs + 'H';
  if Bool(attributes and FILE_ATTRIBUTE_SYSTEM) then attrs := attrs + 'S';
  if Bool(attributes and FILE_ATTRIBUTE_ARCHIVE) then attrs := attrs + 'A';
  Edit4.text := attrs;
  // 最終更新日付の取得
  try
    edit5.text := DateTimeToStr(FileDateToDateTime(FileAge(FileName)));
  except
    // ファイルが選択されていない場合(フォルダやドライブの場合)
    on EConvertError do edit5.text := 'Not Available'; 
  end; 
end;

procedure TForm1.FormPaint(Sender: TObject); 
begin 
  // アイコンの再描画(画面外にフォームが出た場合など)
  Drawicon(canvas.handle, 5, 170, FileInfo.hIcon);
end; 
end.
</pre>