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 :

Lancer ExecAction depuis un sous programme


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Points : 72
    Points
    72
    Par défaut Lancer ExecAction depuis un sous programme
    suite à vos conseils sur une autre file, je lance différentes actions par un programme de ce type
    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
    unit essai_liste_actions;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, StdActns, Menus, ActnList, Buttons, ExtCtrls;
     
     
    type
      TForm1 = class(TForm)
        ActionList1: TActionList;
        Action1: TAction;
        Action2: TAction;
        procedure FormCreate(Sender: TObject);
        procedure Action1Execute(Sender: TObject);
        procedure Action2Execute(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      ipos: integer;
    implementation
     
    {$R *.dfm}
    Procedure ExecAction(ActionList :TCustomActionList;Ipos : Integer);
      Var
          A : TAction;
      begin
        if Not Assigned(ActionList) then
          showmessage('perdu')
        else
        begin
          A := TAction(ActionList.Actions[Ipos]);
          A.Execute;
        end;
      end;
      ///////////////
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ExecAction(ActionList1,0);
    end;
     
    procedure TForm1.Action1Execute(Sender: TObject);
    begin
      showmessage('action1');
    end;
    ////////////////////////
       procedure TForm1.Action2Execute(Sender: TObject);
    begin
    showmessage('action2');
    end;
    begin
      if Assigned(Form1) then ExecAction(Form1.ActionList1,0);
       end.
    mon problème est que de cette façon, je ne peux pas lancer une action à partir d'un sous programme

    autrement dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    procedure test_lancement_action;
                    begin
                      ExecAction(ActionList1,0);
                    end;
    ne fonctionne pas.
    est il moyen de contourner la difficulté?
    merci.
    Jean Pierre

  2. #2
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par potili2 Voir le message
    ne fonctionne pas.
    Le compilateur a la gentillesse de te fournir des informations que tu devrais lire et si tu ne les comprends pas alors il serait bon de les transmettre


    Citation Envoyé par potili2 Voir le message
    est il moyen de contourner la difficulté?
    OUI

    ----

    Cela ne fonctionne pas parce que procédure n'est pas "VISIBLE" d'une autre unité. Il faut que tu déclares sa signature dans la partie interface de ton unité.


    Ta liste d'action n'est pas visible non plus.

    Voici ce que je te propose (en dehors du fait que tu dois lire quelques tutos de base)



    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
    unit essai_liste_actions;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, StdActns, Menus, ActnList, Buttons, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        ActionList1: TActionList;
        Action1: TAction;
        Action2: TAction;
        procedure FormCreate(Sender: TObject);
        procedure Action1Execute(Sender: TObject);
        procedure Action2Execute(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
      ipos: integer;
    
    // ICI je rends visible ma procédure pour d'autres unités
    Procedure ExecAction(ActionList :TCustomActionList;Ipos : Integer);
    
    
    implementation
    
    {$R *.dfm}
    Procedure ExecAction(ActionList :TCustomActionList;Ipos : Integer);
      Var
          A : TAction;
      begin
        if Not Assigned(ActionList) then
          showmessage('perdu')
        else
        begin
          A := TAction(ActionList.Actions[Ipos]);
          A.Execute;
        end;
      end;
      ///////////////
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ExecAction(ActionList1,0);
    end;
    
    procedure TForm1.Action1Execute(Sender: TObject);
    begin
      showmessage('action1');
    end;
    ////////////////////////
    
    procedure TForm1.Action2Execute(Sender: TObject);
    begin
      showmessage('action2');
    end;
    
    begin
      if Assigned(Form1) then ExecAction(Form1.ActionList1,0);
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    unit2
    
    implementation
    
    uses essai_liste_actions;
    
    procedure test_lancement_action;
    begin
      ExecAction(Form1.ActionList1, 0);
    end;
    
    end.
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Points : 72
    Points
    72
    Par défaut
    merci pour cette réponse, mais je ne travaille qu'avec une seule unité.
    je faisais le test en rajoutant le sous programme dans l'unité de départ.
    le compilateur me dit
    "identificateur non déclaré :'ActionList1' "
    Jean Pierre

  4. #4
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    parce que cette liste appartient à un formulaire et n'est donc "VISIBLE" que dans celui-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure test_lancement_action;
    begin
      ExecAction(Form1.ActionList1, 0);
    end;
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Points : 72
    Points
    72
    Par défaut
    ok
    merci, j'ai compris.
    désolé, parfois, je suis long à la comprenotte.
    Jean Pierre

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/01/2015, 16h11
  2. Lancer un script cmd depuis un autre programme
    Par raffa dans le forum VBScript
    Réponses: 0
    Dernier message: 19/12/2012, 10h56
  3. Lancer l'installation d'un programme depuis une page php
    Par MedyAndFriends dans le forum Langage
    Réponses: 7
    Dernier message: 27/12/2011, 20h28
  4. Réponses: 2
    Dernier message: 10/06/2009, 13h08
  5. Réponses: 2
    Dernier message: 04/06/2004, 10h36

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