delphi6的shellXXXXX bug太多了呀!经常出现错误,尤其是当一个文件夹下文件很多的时候

解决方案 »

  1.   

    Var
      S:string;
      Icon,icon1 ,icon2: HIcon;
      IconIndex : word;
      aa:TIcon;
      LI:TListItem;
      ICoIndex:integer;
    begin
         aa:=Ticon.Create;     OpenDialog1.Execute;
         S:=OpenDialog1.FileName;
         s:='*.doc';
         IconIndex := 0;
         {Icon := ExtractAssociatedIcon(HInstance,
                                   PChar(S),
                                   IconIndex);}
         //icon:=ExtractIconEx(pchar(s),IconIndex,icon1,icon2,1);
         Icon :=ExtractIcon(HInstance,PChar(S),IconIndex);
         aa.Handle:=Icon;
         ICoIndex:=ImageList1.AddIcon(aa);
         LI:=ListView1.Items.Add;
         LI.Caption:=s;
         LI.ImageIndex:=ICoIndex;
         ListView1.Items[0].ImageIndex:=0;
    end
      

  2.   

    忘记了,你应当在个桌面上方一个ImageList
    name为ImageList1,当然我取的DOC的图标,只是改变变量S的值就可以了
      

  3.   

    编号:39 发送者:xiaojiuzhou 发送时间:2002-3-21 9:27:39 删除 回复 
    内容 你设置两个ImageList,一个16,一个32,ExtractIcon(HInstance,PChar(S),IconIndex);  
    CIonIndex,为0是16*16,为1是32×32, 
      

  4.   

    5555555555
    stanely(邢儿的劳工) 为什么删除呀?555555555555
      

  5.   

    what had i deleted???????
      

  6.   

    Delphi5下面也可以将ListView转换为资源管理器地。晚上代码给你。
      

  7.   

    如果要获得文件关联的图标,下面是实现的代码:function TForm1.AddIcon(sfLocal,sExt:string):integer;
    {AddIcon函数根据sfLocal指定的文件名,将与文件象对应的图标添加到ImageList1
    中,并将相应的索引添加到slIcon中
    sfLocal  本地文件名,须要获得与该文件相关联的图标局柄}
    var
      sfi:TSHFileInfo;
      i:Integer;
    begin
      //获得文件的扩展名
      i:= slIcon.IndexOf(sExt);
      if i>-1 then
        Result:=i
      else
      begin
        {获得与sfLocal相关联的文件信息,返回
        值保存在sfi中,sfi中的hIcon是文件的关联图标局柄}
        SHGetFileInfo(PChar(sExt),FILE_ATTRIBUTE_NORMAL,
                      sfi, Sizeof(sfi),
                      (SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SMALLICON ));
        {调用ImageList_AddIcon函数将sfi.hIcon添加到图标列表控件ImageList1中}
        i:=ImageList_AddIcon(ImageList1.Handle,sfi.hIcon);
        //函数调用成功返回值i为图标在imagelist1中的索引,将slIcon中与索引相同的
        //string的值设定为sfLocal的扩展名
        if i>-1 then
          slIcon.Strings[i]:=sExt;
        Result:=i;
      end;
    end;如果调用成功会自动将图标添加到ImageList1中