자신의 컴퓨터에 확장자에 맞는 아이콘을 가져 와서 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;