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

C++Builder Discussion :

Utilisation de TActionList .... [FAQ]


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Par défaut Utilisation de TActionList ....
    Bonsoir,

    je me pose toujours la question de l'interet d'utiliser un TActionList pour gérer le menu de mon appli.
    Si j'ai bien tout compris je définie mes 'actions' dans le TActionList, j'écris le code associé et affecte le tout via la propriété Action des itelms de mon menu. ça m'apporte quoi de plus que d'associer directement mes fonctions à la propriété OnClick ?

    En plus j'ai fait un essai et je tombe sur un os
    Voila, dans mon menu j'ai un item 'Boite d'options' avec en sous menu 'Afficher'(Tag=1) et 'Masquer'(Tag=0). Dans mon TActionList j'ai défini et coder l'action suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall TFormP::AfficheOptionsExecute(TObject *Sender)
    {
        TMenuItem *ClickedItem = (TMenuItem*)Sender;
        ClickedItem->Checked = true;
        BoiteOptions->Visible = ClickedItem->Tag;
    }
    J'ai affecté l'action AfficheOption comme Action de mes 2 items 'Afficher' et 'Masquer' : et bien ça ne fonctionne pas alors que si j'affecte directement AfficheOptionsExecute à OnClick des items concernés, tout fonctionne nickel

  2. #2
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 20
    Par défaut
    je me pose aussi la même question !

    Mais il doit bien y avoir un interet certain que nous n'avons pas saisi
    a+

  3. #3
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    Pendant longtemps aussi je n'ai pas vu l'interet,

    mais finalement je trouve ça pratique pour plusieurs raisons ( qui me sont propres et qui sont sûrement contestables)

    1) pour une raison sémantique : Le sens d'une action :

    J'utilise les fonctions comme sous éléments (ou les outils) d'une fonctionnalité du logiciel ,cette dernière représentant pour moi une action utilisateur qui représente(le sens, le but final et utilitaire pour l'utilisateur .Donc c'est une limite virtuelle entre mon code et l'IHM.

    2 ) pour des raisons pratiques:

    -Sur pas mal de contrôles IHM on peut affecter une action sans ajouter de code au contrôle.

    - A plusieurs composants , on peut affecter la même action dans différents evenements , juste en choisissant via l'EDI dans une liste. En effet , dans un logiciel, une action peut être déclenchée de manière différentes oar l'utilisateur ( mode débutant , moyen ou expert) , bouton rapide , menu, etc ... Il est donc pratique de pouvoir affecter rapidement l'action au nouveau controle visuel.

    - Supposons qu'on veuille supprimer un ou plusieurs composants pour relooker l'application, pas besoin de supprimer le code d'appel de votre fonction associé à ce composant car il n'ya en pas (gain de temps),supprimez simplement les anciens composants, mettez les nouveaux et réaffecter leur rapidement les actions .

    - Si on veut acceder au code de l'action , dans votre cas par exemple pour un bouton on clique , on regarde le nom de la fonction et on cherche le détail de son code dans le programme.
    avec l'action , on atterit directement dans le corps du code de l'action en clickant sur le composant.

    - dernièrement via l'action list on a accès rapidement à toute les macros fonctions du programme.Si le programme est lourd et a beaucoup de fonctionnalité c'est pratique.

    Je regrette simplement qu'on ne puisse pas classer ses actions dans catégories et sous catégories....

    voilà c'est tout.

  4. #4
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    J'ajoute brièvement à l'excellent exposé précédent que cela vous permet de centraliser le code. Quand plusieurs endroits sont susceptibles d'exécuter le même code (et c'est souvent le cas dans les programmes pour en faciliter l'utilisation), vous savez, si vous avez programmé correctement, que le code se trouve dans ActionList puisque c'est ici qu'il a été centralisé. Voyez l'alinéa 58 de mes Remarques sur mon site (cliquez www en bas de ce message pour y accéder).

    Citation Envoyé par Dauphin
    J'ai affecté l'action AfficheOption comme Action de mes 2 items 'Afficher' et 'Masquer' : et bien ça ne fonctionne pas
    Votre exemple est assez bizarre, il semble signifier que l'option de menu disparaît. Une fois disparue, ce n'est pas l'option "Afficher" qui va la faire réapparaître puisque le menu a disparu. Donc seule l'option "Masquer" devrait exister. Toujours est-il que si vous appelez "fonctionner" faire disparaître le menu pour "Masquer" et le laisser tel quel pour "Afficher", ça marche parfaitement en utilisant un TActionList et en redirigeant l'événement vers lui. Vous avez dû faire une erreur quelque part.

    À bientôt
    Gilles

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Par défaut
    Citation Envoyé par Gilles Louïse
    Votre exemple est assez bizarre, il semble signifier que l'option de menu disparaît. Une fois disparue, ce n'est pas l'option "Afficher" qui va la faire réapparaître puisque le menu a disparu. Donc seule l'option "Masquer" devrait exister.
    Toujours est-il que si vous appelez "fonctionner" faire disparaître le menu pour "Masquer" et le laisser tel quel pour "Afficher", ça marche parfaitement en utilisant un TActionList et en redirigeant l'événement vers lui.
    Non dans le menu, l'item cliqué est juste coché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClickedItem->Checked = true;
    Alors que le TPanel BoiteOptions doit être affiché ou masqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     BoiteOption->Visible = ClickedItem->Tag;
    Citation Envoyé par Gilles Louïse
    Vous avez dû faire une erreur quelque part.
    ça je le comprend bien, mais ce que je ne comprend pas, c'est laquelle ....
    en mettant un point d'arret à la fin de ma fonction, je constate que lorsqu'elle est affectée aux évenements OnClick de mon menu la valeur de ClickedItem->Tag correspopnd bien au Tag de l'Item correspondant, alors que si j'affecte cette même fonction à Action j'ai toujours ClickedItem->Tag=???
    J'en déduit (peut être hativement) que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TMenuItem *ClickedItem = (TMenuItem*)Sender;
    réagirait différement selon l'usage de Action ou OnClick .......

  6. #6
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par Dauphin
    Alors que le TPanel BoiteOptions doit être affiché ou masqué
    D'accord, je croyais que votre option de menu s'appelait BoiteOptions. C'est donc un TPanel qui est censé disparaître.

    Citation Envoyé par Dauphin
    J'en déduit (peut être hâtivement) que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TMenuItem *ClickedItem = (TMenuItem*)Sender;
    réagirait différemment selon l'usage de Action ou OnClick .......
    Oui, le problème est là car vous "castez" le Sender. Si vous passez par Action, le Sender c'est ActionList* qu'en réalité on ne peut pas convertir en pointeur de MenuItem. Mais si vous passez par OnClick, le Sender devient le MenuItem* et ça marche pour cette raison-là car le Tag qui donne true ou false est lu correctement.

    Ça ne change pas grand-chose au problème dans votre cas, il suffit de mettre dans le OnClick la fonction du TActionList, l'important n'est pas tant d'utiliser Action ou OnClick que de centraliser le code dans le TActionList.

    À bientôt
    Gilles

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Par défaut
    Citation Envoyé par Gilles Louïse
    Oui, le problème est là car vous "castez" le Sender. Si vous passez par Action, le Sender c'est ActionList* qu'en réalité on ne peut pas convertir en pointeur de MenuItem. Mais si vous passez par OnClick, le Sender devient le MenuItem* est ça marche pour cette raison-là car le Tag qui donne true ou false est lu correctement.
    C'est bien ce que j'avais subodoré, sans pouvoir expliquer vraiment pourquoi. Maintenant au moins j'ai compris

    Citation Envoyé par Gilles Louïse
    Ça ne change pas grand-chose au problème dans votre cas, il suffit de mettre dans le OnClick la fonction du TActionList, l'important n'est pas tant d'utiliser Action ou OnClick que de centraliser le code dans le TActionList.
    C'est bien ce que je fais déjà, d'ou mes interrogations quant à l'utilité de ce TActionList ..... mais je vais aller relire vos remarques.
    c'est en fait le premier projet ou j'essaie d'utiliser le TActionList, je vais continuer avec, l'intéret véritable se révélera sans doute à l'usage ....

    Merci @ tous pour les réponses et je le met 'Résolu'

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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