Je sous sous Windows 10 et Delphi 6 PE.

Je veux ouvrr un sélecteur de dossiers (pas de fichiers !) permettant de naviguer dans l'arborescence des dossiers d'un disque et d'en sélectionner un.
Le chemin du dossier sélectionné doit être retourné dans une variable de sorte que je puisse l'afficher dans un EDIT et éventuellement ajouter à une TLIstBox.

J'ai un code qui fonctionne parfaitement si tous les noms des dossiers et sous-dossiers sont ENSI:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenDialog1 := TOpenDialog.Create(self);
end;
 
function BrowseDialog(const Title: string; const Flag: integer): string;
var
  lpItemID : PItemIDList;
  BrowseInfo : TBrowseInfo;
  DisplayName : array[0..MAX_PATH] of char;
  TempPath : array[0..MAX_PATH] of char;
begin
  Result:='';
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  with BrowseInfo do begin
    hwndOwner := Application.Handle;
    pszDisplayName := @DisplayName;
    lpszTitle := PChar(Title);
    ulFlags := Flag;
  end;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then begin
    SHGetPathFromIDList(lpItemID, TempPath);
    Form1.ListBox1.Items.Add(TempPath);
    Result := UTF8Decode(TempPath);
    GlobalFreePtr(lpItemID);
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Dir: string;
begin
  dir := BrowseDialog( 'Chercher un dossier', 0);
  if dir<>'' then Edit1.Text := dir
             else Edit1.Text := '';
end;
Un clic sur mon bouton remplit bien mon EDIT1 avec le chemin complet du dossier sélectioné.

Mais, il arrive que dans l'arborescence des dossiers, il y en a dont le nom comprend des caractères UTF8 (chinois japonais, grec, russe, arabe, ..).
Dans ce cas, mon EDIT n'affiche que des "?" à la place des caractères UTF8 autres que ANSI; et, bien entendu, ce nom de dossier est inutilisable et provoque une erreur lorsque j'essaie de l'utiliser.

J'ai essayé d'utiliser WideString pour le résultat de la fonction BrowseDialog et pour la variable Dir dans le traitement du clic du bonton, mais ça ne change rien.
J'ai utiliser UTF8Encodeet UTF8Decodepour ces variables, mais ça ne change rien non plus.
POURTANT: le dialogue de sélection affiche CORRECTEMENT les noms des fichiers avec caractères UTF8 !

Comment est-ce qye je peux me sortir de ce fratras ?