IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Connaître le chemin de Mes Documents / Home [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 207
    Points : 188
    Points
    188
    Par défaut Connaître le chemin de Mes Documents / Home
    Bonjour,

    Je cherche une fonction qui me donnerait, en fonction de l'OS sur lequel tourne mon programme, soit :
    - le path de "Mes Documents" si on est sous Windows
    - le "/home/xxxxx" si on est sous linux (xxxxx représente le login de l'utilisateur)

    Je sais qu'il faut utiliser :
    - les instructions conditionnelles, mais est-ce valable pour les "uses" ?
    - la façon de le faire

    J'ai bien trouvé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function MesDocsPath : string;
    var
      SFolder: PItemIDList;  
        // erreur compil : identifier PItemIDList  not found, error in type definition
      SpecialPath: array[0..MAX_PATH] of char;
    begin
      SHGetSpecialFolderLocation(Application.Handle, CSIDL_PERSONAL, SFolder); 
         //identifier SHGetSpecialFolderLocation not found,
         //identifier idents no member 'Handle',
         //identifier CSIDL_PERSONAL not found, 
      SHGetPathFromIDList(SFolder, SpecialPath);
         //identifier SHGetPathFromIDList not found
      Result := StrPas(SpecialPath);
    end;
    Mais cela ne semble pas fonctionner sous Lazarus (c'est un code pour Delphi - j'utilise lazarus 0.9.24 beta) : le compilo ne reconnait pas par exemple 'PItemIDList' (je précise que j'ai bien inclus 'ShlObj' dans les uses)

    A vos bonnes ames

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour Linux, on peut utiliser directement Application.EnvironmentVariable['HOME'] (comme le proposerait certainement yann.m*). On aurait alors quelque chose comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {$IFDEF Windows}
    //Votre code Windows
    {$ELSE}
     {$IFDEF Linux}
       Showmessage(Application.EnvironmentVariable['HOME']);
     {$ENDIF}
    {$ENDIF}

    ... ou de manière plus pédagogique, la fonction FpGetEnv de l'unit 'BaseUnix' [RTL] http://lazarus-ccr.sourceforge.net/d.../fpgetenv.html

    Dans ce cas, dans les uses de la Form on ajoute {$IFDEF Linux} ,BaseUnix {$ENDIF}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls
      {$IFDEF Linux} ,BaseUnix {$ENDIF}
      ;
    Et lorsqu'on veut utiliser la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {$IFDEF Windows}
    //Votre code Windows
    {$ELSE}
     {$IFDEF Linux}
       Showmessage(fpGetenv('HOME'));
     {$ENDIF}
    {$ENDIF}
    *Je vous renvoie à une ancienne discussion : http://www.developpez.net/forums/d95...environnement/

    Cordialement. Gilles
    Dernière modification par Invité ; 11/08/2010 à 18h39.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 207
    Points : 188
    Points
    188
    Par défaut
    merci de cette réponse. Mais concernant linux, ne serait-il pas plus simple d'utiliser cette méthode (j'ai pas compilé pour linux encore) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    homedir:=expandfilename('~/');
    Concernant les IFDEF : 'WINDOWS' fonctionnera-t-il quelque soit la version de Windows (98 à 7, 32/64 bits) ?

    Autrement, voici l'erreur qui provoquait les problemes de compilo : il faut mettre 'windows' et pas 'ShlObj' dans les uses

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 207
    Points : 188
    Points
    188
    Par défaut
    Par contre, j'ai encore une petite question : le code donné précédemment, sous windows, me remplace les accents aigus par une virgule (que je remplace via une fonction ReplaceStr, mais c'est pas propre, et je ne sais pas ce que cela peut donner avec d'autres caractères accentués).

    Voici de que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Documents and Settings\Propri‚taire\Mes documents\
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Documents and Settings\Propriétaire\Mes documents\
    Une idée ?

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 062
    Points : 41 023
    Points
    41 023
    Billets dans le blog
    62
    Par défaut
    UTF8Encode,UTF8Decode
    encore une fois je suis perdu dans le monde de l'UTF8 mais le hic est là.

    ou encore forcer la conversion ? StrPas(PWidechar(SpecialPath));

    enfin l'esprit est là , je n'ai pas le courage de tester, c'est beau l'internationalisation des strings mais c'est .....
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 207
    Points : 188
    Points
    188
    Par défaut
    Merci, c'est "encode" qu'il me fallait. Moi aussi ça me fait braire cette internationalisation

    Ps : en fait, c'est windows qui me ch**r à ne pas parler UTF8

    Ps2 : ah, qu'est ce que c'était bien la bonne époque des caractères ascii

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 163
    Points
    163
    Par défaut
    Il y a déjà GetUserDir qui fait ça et qui fonctionne comme tu veux pour tous les systèmes basés sur Unix, par contre pas pour Windows où il te renvoie le répertoire de ton profil, pas le 'Mes documents'.
    Ceci dit GetUserDir est correct, l'équivalent de /home/<user>/ est bien C:\Doc and settings\<User>\ sous XP. Mes Documents serait équivalent à /home/<user>/Documents par exemple.

    Le problème c'est qu'il n'y a aucun moyen sur d'avoir ce "Mes documents" . Sous Linux c'est une convention de l'appeler Documents en français, sous Windows, il n'y a aucune variable d'environnement qui le donne et on ne peut pas assumer qu'il s'appelle "Mes Documents" sous le répertoire du profile, il peut être déplacé).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Chemin vers mes documents en SAS
    Par suistrop dans le forum Macro
    Réponses: 5
    Dernier message: 28/03/2011, 17h34
  2. [Labview 8.6] Récupérer le chemin de "Mes Documents"
    Par clenoir dans le forum LabVIEW
    Réponses: 6
    Dernier message: 12/08/2009, 18h58
  3. Home/Mes documents
    Par mikedimoi dans le forum SUSE
    Réponses: 6
    Dernier message: 18/08/2006, 11h13
  4. Réponses: 2
    Dernier message: 05/05/2006, 19h09
  5. chemin vers Mes Documents
    Par andolini dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/06/2005, 19h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo