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:
Un clic sur mon bouton remplit bien mon EDIT1 avec le chemin complet du dossier sélectioné.
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;
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 ?
Partager