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 :

Changement de manière d'ouvrir un dossier, maintenant ça ne fonctionne plus.


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 124
    Points
    15 124
    Par défaut Changement de manière d'ouvrir un dossier, maintenant ça ne fonctionne plus.
    Bonjour,

    In the good old time Dans le bon vieux temps, je cliquais sur un bouton et la procédure OpenDocument(dossier); m'ouvrait l'explorateur à l"adresse demandée dans mon arborescence de dossiers.
    Ça s'appuyait sur ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function FpAccess (pathname : AnsiString; aMode : cInt): cInt; {$ifdef VER2_0}inline;{$endif}
    Begin
      FpAccess:=FpAccess(pchar(pathname),amode);
    End;
    que je ne sais pas lire, que je ne comprends pas, mais qui fonctionne.

    À notre époque moderne, avec FPC 3.2 et Laz 2.0.10 ça ne fonctionne plus, on passe par FileExists qui fait une vérification et sort sans rien ouvrir s'il s'agit d'un dossier. Or il s'agit bien d'un dossier et moi je veux le voir ouvert.

    Comment faire, maintenant ?
    J'ai un peu regardé dans FileUtil.pas sans rien trouver d'intéressant. J'ai aussi un peu googlé mais là c'est l'océan qui s'ouvre, sans qu'il n'en sorte rien de bon,

    Vous faites comment, vous ? Merci,
    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

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 948
    Points : 9 276
    Points
    9 276
    Par défaut
    hello,
    il y a des choses que tu ne nous as pas dites :

    1 - Sous quel O.S ? il me semble que fpaccess c'est plutôt du côté linux.
    2 - Qu'entends-tu par explorateur ? l'explorateur de fichiers ? l'explorateur graphique ? sous quel toolkit alors ?

    Ami calmant, J.P (santé)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 124
    Points
    15 124
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    il y a des choses que tu ne nous as pas dites :

    1 - Sous quel O.S ? il me semble que fpaccess c'est plutôt du côté linux.
    2 - Qu'entends-tu par explorateur ? l'explorateur de fichiers ? l'explorateur graphique ? sous quel toolkit alors ?

    Ami calmant, J.P (santé)
    Ah oui, la journée m'a épuisé, désolé.

    1- Oui, Linux Debian Buster 10.6
    2- Explorateur de fichiers (pcmanfm, si ça te parle), sous gtk.

    Merci,
    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

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 948
    Points : 9 276
    Points
    9 276
    Par défaut
    hello,
    sous centos8, j'ai le même souci rien ne s'ouvre quand j'appelle la fonction opendocument avec un nom de répertoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // uses lclintf,
    OpenDocument('/home/jurassic');          [
    j'ai retrouvé le code de OpenDocument que voici :
    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
    function OpenDocument(APath: String): Boolean;var
      lApp: string;
    begin
      // Android uses this
      if Assigned(OpenDocumentWidgetsetImplementation) then
      begin
        Result := OpenDocumentWidgetsetImplementation(APath);
        Exit;
      end;
     
     
      Result := True;
      if not FileExistsUTF8(APath) then exit(false);
     
      lApp:=FindFilenameOfCmd('xdg-open'); // Portland OSDL/FreeDesktop standard on Linux
      if lApp='' then
        lApp:=FindFilenameOfCmd('kfmclient'); // KDE command
      if lApp='' then
        lApp:=FindFilenameOfCmd('gnome-open'); // GNOME command
      if lApp='' then
        Exit(False);
     
     
      if (APath<>'') and (APath[1]<>'"') then
        APath:=QuotedStr(APath);
      RunCmdFromPath(lApp,APath);
    end;
    Pour déboguer , j'ai recréé dans mon projet la fonction pour voir où cela coinçait. Et bien c'est tout simple c'est le if not FileExistsUTF8(APath) qui fait sortir de la fonction avant la fin. Si je le mets en commentaire j'ai bien l'explorateur de fichier qui s'ouvre.

    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
    38
    39
    //  uses lclintf,UTF8Process, LazFileUtils,
    function OpenDocumentJP(APath: String): Boolean;
    var
      lApp: string;
    begin
      // Android uses this
      if Assigned(OpenDocumentWidgetsetImplementation) then
      begin
        Result := OpenDocumentWidgetsetImplementation(APath);
        Exit;
      end;
     
     
      Result := True;
    //  if not FileExistsUTF8(APath) then exit(false);
     
     
      lApp:=FindFilenameOfCmd('xdg-open'); // Portland OSDL/FreeDesktop standard on Linux
      if lApp='' then
        lApp:=FindFilenameOfCmd('kfmclient'); // KDE command
      if lApp='' then
        lApp:=FindFilenameOfCmd('gnome-open'); // GNOME command
      if lApp='' then
        Exit(False);
     
     
      if (APath<>'') and (APath[1]<>'"') then
        APath:=QuotedStr(APath);
      RunCmdFromPath(lApp,APath);
    end;
     
     
    { TForm1 }
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      OpenDocumentJP('/home/jurassic');
    end;
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Beau travail JP.

    Est-ce un bug ou est-ce tout simplement que la fonction n'est pas faite pour ça (et qu'au bon vieux temps ça ne marchait que par miracle) ? Pour ma part, quand j'entends "document" je ne pense pas à un dossier.

    Sinon (je ne vais rien vous apprendre) mais on pourrait faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    uses 
      SysUtils, Process;
     
    function ExploreDirectory(const ADir: string): boolean;
    var 
      s: string;
    begin
      result := RunCommand('xdg-open', [ADir], s);
    end;
     
    begin
      WriteLn(ExploreDirectory('/home/roland/Documents'));
    end.
    À adapter bien sûr, en remplaçant éventuellement 'xdg-open'.

    Bon dimanche (et même bonne fête) !
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  6. #6
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut à tous OpenDocument n'est pas fait pour ouvrir un dossier mais comme son nom l'indique un document donc un fichier FileExistsUTF8 vérifie si un fichier existe et pas un dossier. Par contre là ou je vous rejoins c'est que les devs auraient pu renommer le paramètre APath qui est contradictoire avec la fonction. Ou la remanier et la renommer du genre (à l'arrache, et non testé) :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    Uses
      LazFileUtils;
     
    function OpenDocumentOrDirectory(APath: String): Boolean;
    var 
      lApp: string;
      lpath, lFileName : String;
    begin
      // Android uses this
      if Assigned(OpenDocumentWidgetsetImplementation) then
      begin
        Result := OpenDocumentWidgetsetImplementation(APath);
        Exit;
      end;
     
      Result := True;
     
      if pos('.', APath) > 0 then  // vérifie, si il y a une extension.Si oui,  le paramètre contient un nom de fichier
        lPath := ExtractFilePath(APath)
      else 
        lPath := ExtractFilePath(IncludeTrailingPathDelimiter(APath)) // Sinon on s'assure qui il y le délimiteur à la fin "/" ou "\"
     
      lFileName := ExtractFileName(APath);  
     
      if lFIleName <> '' then
      begin
        if not FileExistsUTF8(APath) then exit(false);
      end
      else
      begin
         if lPath = '' then exit(false);
         if not DirPathExists(APath) then exit(false); // ou utiliser la fonction DirectoryExist
         APath := IncludeTrailingPathDelimiter(APath); // Pas sur si c'est obligé
      end;
     
      lApp:=FindFilenameOfCmd('xdg-open'); // Portland OSDL/FreeDesktop standard on Linux
      if lApp='' then lApp:=FindFilenameOfCmd('kfmclient'); // KDE command
      if lApp='' then lApp:=FindFilenameOfCmd('gnome-open'); // GNOME command
      if lApp='' then Exit(False);
     
     
      if (APath<>'') and (APath[1]<>'"') then  APath:=QuotedStr(APath);
      RunCmdFromPath(lApp,APath);
     
    end;
    Bon Dimanche à tous

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 124
    Points
    15 124
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Et bien c'est tout simple c'est le if not FileExistsUTF8(APath) qui fait sortir de la fonction avant la fin. Si je le mets en commentaire j'ai bien l'explorateur de fichier qui s'ouvre.
    Bien joué mais c'est pas glop : si la fonction est utilisée ailleurs et que le fichier n'existe pas, c'est une erreur qui va être générée, non ?

    Citation Envoyé par BeanzMaster Voir le message
    OpenDocument n'est pas fait pour ouvrir un dossier mais comme son nom l'indique un document
    Sans doute, mais c'est très certainement une recherche internet qui m'a suggéré cette manière de faire. Après tout, un document c'est un fichier avec un certain format (.doc, .xml, .bmp, etc.) et un dossier c'est pareil, il n'y a que le format des données qui change.

    Sinon, elle sort d'où ta procédure ? Il me semble l'avoir croisée lors de mon débug en pas-à-pas, et je lui trouve un épouvantable défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if pos('.', APath) > 0 then  // vérifie s'il y a une extension. Si oui, le paramètre contient un nom de fichier
        lPath := ExtractFilePath(APath)
      else 
        lPath := ExtractFilePath(IncludeTrailingPathDelimiter(APath)) // Si non, on s'assure qu'il y a le délimiteur à la fin "/" ou "\"
    c'est quoi ce test chelou sous Linux : un fichier (même sous Windows, au fait) peut ne pas avoir d'extension,
    et a contrario un dossier peut avoir un nom avec extension, donc là c'est source d'ennuis...

    Et le vainqueur est
    Citation Envoyé par Roland Chastain Voir le message
    (et qu'au bon vieux temps ça ne marchait que par miracle) ?
    Non, c'était écrit autrement, sans doute.

    J'ai donc copié/collé sans vergogne ta ligne de code en remplaçant xdg-open qui ne fonctionne pas chez moi sur un dossier par l'appel à l'explorateur par défaut du système :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      EXPLORATEUR : string = '/usr/bin/pcmanfm'; // à mettre dans l'ini à terme, pour pouvoir changer de binaire sans tout recompiler
     
    //  SysUtils, Process;
    function ExploreDirectory(const aDir: string): boolean;
    var
      s: string;
    begin  // https://www.developpez.net/forums/d2094653/autres-langages/pascal/lazarus/changement-maniere-d-ouvrir-dossier-ca-ne-fonctionne-plus/#post11638971
    //  result := RunCommand('xdg-open', [aDir], s);   // Roland Chastain.
      result := RunCommand(EXPLORATEUR, [aDir], s);
    end;
    Merci à tous et ,
    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

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/06/2016, 18h01
  2. [VB]ouvrir un dossier bo
    Par jazziestan dans le forum SDK
    Réponses: 5
    Dernier message: 02/01/2007, 09h14
  3. [Débutant]Ouvrir un dossier avec explorer
    Par Bloodscalp dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 08/11/2006, 17h37
  4. [VB]Ouvrir un dossier
    Par misterbenj dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/01/2006, 20h39
  5. Ouvrir un dossier à partir de son chemin
    Par Mr.Gus dans le forum Access
    Réponses: 2
    Dernier message: 13/06/2005, 13h59

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