Bonjour,
Il semble que GetShortPathName ne fonctionne pas avec des fichiers accentués (ça me renvoie une chaine vide). Quelqu'un a-t-il une solution ?
Merci,
Vincent
Bonjour,
Il semble que GetShortPathName ne fonctionne pas avec des fichiers accentués (ça me renvoie une chaine vide). Quelqu'un a-t-il une solution ?
Merci,
Vincent
Peut-être comme ceci (avec Ret déclaré en WideString);
Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 try SetFileApisToOEM; GetShortPathNameW(PWideChar(Filename), PWideChar(Ret), MAX_PATH); finally SetFileApisToANSI; end;
Mes tutoriels
Avant de poster :
- F1
- FAQ
- Tutoriels
- Guide du développeur Delphi devant un problème
Bonsoir,
Merci, mais ça ne semble pas fonctionner, ça retourne toujours une chaîne vide même si ce n'est pas accentué.
Merci en tout cas pour l'idée, je vais creuser,
Vincent
EDIT : Je suis sous Lazarus et non Delphi...
Alors que dirais-tu de déplacer ta discussion du forum Delphi vers le forum Lazarus ?
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
Mince, désolé, je n'avais pas vu qu'il y avait un forum spécifique pour Lazarus
Toutes mes excuses. Est ce qu'un modérateur peut supprimer ou déplacer ce post ?
Vincent
Merci pour le déplacement, pour préciser mon problème, je suis sous Windows et j'ai codé avec Lazarus un lanceur d'application (pour EduPython pour ceux qui connaissent).
J’appelle mon exécutable (PyScripteur) ainsi :
Tout marche bien, si j'ouvre mon lanceur avec un fichier qui ne contient pas d'accent, mais s'il y a un accent, ça ne fonctionne plus. Je pensais que GetShortPathName pourrait régler le problème, mais ce dernier renvoie une chaine vide sur les caractères accentués....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 var prog : String; begin if ParamCount > 0 then prog := ' "'+ParamStr(1)+'"' else prog := ''; [...] ShellExecute(0,'open',PChar('PyScripter.exe'),PChar('--python34 '+prog),'',1)
Merci de votre aide,
Vincent
Salut,
peut-être "protéger" tes accents (je suppose dans "prog") par QuotedStr ?
Genrenon testé, juste une idée comme ça...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2var prog : QuotedStr;
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Bonjour
Avec Lazarus, les chaînes sont encodées par défaut en UTF8, alors que l'API Windows nécessite un encodage ANSI.
C'est le cas de ta variable prog qui doit être convertie avant d'être transmise à ShellExecute.
Utilise pour cela la fonction Utf8ToWinCP de l'unité LazUtf8 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Uses LazUtf8; //... ShellExecute(0,'open',PChar('PyScripter.exe'),PChar('--python34 '+Utf8ToWinCP(prog)),'',1);
Super, merci ! La proposition de DomDA91 fonctionne à merveille, je ne connaissais pas cette fonction, ça fait un bout de temps que je me casse les dents sur le problème !
Le bonheur, c'est simple comme un coup de Forum.
Merci encore,
Bonne journée,
Vincent
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager