Home » U++ Library support » FileSel&FileList, Path » FileSel and international files problem when getting icon image
FileSel and international files problem when getting icon image [message #18542] |
Tue, 07 October 2008 13:17  |
 |
koldo
Messages: 3432 Registered: August 2008
|
Senior Veteran |
|
|
Hello all
I have found a problem when reading international file names. In these cases the icon is not readed.
Searching around I have found that the struct FileIconMaker has a member declared String file. If the file name has non english characters the function virtual Image Make() does not work.
To solve it I simply change this in FileSel.cpp:
for(int i = 0; i < 2; i++) {
SHFILEINFO info;
SHGetFileInfo(file, dir ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL, &info, sizeof(info),
with this;
WString wfile = file.ToWString();
for(int i = 0; i < 2; i++) {
SHFILEINFOW info;
SHGetFileInfo(wfile, dir ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL, &info, sizeof(info),
and it works.
Best regards
Koldo
Best regards
Iñaki
|
|
|
Re: FileSel and international files problem when getting icon image [message #18753 is a reply to message #18542] |
Sun, 19 October 2008 22:48   |
 |
mirek
Messages: 14255 Registered: November 2005
|
Ultimate Member |
|
|
koldo wrote on Tue, 07 October 2008 07:17 | Hello all
I have found a problem when reading international file names. In these cases the icon is not readed.
Searching around I have found that the struct FileIconMaker has a member declared String file. If the file name has non english characters the function virtual Image Make() does not work.
To solve it I simply change this in FileSel.cpp:
for(int i = 0; i < 2; i++) {
SHFILEINFO info;
SHGetFileInfo(file, dir ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL, &info, sizeof(info),
with this;
WString wfile = file.ToWString();
for(int i = 0; i < 2; i++) {
SHFILEINFOW info;
SHGetFileInfo(wfile, dir ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL, &info, sizeof(info),
and it works.
Best regards
Koldo
|
Well, first I have applied this patch, but I am afraid this would not work with Win98.
Could you try this first?
for(int i = 0; i < 2; i++) {
SHFILEINFO info;
SHGetFileInfo(ToSystemCharset(file), dir ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL,
&info, sizeof(info),
SHGFI_ICON|SHGFI_SMALLICON|(exe ? 0 : SHGFI_USEFILEATTRIBUTES));
Mirek
[Updated on: Sun, 19 October 2008 22:50] Report message to a moderator
|
|
|
|
|
|
Re: FileSel and international files problem when getting icon image [message #18788 is a reply to message #18542] |
Tue, 21 October 2008 07:00   |
 |
koldo
Messages: 3432 Registered: August 2008
|
Senior Veteran |
|
|
Hello luzr
I have seen that with the last version with SHFILEINFO the right icon of a file called "印经济" can be readed, but if instead, "印经济" is a folder, the folder icon can be got with GetFileIcon(path, true), but not with GetFileIcon(path, true, true) as it is in the sources.
I thought that a solution would be changing NativePathIcon to something like:
#if defined(PLATFORM_WIN32)
if (IsDrive(path) && IsSpecialFolder(path))
return GetFileIcon(path, true, true);
else
return GetFileIcon(path, folder);
#endif
where IsSpecialFolder(path) would be true in folders with icons like Desktop but, if I where in Taiwan, could I get the taiwanese Desktop icon ?
Best regards
Koldo
Best regards
Iñaki
|
|
|
|
Re: FileSel and international files problem when getting icon image [message #18806 is a reply to message #18788] |
Wed, 22 October 2008 23:39   |
 |
mirek
Messages: 14255 Registered: November 2005
|
Ultimate Member |
|
|
koldo wrote on Tue, 21 October 2008 01:00 | Hello luzr
I have seen that with the last version with SHFILEINFO the right icon of a file called "印经济" can be readed, but if instead, "印经济" is a folder, the folder icon can be got with GetFileIcon(path, true), but not with GetFileIcon(path, true, true) as it is in the sources.
I thought that a solution would be changing NativePathIcon to something like:
#if defined(PLATFORM_WIN32)
if (IsDrive(path) && IsSpecialFolder(path))
return GetFileIcon(path, true, true);
else
return GetFileIcon(path, folder);
#endif
where IsSpecialFolder(path) would be true in folders with icons like Desktop but, if I where in Taiwan, could I get the taiwanese Desktop icon ?
Best regards
Koldo
|
I do not quite understand this Is this tested? Should I replace the current code?
Of course, there are always two correct solutions:
- introduce another .dli and call W or A variant based on system (W in WinNT)
- finally trash Win98....
I would really be happy to finally end support for Win98. Unfortunately, there was still demand for it, believe or not.
Mirek
|
|
|
|
|
Goto Forum:
Current Time: Fri Apr 25 12:06:06 CEST 2025
Total time taken to generate the page: 0.00880 seconds
|