我使用一下一个函数获得文件的图标
Function Get_ShellInfo(Const Filename:String;Const SmallIcon:Boolean=false):TSHFILEINFO;
var        //函数用于获得文件图标
Flags : Integer;
begin
    Flags := SHGFI_DISPLAYNAME or SHGFI_TYPENAME or SHGFI_ICON or SHGFI_ATTRIBUTES;
    if SmallIcon then Flags := Flags or SHGFI_SMALLICON
    else Flags := Flags or SHGFI_LARGEICON;
    FillChar(Result,SizeOf(TSHFILEINFO),0);
    SHGetFileInfo(Pchar(Filename),0,Result,Sizeof(Result),Flags);
end;经测试如果程序调用的该函数就会导致之后的按钮标签等控件的caption出现乱码,显示都变成???等。
在线等待中……

解决方案 »

  1.   

    乱码只是最近才发生的事,以前都是好的,现在的delphi控件显示也都乱码
      

  2.   

    与函数有关,看看你windows控制面板中的区域设置等项,共有3项会影响。
      

  3.   

    与函数有关,检查你的WINAPI函数。
      

  4.   

    我写过的代码,参考一下吧
    Drives := GetLogicalDrives;
        for i := 0 to 25 do
            if LongBool(Drives and ($0001 shl i)) = True then
            begin
                driver := Char(Ord('A') + i);            VolumeName := '';
                GetVolumeInformation(pwidechar(driver + ':\'),
                    VolumeName,
                    256,
                    @SerialNum,
                    MaxFilenameLength,
                    Flags,
                    FileSystemType,
                    256);            Buttonitem := form1.CategoryButtons1.Categories[0].Items.add;
                Buttonitem.Caption := string(VolumeName) + '(' + driver + ':)';
                Icon := TIcon.Create;
                Icon.Handle := Get_ShellInfo(driver + ':\', true).hIcon; //得到文件的图标
                n := form1.drivesImageList.AddIcon(Icon);
                Buttonitem.ImageIndex := n;
                form1.CategoryButtons1.Height := form1.CategoryButtons1.Categories[0].Items.count * 24 + 30;
            end;