unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ImgList, Menus;type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    report1: TMenuItem;
    smallicon1: TMenuItem;
    vsicon1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure report1Click(Sender: TObject);
    procedure smallicon1Click(Sender: TObject);
    procedure vsicon1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}uses ShellAPI, ActiveX, ComObj, CommCtrl, FileCtrl;
procedure TForm1.FormCreate(Sender: TObject);
var
  FileInfo: TSHFileInfo;
  S_ImageListHandle:thandle;
begin
  //取得小图标集句柄
  S_ImageListHandle := SHGetFileInfo('C:\',0,FileInfo,
  SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  //将小图标集句柄指给列表
  SendMessage(Listview1.Handle, LVM_SETIMAGELIST, LVSIL_SMALL, S_ImageListHandle);
end;procedure TForm1.Button1Click(Sender: TObject);
var
  FileInfo: TSHFileInfo;
ListItem:tlistitem;
begin
ListItem:=ListView1.Items.Add;
listitem.Caption:='udp.txt';
  FillChar(FileInfo, SizeOf(FileInfo), #0);
    SHGetFileInfo(Pchar('c:\udp.txt'),0,FileInfo,sizeof(FileInfo),
                  SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_SMALLICON);
  ListItem.ImageIndex :=FileInfo.iIcon ;
end;procedure TForm1.report1Click(Sender: TObject);
begin
listview1.ViewStyle:=vsreport;
end;procedure TForm1.smallicon1Click(Sender: TObject);
begin
listview1.ViewStyle:=vssmallicon;
end;procedure TForm1.vsicon1Click(Sender: TObject);
begin
listview1.ViewStyle:=vsicon;
end;end.
请问如何获得文件的大图标(如c盘下的udp.txt大图标),能在listview的vsicon下显示,万分感谢!

解决方案 »

  1.   

    你把    SHGetFileInfo(Pchar('c:\udp.txt'),0,FileInfo,sizeof(FileInfo),
                      SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_SMALLICON);
    里面的 SHGFI_SMALLICON改为SHGFI_LARGEICON看看
      

  2.   

    感谢回复,改过之后在vsicon的状态下看不到图标的位置,更改之前虽然看不到图标,但是可以看到图标的位置有空白区域。
      

  3.   

    是不是你的ListView没有和ImageList相连啊
      

  4.   

    要把SHGetFileInfo获得的句柄赋给你的listview1所连的 imagelist1
    procedure TForm1.Button1Click(Sender: TObject);
    var
      FileInfo: TSHFileInfo;
    ListItem:tlistitem;
    begin
    ListItem:=ListView1.Items.Add;
    listitem.Caption:='udp.txt';
    FillChar(FileInfo, SizeOf(FileInfo), #0);
    ImageList1.Handle :=  SHGetFileInfo(Pchar('c:\udp.txt'),0,FileInfo,sizeof(FileInfo),
                      SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_LARGEICON);
      ImageList1.ShareImages := True;
      ListItem.ImageIndex :=FileInfo.iIcon ;
    end;