比如说,我在窗体上放两个控件,一个Edit1,一个Image1,我如何实现这样的功能:
当我在Edit1中输入“C:\a.txt”,我如何通过程序取得TXT文件在我的系统中的显示图标,并把它显示在Image控件中?

解决方案 »

  1.   

    调用API函数ExtractAssociatedIcon或SHGetFileInfo可以得到文件的默认图标的句柄
      

  2.   

    具体实现如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     w:word;
     h:HICON;
    begin
    w:=1;
    h:=ExtractAssociatedIcon(maininstance,pchar(edit1.Text),w);
    if h=0 then
    begin
      ShowMessage(syserrormessage(getlasterror()));
      exit;
    end;
    DrawIcon(image1.Canvas.Handle,10,10,h);
    end;
      

  3.   

    楼上的兄弟,感谢你的例子。但这里有个问题,如果我输入的文件在系统中不存在,比如说我输入C:\a.txt,如果在我的操作系统中没有这个文件,就不能得到这个图标,而会得到一个默认的图标。
    我想要的结果是,我只要输入了a.txt,或说TXT,则能显示TXT类文件的图标,这个如何实现?
      

  4.   

    可以用 SHGetFileInfo,完全符合你的要求
    procedure TForm1.Button1Click(Sender: TObject);
    var sinfo: SHFILEINFO;
        begin
         ZeroMemory(@sinfo, sizeof(sinfo));
         SHGetFileInfo(pchar(Edit1.Text), FILE_ATTRIBUTE_NORMAL,
         sinfo, sizeof(sinfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICON);
         Image1.Picture.Icon.Handle := sinfo.hIcon
    end;