자신의 컴퓨터에 확장자에 맞는 아이콘을 가져 와서 ImageList에 넣어 줄때 사용하는 함수이다. Uses문에 ShellAPI, ShlObj를 추가한뒤에 사용한다. 전에 만들어 두었던것이 사라져서 다시 만들었다.
procedure GetSysstemICon(sImageList, lImageList: TImageList);
var
  sfi: TShFileInfo;
begin
  // ImageList에 파일의 내용을 넣는다.
  // get access to the shell imagelist...
  sImageList.handle := shgetfileinfo('', 0, sfi, sizeof(TShFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  sImageList.shareimages := true;
  sImageList.BlendColor := clHighlight;
  lImageList.handle := shgetfileinfo('', 0, sfi, sizeof(TShFileInfo), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
  lImageList.shareimages := true;
  lImageList.BlendColor := clHighlight;
end;
아래 함수는 화일의 정보를 가져온다.
뭐, 대충 파라미터를 보면 알겠지만, Full Path + 화일명을 넣어주면 확장자 정보 및 사이즈,
날짜등을 얻어온다.
procedure FileInfo( sFileName : String; var iIconIndex : Integer;
                    var lFileSize : LongInt; var sFileType : String;
                    Var dCreateDate, dUpdateDate, dLastDate : TDateTime );
var
  ShFileInfo: TShFileInfo;
  SearchRec : TSearchRec;
  FindHandle :THandle;
  function GetFileDateTime(FileDateTime: TFileTime): TDateTime;
  var
    LTime : TFileTime;
    Systemtime : TSystemtime;
  begin
    FileTimeToLocalFileTime( FileDateTime, LTime);
    FileTimeToSystemTime( LTime, SystemTime );
    Result := SystemTimeToDateTime( SystemTime );
  end;
  function GetFileSize( FS : LongInt ) : LongInt;
  begin
    Result := FS Div 1024;
    if Result <> ( Fs / 1024 ) then
      Result := Result  + 1;
  end;
begin
 
  shgetfileinfo(pChar( sFileName ),
    0,ShFileInfo,SizeOf( TShFileInfo ), SHGFI_USEFILEATTRIBUTES or 
    SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_EXETYPE
       or SHGFI_TYPENAME );  // <-- 화일 정보를 얻어 온다.
    // SHGFI_PIDL or SHGFI_ICON or SHGFI_ATTRIBUTES); <-- ICon그림을 직접 가져올때..
  iIconIndex := ShFileInfo.iIcon;
    
  sFileType := ShFileInfo.szTypeName; // 파일종류(Type)
  If FindFirst( sFileName, faAnyFile, SearchRec ) = 0 Then
  try
    lFileSize     := GetFileSize( SearchRec.FindData.nFileSizeHigh * MAXDWORD 
                                  + SearchRec.FindData.nFileSizeLow );
    dCreateDate   := GetFileDateTime( SearchRec.FindData.ftCreationTime );  
    dUpdateDate   := GetFileDateTime( SearchRec.FindData.ftLastWriteTime ); 
    dLastDate     := GetFileDateTime( SearchRec.FindData.ftLastAccessTime );
  finally
    FindClose( SearchRec );
  end;
end;

최신 댓글