::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-07 20:04:43, Hit : 6279, Vote : 1828
 System Images

unit untShellIcons;

interface

uses
   Windows, ShellAPI;

type
  TShellIcons = class
  private
    FLargeImageHandle: integer;
    FSmallImageHandle: integer;
    FDesktopIndex: integer;
    FMyComputerIndex: integer;
    FNetworkIndex: integer;
    FRecycleBinIndex: integer;
    FCloseFolderIndex: integer;
    FOpenFolderIndex: integer;
    FLinkOverlayIndex: integer;
    FShareOverlayIndex: integer;
    FFolderTypeName: string;
  public
    constructor Create;

    function GetIconIndex(fn: string): integer;
    function GetTypeName(fn: string): string;

    property LargeImageHandle: integer read FLargeImageHandle;
    property SmallImageHandle: integer read FSmallImageHandle;
    property DesktopIndex: integer read FDesktopIndex;
    property MyComputerIndex: integer read FMyComputerIndex;
    property NetworkIndex: integer read FNetworkIndex;
    property RecycleBinIndex: integer read FRecycleBinIndex;
    property CloseFolderIndex: integer read FCloseFolderIndex;
    property OpenFolderIndex: integer read FOpenFolderIndex;
    property LinkOverlayIndex: integer read FLinkOverlayIndex;
    property ShareOverlayIndex: integer read FShareOverlayIndex;
    property FolderTypeName: string read FFolderTypeName;
  end;

var
  ShellIcons: TShellIcons;

implementation

uses
  ShlObj, SysUtils;

constructor TShellIcons.Create;
var
  itemIDs: PItemIDList;
  shInfo: TSHFileInfo;
begin
  FLargeImageHandle := SHGetFileInfo(
    '', 0, shInfo, SizeOf(shInfo), SHGFI_SYSICONINDEX or SHGFI_LARGEICON
  );

  FSmallImageHandle := SHGetFileInfo(
    '', 0, shInfo, SizeOf(shInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON
  );

  SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, itemIDs);
  SHGetFileInfo(
    PChar(itemIDs), 0, shInfo, Sizeof(shInfo), SHGFI_PIDL or SHGFI_SYSICONINDEX
  );
  FDesktopIndex := shInfo.iIcon;

  SHGetSpecialFolderLocation(0, CSIDL_DRIVES, itemIDs);
  SHGetFileInfo(
    PChar(itemIDs), 0, shInfo, Sizeof(shInfo), SHGFI_PIDL or SHGFI_SYSICONINDEX
  );
  FMyComputerIndex := shInfo.iIcon;

  SHGetSpecialFolderLocation(0, CSIDL_NETWORK, itemIDs);
  SHGetFileInfo(
    PChar(itemIDs), 0, shInfo, Sizeof(shInfo), SHGFI_PIDL or SHGFI_SYSICONINDEX
  );
  FNetworkIndex := shInfo.iIcon;

  SHGetSpecialFolderLocation(0, CSIDL_BITBUCKET, itemIDs);
  SHGetFileInfo(
    PChar(itemIDs), 0, shInfo, Sizeof(shInfo), SHGFI_PIDL or SHGFI_SYSICONINDEX
  );
  FRecycleBinIndex := shInfo.iIcon;

  SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, itemIDs);
  SHGetFileInfo(
    PChar(itemIDs), 0, shInfo, Sizeof(shInfo), SHGFI_PIDL or SHGFI_SYSICONINDEX
  );
  FCloseFolderIndex := shInfo.iIcon;

  SHGetFileInfo(
    PChar(itemIDs), 0, shInfo, Sizeof(shInfo),
    SHGFI_PIDL or SHGFI_SYSICONINDEX or SHGFI_OPENICON or SHGFI_TYPENAME
  );
  FOpenFolderIndex := shInfo.iIcon;
  FFolderTypeName := shInfo.szTypeName;

  FLinkOverlayIndex := 1;
  FShareOverlayIndex := 0;
end;

// get shell icon index from file which may not exists.
function TShellIcons.GetIconIndex(fn: string): integer;
var
  shInfo: TSHFileInfo;
begin
  SHGetFileInfo(
    PChar(fn), FILE_ATTRIBUTE_NORMAL, shInfo, SizeOf(shInfo),
    SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES
  );

  Result := shInfo.iIcon;
end;

// get shell type name from file which may not exists.
function TShellIcons.GetTypeName(fn: string): string;
var
  shInfo: TSHFileInfo;
  ext: string;
  fs: string;
begin
  SHGetFileInfo(
    PChar(fn), FILE_ATTRIBUTE_NORMAL, shInfo, SizeOf(shInfo),
    SHGFI_TYPENAME or SHGFI_USEFILEATTRIBUTES
  );
  Result := shInfo.szTypeName;

  if Length(Result) = 0 then begin
    ext := ExtractFileExt(fn);
    if Length(ext) > 0 then ext := ext + ' ';
    if (GetUserDefaultLangID and $3ff) = LANG_KOREAN then fs := 'ÆAAI'
    else fs := 'File';
    Result := ext + fs;
  end;
end;

initialization
  ShellIcons := TShellIcons.Create;
finalization
  ShellIcons.Free;

end.





491   [일반/컴포넌트] TRichEdit 의 선택된 영역만 인쇄하기  김영대 2003/03/07 4422 718
490   [시스템] CPU 종류 구하기  김영대 2003/03/07 4772 1193
489   [시스템] 사운드파일 없이 PC 스피커로 음악연주  김영대 2003/03/07 4606 923
488   [네트웍/인터넷] 프로그램으로 네트워크 드라이브 연결/해제  김영대 2003/03/07 6673 1245
487   [일반/컴포넌트] 윈도우즈 종료와 같은 그늘진 화면 만들기  김영대 2003/03/07 3126 836
486   [일반/컴포넌트] 아이콘 사이트  김영대 2003/03/07 3599 1065
485   [시스템] 윈도우즈 시스템 표준 폰트 구하기  김영대 2003/03/07 3003 846
484   [네트웍/인터넷] RS232 통신  김영대 2003/03/07 6884 1853
483   [일반/컴포넌트] 주어진 영역의 화면 캡처  김영대 2003/03/07 3549 1008
482   [일반/컴포넌트] 숫자를 영문 표기로 바꾸기  김영대 2003/03/07 4234 886
481   [일반/컴포넌트] 숫자를 한글 표기로 바꾸기  김영대 2003/03/07 3588 927
480   [일반/컴포넌트] RichEdit 의 내용을 Bitmap 으로 만들기 2  김영대 2003/03/07 3751 979
479   [COM/OLE] MS-WORD 종료시키기  김영대 2003/03/07 2642 742
478   [윈도우즈 API] 시스템 사운드 연주하기  김영대 2003/03/07 4772 1296
477   [일반/컴포넌트] Algorithm to sort a TStringGrid #2  김영대 2003/03/07 4747 1197
476   [윈도우즈 API] 외부 프로그램의 좌표,상태 구하기  김영대 2003/03/07 3150 1013
475   [윈도우즈 API] 윈도우즈 Telnet 으로 호스트 접속하기  김영대 2003/03/07 4057 1117
474   [일반/컴포넌트] 특정한 폴더로 이동한 DOS 창 띄우기  김영대 2003/03/07 4088 1134
473   [시스템] DOS 명령어 실행하고 결과 받아오기  김영대 2003/03/07 6522 1548
472   [윈도우즈 API] NT의 현재 user가 administrative privilege 를 가지고 있는지?  김영대 2003/03/07 2957 808
471   [일반/컴포넌트] 두개의 StringGrid sync 마추기  김영대 2003/03/07 3684 1016
470   [일반/컴포넌트] 윈도우의 title bar 폰트 바꾸기  김영대 2003/03/07 3208 839
469   [네트웍/인터넷] 네트워크 공유 설정/해제 하기 (Windows 9x)  김영대 2003/03/07 4353 1078
468   [네트웍/인터넷] 네트워크 공유 정보 읽어오기 (WIndows 9x)  김영대 2003/03/07 3627 969
467   [일반/컴포넌트] 눌려진 키보드 키의 명칭 구하기  김영대 2003/03/07 7351 1437
466   [윈도우즈 API] Windows98 에서의 SetForegroundWindow  김영대 2003/03/07 5718 1489
465   [윈도우즈 API] Task bar 에 나타나지 않는 프로그램 만들기  김영대 2003/03/07 5130 1508
464   [COM/OLE] Outlook 사용하기  김영대 2003/03/07 3450 1090
463   [시스템] 지정한 drive가 CD-ROM 인지 검사하기  김영대 2003/03/07 6272 1649
462   [시스템] 어떤 어플리케이션이 시작 되는지 hook으로 알아내기  김영대 2003/03/07 5069 1400
461   [윈도우즈 API] 윈도우즈 탐색기의 아이콘 뽑아내서 사용하기  김영대 2003/03/07 6440 1887
  [윈도우즈 API] System Images  김영대 2003/03/07 6279 1828
459   [윈도우즈 API] 컴퓨터/파일/폴더 찾기 화면 띄우기  김영대 2003/03/07 6143 1470
458   [일반/컴포넌트] Unix-format time 을 TDateTime 로 바꾸기  김영대 2003/03/07 4082 1121
457   [일반/컴포넌트] 실행시 component 를 Move/Resize 시키기  김영대 2003/03/07 3291 951
456   [일반/컴포넌트] TMemo 를 화면크기로 인쇄하기  김영대 2003/03/07 2679 692
455   [일반/컴포넌트] SpeedButton 에 OnMouseEnter/OnMouseExit 이벤트 넣기  김영대 2003/03/07 3921 1041
454   [윈도우즈 API] 키보드의 Scroll Lock 켜기/끄기  김영대 2003/03/07 4006 1135
453   [데이터베이스] table packing 하기  김영대 2003/03/07 3436 999
452   [윈도우즈 API] reboot Windows  김영대 2003/03/07 3857 1119

[이전 10개] [1]..[11][12] 13 [14][15][16][17][18][19][20]..[25] [다음 10개]
 

Copyright 1999-2021 Zeroboard / skin by zero