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 :

TActionList : comment connaître le composant qui a appelé l'action [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 748
    Points
    9 748
    Par défaut TActionList : comment connaître le composant qui a appelé l'action
    Bonjour,

    Voilà, j'aimerais mettre dans un DataModule un TActionList avec un certain nombre d'action qui pourront être utilisée sur différent composant de différentes Form.

    Mais, le problème qui se pose, est : Mais sur quel composant dois-je effectuer l'action ? Et ça je ne le vois nul part...

    Quelqu'un sait-il comment le faire ?

    Merci d'avance

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par Jon Shannow Voir le message
    Mais, le problème qui se pose, est : Mais sur quel composant dois-je effectuer l'action ? Et ça je ne le vois nul part...
    C'est le composant qui choisit l'action, si je puis dire...
    La propriété Action des composants permet de savoir quelle action sera réalisée...
    Elle est définie au niveau de l'ancêtre TControl, donc bon nombre de composants la possède : TButton, TEdit, TMenu, etc, etc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Button1.Action := Action1;
    MenuItem1.Action := Action1;
    Philippe.

  3. #3
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 748
    Points
    9 748
    Par défaut
    Bonjour et merci d'avoir répondu.

    J'ai du mal poser la question.
    Comment définir l'action associée pour un composant, ça je sais. Mais, dans la procédure "Execute" de l'action elle-même, comment je sais sur quel composant je dois l'appliquer ?

    Exemple : Dans une fiche, j'ai une dizaine de TEdit, je crée une action permettant de mettre à taRightJustify la propriété Alignment d'un TEdit. Je voudrais que cette action puisse être réalisée sur tout les TEdit de la Form.
    Dans la procedure Execute de l'action, comment je peux savoir sur quel composant je dois appliquer l'action ?

    C'est ça le problème !

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  4. #4
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 195
    Points
    195
    Par défaut
    Bonsoir

    Je tape tel que cela me vient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Action1Execute(Sender: TObject);
    var
      Edit: TEdit;
    begin
      if assigned(sender) and sender.ClassNameIs('TEdit') then begin
        Edit := TEdit(Sender);
        Edit.Alignment:=taRightJustify;
      end;
    end;
    C'est ce que tu souhaites faire ?

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par Jon Shannow Voir le message
    J'ai du mal poser la question.
    Et je l'ai mal comprise...
    Mais @mtournay a donné la réponse.
    J'aurais juste écrit if Assigned(Sender) and Sender is TEdit then begin
    Philippe.

  6. #6
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 748
    Points
    9 748
    Par défaut
    Merci, mais hélas, c'est la première chose que j'ai essayé. Et le résultat est que le sender est l'action même !

    Bref, ce n'est pas le composant appelant mais le composant exécutant. Et l’exécutant, c'est l'action et non le TEdit ou le TButton qui déclenche l'action !

    Donc, toujours pas de solution.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par Jon Shannow Voir le message
    Bref, ce n'est pas le composant appelant mais le composant exécutant. Et l’exécutant, c'est l'action et non le TEdit ou le TButton qui déclenche l'action !
    Oui, mais l'action, elle a des chances d'avoir les propriétés qui permettront de savoir quel est le composant qui est à l'origine du déclenchement !
    Cela donne en 2 minutes chrono :
    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
    procedure TForm1.Action1Execute(Sender: TObject);
    var
      Act: TAction;
      Edt: TEdit;
    begin
      if Assigned(Sender) and (Sender is TAction) then
      begin
        Act := TAction(Sender);
        if Assigned(Act.ActionComponent) and (Act.ActionComponent is TEdit) then
        begin
          Edt := TEdit(Act.ActionComponent);
          Edt.Alignment := taRightJustify;
        end;
      end;
    end;
    Philippe.

  8. #8
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 748
    Points
    9 748
    Par défaut
    Nom d'un Schreumeuleumeuleu ! J'ai cherché pendant des heures un truc de ce genre, j'ai regardé la doc LCL sur le TAction et voilà que je ne descend pas assez loin dans les héritages et loupe complètement le truc que je cherche, ActionComponent dans TBasicAction !

    Mais quel GMT je fais, nom d'un p'tit bordel à queue...

    Allez-y, moquez-vous ...





    En tout cas, merci beaucou à toi Ph. B. et également à toi mtournay.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  9. #9
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 195
    Points
    195
    Par défaut
    de rien même si j'étais légèrement à coté de la plaque ... bon en même temps, j'ai répondu vite en me basant sur ce que je fais avec un ensemble de boutons où tous les onClick appellent la même procédure.

    Et à l'avenir, je penserai à (Sender is TAction) pour tester le type d'objet sans avoir besoin de trans-typer merci Ph.B

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/04/2012, 20h32
  2. Comment connaître le plugin qui utilise une extension ?
    Par Contrec dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 03/03/2010, 11h06
  3. Réponses: 2
    Dernier message: 05/02/2010, 17h30
  4. Comment connaître le composant qui *va être* focused dans un OnExit ?
    Par Tardiff Jean-François dans le forum Composants VCL
    Réponses: 3
    Dernier message: 13/11/2007, 09h14
  5. Comment connaître l'événement qui a provoqué le TForm.show ?
    Par OutOfRange dans le forum Composants VCL
    Réponses: 1
    Dernier message: 01/08/2005, 09h59

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