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

Delphi Discussion :

[Delphi] Récupérer un argument en ligne de commande


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut [Delphi] Récupérer un argument en ligne de commande
    Bonjour à tous,

    Je suis vraiment débutant en programmation langage delphi.

    J'ai créer un petit programme qui lit un fichier texte et qui l'affiche dans un memo.

    Cependant j'aimerait pouvoir le lancer depuis la ligne de commande avec comme argument le fichier texte. quelque chose du style

    mon_fichier.exe toto.txt

    Est-ce que cela est possible , si oui auriez-vous une piste???

    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    ParamCount et ParamStr() + traitement du fichier (vérif extension, chargement dans le memo) dans le MainForm.Create.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    donc dans ce code la , je devrais placé ou cette fonction?? :

    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
    46
    47
    48
    49
    50
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      Tfrm_main = class(TForm)
        Memo1: TMemo;
        btn_ok: TButton;
        procedure FormCreate(Sender: TObject);
        procedure btn_okClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      frm_main: Tfrm_main;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure Tfrm_main.btn_okClick(Sender: TObject);
    Var F: TextFile;
    Stg:String;
    begin
    //Lire le contenu du fichier
    Memo1.Clear; //Efface le contenu de Memo1
    AssignFile(F,ExtractFilePath(Application.ExeName)+'test.txt');
    Reset(F);
    repeat //Repeter...
    Readln(F,Stg); //Lit une ligne du fichier texte jusqu'au prochain sut de ligne
    Memo1.Lines.Add(Stg); //Affiche dans Memo1 le contenu de la variable
    until EOF(F);// ...jusqu'à ce que la position en cours du pointeur se trouve en fin de fichier
    CloseFile(F);
     
    end;
     
    procedure Tfrm_main.FormCreate(Sender: TObject);
    begin
     
    end;
    end.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Tu peux faire quelque chose de ce genre:
    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
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      if ParamCount = 1 then
      begin
        // Effectuer test d'usage sur le paramètre (extension, ...)
        LoadFileIntoMemo(ParamStr(1));
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      LoadFileIntoMemo(ExtractFilePath(Application.ExeName) + 'test.txt');
    end;
     
    procedure TForm1.LoadFileIntoMemo(F: TFilename);
    begin
      with Memo1 do
      begin
        Clear;
        Lines.LoadFromFile(F);
      end;
    end;
     
    end.
    @+ Claudius

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Il me dit que " LoadFileIntoMemo " n'est pas déclaré

    Je suis désolé je pose surement des questions basique , mais je n'y connais vraiment rien.

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Il faut bien sûr que tu déclares la fonction dans la partie interface.

    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
    interface
    
    uses Forms, ...;
    
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
        procedure LoadFileIntoMemo(F: TFilename);
      public
        { Déclarations publiques }
      end;
    @+

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Désolé je suis un boulay, mais dans cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure Tfrm_main.btn_okClick(Sender: TObject);
    Var F: TextFile;
    Stg:String;
    begin
    //Lire le contenu du fichier
    Memo1.Clear; //Efface le contenu de Memo1
    //AssignFile(F,ExtractFilePath(Application.ExeName)+'test.txt');
     LoadFileIntoMemo(ExtractFilePath(Application.ExeName) + 'test.txt');
    Si je mets le test.txt , il va pas allé chercher le fichier texte que je mets en argument dans ma ligne de commande...Je suis pas sur de comprendre.

    et dans cette procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure Tfrm_main.FormCreate(Sender: TObject);
    begin
      if ParamCount = 1 then
      begin
         //Effectuer test d'usage sur le paramètre (extension, ...)
       LoadFileIntoMemo(ParamStr(1));
      end;
    end;
    Il me dit que FormCreate n'est pas un membre associé de Tfrm_main, c'est peut etre du a Delphi 2005 que j'utilise...

    je ne sais pas

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Montre-nous ton code partie interface et implémentation, l'unité donc.

    @+ Claudius

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    D'accord

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      Tfrm_main = class(TForm)
        Memo1: TMemo;
        btn_ok: TButton;
        procedure btn_okClick(Sender: TObject);
      private
        { Déclarations privées }
     
      public
        { Déclarations publiques }
        procedure LoadFileIntoMemo(F: TFilename);
      end;
     
    var
      frm_main: Tfrm_main;
     
     
    implementation
     
    {$R *.dfm}
     
    procedure Tfrm_main.FormCreate(Sender: TObject);
    begin
      if ParamCount = 1 then
      begin
         //Effectuer test d'usage sur le paramètre (extension, ...)
       LoadFileIntoMemo(ParamStr(1));
      end;
    end;
     
     
    procedure Tfrm_main.LoadFileIntoMemo(F: TFilename);
    begin
      with Memo1 do
      begin
        Clear;
        Lines.LoadFromFile(F);
      end;
    end;
     
     
     
    procedure Tfrm_main.btn_okClick(Sender: TObject);
    Var F: TextFile;
    Stg:String;
    begin
    //Lire le contenu du fichier
    Memo1.Clear; //Efface le contenu de Memo1
    //AssignFile(F,ExtractFilePath(Application.ExeName)+'test.txt');
     LoadFileIntoMemo(ExtractFilePath(Application.ExeName) + 'test.txt');
    Reset(F);
    repeat //Repeter...
    Readln(F,Stg); //Lit une ligne du fichier texte jusqu'au prochain sut de ligne
    Memo1.Lines.Add(Stg); //Affiche dans Memo1 le contenu de la variable
    until EOF(F);// ...jusqu'à ce que la position en cours du pointeur se trouve en fin de fichier
    CloseFile(F);
     
    end;
     
    end.
    la il y a tout.

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Comme tout à l'heure l'èvenement Create de la forme doit être déclarée dans la partie interface.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    type
      Tfrm_main = class(TForm)
        Memo1: TMemo;
        btn_ok: TButton;
        procedure FormCreate(Sender: TObject);
        procedure btn_okClick(Sender: TObject);
      private
        { Déclarations privées }
     
      public
        { Déclarations publiques }
        procedure LoadFileIntoMemo(F: TFilename);
      end;
    Tu te retrouves dans cette situation car tu n'utilises les fonctionnalités de l'EDI.
    Par exemple, tu poses un bouton sur ta fiche, il va se nommer 'Bouton1'. Pour implémenter son évènement OnClick, tu sélectionnes ce bouton, tu vas sur l'inspecteur d'objets et tu double-clic sur OnClick. Delphi qui est sympa va déclarer l'évènement automatiquement dans la partie interface et également d'ouvrir un 'squelette' dans la partie implémenation.

    Voilà pour l'astuce.

    @+ Claudius

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Je me permet au passage de préciser que la réponse sur le passage de paramètres était dans la

    http://delphi.developpez.com/faq/?pa...tion#paramprog
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup claudius, et désolé si j'ai fait appel à vous malgrès qu'il y ait de la doc dans la FAQ. Mais bon le delphi je connais depuis ce matin 8h. Jamais vu ni appliqué auparavant, alors pour l'implémenter comme ca , même pour un programme basique , j'avais besoin d'un certain accompagnement.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Et dans Delphi menu executer-> parametre tu peux transmettre les parametres à l'application avant de l'executer.

  14. #14
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Juste un détail : TMemo.LoadFromFile écrase le contenu du mémo. Pas besoin d'écrire une fonction LoadFileIntoMemo.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    non

  16. #16
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Euh.. "non" quoi ? "Non, t'as raison, pas besoin", ou "non, t'as tort et le tort tue" ?

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Non, pas besoin d'écrire une fonction LoadFileIntoMemo.

    Penses à mettre

  18. #18
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    pas besoin d'écrire une fonction LoadFileIntoMemo.
    Effectivement dans la mesure où LoadFromFile ecrase le contenu du mémo, cette fonction n'a que peu d'intérêt. L'exemple se voulait plus didactique pour notre ami qui débute avec Delphi.

    @+ Claudius

Discussions similaires

  1. Réponses: 27
    Dernier message: 14/12/2006, 19h49
  2. Entrer un argument en ligne de commande
    Par alex_petit dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 14/12/2006, 00h11
  3. [VB.NET]Argument en ligne de commande
    Par Fayoul dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2006, 12h27
  4. taille max des arguments en ligne de commande
    Par clepape dans le forum Langage
    Réponses: 2
    Dernier message: 08/10/2005, 13h18
  5. Réponses: 3
    Dernier message: 07/04/2003, 20h06

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