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

Langage Delphi Discussion :

création d'une liste d'actions indicée


Sujet :

Langage 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 création d'une liste d'actions indicée
    bonjour
    je souhaite créer une liste d'actions indiciée, de façon à pouvoir efectuer l'une ou l'autre selon l'indice. qque chose du genre
    NumeroActionADeclencher:= 2;
    listeAction[NumeroActionADeclencher2].execute;
    pour cela, j'utilise TActionList, mais en pratique, je ne sais pas comment selectionner l'action 2 autrement que par son nom et pour la déclencher je dois passer par un speedbutton.
    dans mon cas, je veux que l'execution se fasse quand l'indice passe à deux et toute seule
    si quelqu'un voulait donner un petit exemple concret...
    merci
    Jean Pierre

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 422
    Points : 5 822
    Points
    5 822
    Par défaut
    salut

    as tu essayer ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      Procedure ExecAction(ActionList :TCustomActionList;Ipos : Integer);
      Var
          A : TAction;
      begin
        A := TAction(ActionList.Actions[Ipos]);
        A.Execute
      end;
      ou alors 
     
         ActionList.ExecuteAction(TAction(ActionList.Actions[Ipos]))
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  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 Anapurna.
    j'ai tenté ceci

    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
    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;
        procedure Action1Execute(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    var
      Form1: TForm1;
      MesActions:TCustomActionList;
     
    implementation
     
    {$R *.dfm}
     
      Procedure ExecAction(ActionList :TCustomActionList;Ipos : Integer);
      Var
          A : TAction;
      begin
        A := TAction(ActionList.Actions[Ipos]);
        A.Execute
      end;
      ///////////////
    procedure TForm1.Action1Execute(Sender: TObject);
    begin
    showmessage('gagné');
    end;
    ////////////////////////
      begin
      ExecAction(MesActions,0);
    end.
    qui ne fonctionne pas car je ne sais pas gérer TcustomActionList
    comment la créer? et y insérer une action, je suppose qu'on ne doit pas passer par une TActionList...
    mes questions peuvent paraitre oiseuses, mais c'est la première fois que je m'attaque à ce genre de problème et c'est très peu développé sur le net.
    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 : 15
    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
    Walou Walou, tu devrais poster dans le Forum "Débutant" et utiliser un peu l'aide Delphi

    Lorsque tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    begin
      ExecAction(MesActions,0);
    end.
    Tu utilises une liste d'actions qui n'est pas encore instanciée
    En supposant que ta Form "Form1" soit une fiche autocrée elle l'est (créé) après que le code d'initialisation de l'unité soit exécuté.

    Si tu veux faire un test tu devrais plutôt écrire ceci.

    Et compte tenu du fait que tu débutes tu dois TOUJOURS vérifier qu'un objet existe avant de l'utiliser

    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
    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;
        procedure Action1Execute(Sender: TObject);
       procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    var
      Form1: TForm1;
    // Inutile //  MesActions:TCustomActionList;
    
    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('gagné');
    end;
    ////////////////////////
    
    begin
      if Assigned(Form1) then
        ExecAction(Form1.ActionList1,0);
      // else c'est bien trop tôt
    end.
    n'hésites pas à mettre les messages d'erreur que tu as ainsi que d'indiquer la ligne qui les génére.

    Cordialement
    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
    j'ai testé.
    après avoir crée une ActionList avec une Action1 pour que ça compile, ce qui me donne
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, StdActns, Menus, ActnList, Buttons, ExtCtrls;
    type
      TForm1 = class(TForm)
        ActionList1: TActionList;
        Action1: TAction;
        procedure Action1Execute(Sender: TObject);
       procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    var
      Form1: TForm1;
    // Inutile //  MesActions:TCustomActionList;
     
    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('gagné');
    end;
    ////////////////////////
     
    begin
      if Assigned(Form1) then
        ExecAction(Form1.ActionList1,0);
      // else c'est bien trop tôt
     
    end.
    mais rien ne se passe, puisque on ne passe pas par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure TForm1.FormCreate(Sender: TObject);
    tout cela ne me parait pas inné! une question de génération, sans doute...

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 422
    Points : 5 822
    Points
    5 822
    Par défaut
    salut


    j'ai tester le code et tout fonctionne parfaitement
    comment a tu creer ta methode formcreate

    @+ phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    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
    mal, très probablement
    en fait, j'ai crée une form2 pour mes tests
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, StdActns, Menus, ActnList, Buttons, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        ActionList1: TActionList;
        Action1: TAction;
        procedure Action1Execute(Sender: TObject);
     // procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    var
      Form1: TForm1;
    Form2: TForm1;
    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.Action1Execute(Sender: TObject);
    begin
      showmessage('gagné');
    end;
    ////////////////////////
     
    begin
      if Assigned(Form2) then
        ExecAction(Form1.ActionList1,0);
      // else c'est bien trop tôt
     
    end.
    et
    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
    program Project1;
     
    uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm1, Form2);
     
    Form2.visible := true;
    Form2.top:=30;
    Form2.left:=100;
    Form2.height:=300;
    Form2.width:=400;
    Form2.caption := 'nouvelle fiche';
     
      Application.Run;
    end.
    si tu pouvais m'expliquer comment créer proprement une forme, ce serait bien...
    Merci
    Jean Pierre

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 422
    Points : 5 822
    Points
    5 822
    Par défaut
    salut

    bon on vas commencer par le dpr

    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
    program Project1;
     
    uses
    Forms,
    Unit1 in 'Unit1.pas' {Form1};
     
    {$R *.res}
     
    begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    //Application.CreateForm(TForm1, Form2);
    //Form2.visible := true;
    //Form2.top:=30;
    //Form2.left:=100;
    //Form2.height:=300;
    //Form2.width:=400;
    //Form2.caption := 'nouvelle fiche';
     
    Application.Run;
    end.
    ensuite dans la forme
    click une fois sur ta forme
    ensuite dans les l'inspecteur d'evenement double click
    sur Oncreate ce qui va te creer une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Procedure TForm1.Formecreate(Sender : TObject)
    Begin
      ExecAction(ActionList1,0);
    end;
    ensuite il faudrait que tu sois plus precis pour ta demande
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #9
    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!!, ça marche effectivement de cette façon.
    j'ai ajouté une action2, ce qui me donne
    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
    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.
    maintenant, je voudrais pouvoir jongle entre les deux actions (avec ipos, je pense) : par exemple si la minute est paire effectuer l'action1 et si elle est impaire effectuer l'action2
    Jean Pierre

  10. #10
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 422
    Points : 5 822
    Points
    5 822
    Par défaut
    salut

    ce n'est plus la même question il va falloir changer de thread
    mais voila comment tu peut récupérer les minutes du système
    et définir si elles sont paire ou impaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var
      st: TSystemTime;
    Begin
      Windows.GetSystemTime(st);
      ExecAction(ActionList1,(st.wMinute mod 2));
    end;
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  11. #11
    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, ça marche...
    avec ça, je vais pouvoir me débrouiller.
    un problème de plus résolu.
    Jean Pierre

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

Discussions similaires

  1. création d'une liste d'après un fichier en c
    Par ghislain118 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 21/12/2005, 10h56
  2. Réponses: 5
    Dernier message: 13/10/2005, 10h19
  3. [generic] pb création d'une List []
    Par yoplaboom dans le forum Langage
    Réponses: 6
    Dernier message: 08/07/2005, 13h01
  4. Création d'une liste ...
    Par keryss dans le forum Access
    Réponses: 6
    Dernier message: 21/10/2004, 09h00

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