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: 3453 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: 14271 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: 3453 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: 14271 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: Tue Nov 04 06:08:04 CET 2025 
 Total time taken to generate the page: 0.04135 seconds 
 |