Rrader, первые 2 исправил.
| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, ActiveX, ShlObj, ComObj, StdCtrls, ImgList, CommCtrl, ExtCtrls;
type TForm1 = class(TForm) Button1: TButton; Image1: TImage; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end;
TIconType = (itSmall, itLarge);
var Form1: TForm1;
implementation
{$R *.dfm}
function GetIcon(PIDL: PItemIDList; IconType: TIconType = itSmall): TIcon; const SFGAO_SHARE = $20000; Flags: array[TIconType] of DWORD = (SHGFI_SMALLICON, SHGFI_LARGEICON); var FileInfo: TSHFileInfo; Ico: TIcon; ListHandle: HIMAGELIST; begin Ico := TIcon.Create; Result := Nil; with Ico do begin FillChar(FileInfo, Sizeof(FileInfo), #0); ListHandle := SHGetFileInfo(Pointer(PIDL), SFGAO_SHARE, FileInfo, SizeOf(FileInfo), Flags[IconType] or SHGFI_SYSICONINDEX or SHGFI_PIDL); if ListHandle <> 0 then begin Handle := ImageList_GetIcon(ListHandle, FileInfo.iIcon, ILD_NORMAL); Result := Ico; end; end; end;
procedure TForm1.Button1Click(Sender: TObject); var PIDL: PItemIDList; begin SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, PIDL); Image1.Picture.Icon := GetIcon(PIDL); CoTaskMemFree(PIDL); end;
procedure TForm1.FormCreate(Sender: TObject); begin CoInitialize(nil); end;
procedure TForm1.FormDestroy(Sender: TObject); begin OleUnInitialize; end;
end.
|
А переделывать в процедуру зачем? |