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

Composants VCL Delphi Discussion :

Procedure détecte le composant qui l'a lancée


Sujet :

Composants VCL Delphi

  1. #1
    Membre éclairé
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Par défaut Procedure détecte le composant qui l'a lancée
    Bonjour,

    Je développe un soft avec Delphi 2006 sous WinXP.

    J'ai 50 composants qui doivent lancer une même procédure.

    Le problème c'est que lorsque le composant lance cette procédure, il doit envoyer une variable qui lui est propre (pex : var lettre := 'a' pour Button1 - var lettre := 'b' pour Button2 - ...).

    Ce que je fais actuellement, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button5Click(Sender: TObject);
    begin
      Travail(var lettre : string);
    end;
    Ce que j'aimerais faire, c'est dans l'évènement OnClick du button c'est écrire Procedure_Travail. Et c'est la procédure qui se rend compte de quel button l'a lancé.

    Il lui suffit dés lors de trouver la valeur de la variable lettre par exemple dans le hint du button; si précédemment j'ai rajouté la valeur de la variable dans le hint.

    Ce qui me permettra :
    - de ne pas rajouter des dizaines de lignes dans le code,
    - de pouvoir plus facilement faire une mise à jour du logiciel.

    D'avance merci pour vos réponses.

  2. #2
    Expert confirmé
    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 : 62
    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
    Par défaut
    Salut,

    Jette un coup d'oeil à ce thread, ça devrait t'aider.
    http://www.developpez.net/forums/sho...d.php?t=162941

    @+

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Par défaut
    Tu puex utiliser le Tag pour mettre le valeur numerique de la lettre et, après, avec Chr tu trouverás la lettre

    A plus, tu dois utilizer Sender pour obtenir le tag du bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
      if not (Sender is TButton) then Exit;
     
      Travail(Chr(TButton(Sender).Tag));
    end;
    A+

  4. #4
    Membre éclairé
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Par défaut
    Merci pour vos réponses.

    J'ai essayé de mettre en application ce que vous avez dit ... mais ça ne fonctionne pas ...

    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
    Procedure TForm1.Analyse(Sender: TObject);
    var
      Domaine : String;
      Composant : TButton;
     
    begin
      Composant := TButton(TAction(Sender).ActionComponent);
     
      Domaine := Composant.Hint;
     
      Memo1.Lines.Add(Domaine);
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      Analyse(Sender);
    end;
    J'ai alloué une valeur au Hint du Button3, mais je ne la retrouve pas dans le mémo. J'essaie de comprendre mais j'vois pas où est l'erreur.

    Encore merci pour votre aide.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Par défaut
    tu peux faire comme ça

    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
     
    Procedure TForm1.Analyse(Bouton: TButton);
    var
      Domaine : String;
    begin
      if Bouton.Hint = '' then
      begin
        ShowMessage('sans hint');
        Exit;
      end;
     
      Domaine := Bouton.Hint;
     
      Memo1.Lines.Add(Domaine);
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      if not (Sender is TButton) then Exit;
     
      Analyse(Sender);
    end;
    ça doit te fonctionner

  6. #6
    Membre éclairé
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Par défaut
    En lancant le code tel quel il m'envoit une erreur :

    E2010 Incompatibles types: 'TButton' and 'TObject'
    Mais de tout façon, j'ai peur que l'on dévie de mon idée de départ.

    En effet, le problème est que pour le moment je dois écrire pour 50 composants les mêmes lignes de codes, sauf pour la variable.

    J'aimerais rajouter dans l'inspecteur d'objet - Events - OnClick une simple procédure, genre Analyse.

    Il lance la procédure Analyse qui travail et va juste chercher la valeur du hint du bouton qui l'a lancé.

    Cela permettrait de ne pas être sugmergé de lignes de codes quasi identiques ...

    Qu'en pensez vous ?

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Par défaut
    Peut être plus simple comme ca non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Procedure TForm1.Analyse(sText : String);
    begin
      Memo1.Lines.Add(sText);
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      if Sender Is TButton then
        Analyse(TButton(Sender).Hint);
    end;
    Sinon en corrigeant la petite erreur de Cadetill

    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
    Procedure TForm1.Analyse(Bouton: TButton);
    var
      Domaine : String;
    begin
      if Bouton.Hint = '' then
      begin
        ShowMessage('sans hint');
        Exit;
      end;
    
      Domaine := Bouton.Hint;
    
      Memo1.Lines.Add(Domaine);
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      if not (Sender is TButton) then Exit;
    
      Analyse(TButton(Sender));
    end;
    Modérateur Delphi

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

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Par défaut
    Citation Envoyé par Malatar
    Peut être plus simple comme ca non ?
    Sinon en corrigeant la petite erreur de Cadetill

    [...]
    Ups, pardon, c'est vrai

  9. #9
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Vous allez vraiment chercher midi à 14h

    Sélectionne tous tes boutons, va dans l'onglet événement, puis dans OnClick, entre Analyse puis tappe sur Enter.

    Le gabarit suivant s'ouvre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Analyse(Sender: TObject);
    begin
    
    end;
    Tu n'as plus qu'à le compléter comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Analyse(Sender: TObject);
    begin
      Memo1.Lines.Add(Chr(TComponent(Sender).Tag));
    end;
    si tu utilises le Tag, ou, si tu utilises le Hint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Analyse(Sender: TObject);
    begin
      Memo1.Lines.Add(TButton(Sender).Hint);
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Par défaut
    Citation Envoyé par sjrd
    Vous allez vraiment chercher midi à 14h

    Sélectionne tous tes boutons, va dans l'onglet événement, puis dans OnClick, entre Analyse puis tappe sur Enter.

    Le gabarit suivant s'ouvre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Analyse(Sender: TObject);
    begin
    
    end;
    Tu n'as plus qu'à le compléter comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Analyse(Sender: TObject);
    begin
      Memo1.Lines.Add(Chr(TComponent(Sender).Tag));
    end;
    si tu utilises le Tag, ou, si tu utilises le Hint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Analyse(Sender: TObject);
    begin
      Memo1.Lines.Add(TButton(Sender).Hint);
    end;

    Disons qu'on lui montre ce qu'il demande :

    Citation Envoyé par Xenos
    Ce que j'aimerais faire, c'est dans l'évènement OnClick du button c'est écrire Procedure_Travail. Et c'est la procédure qui se rend compte de quel button l'a lancé.
    Même si c'est pas super bien écrit
    Modérateur Delphi

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

  11. #11
    Membre éclairé
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Par défaut
    Un grand merci à tous !!!

    La solution que propose sjrd est exactement celle que je recherchais et dont je parlais plus haut :

    Citation Envoyé par xenos
    J'aimerais rajouter dans l'inspecteur d'objet - Events - OnClick une simple procédure, genre Analyse.

    Il lance la procédure Analyse qui travail et va juste chercher la valeur du hint du bouton qui l'a lancé.
    Désolé si j'ai pas été assez clair ...

    Encore un grand merci et bonne programmation à tous !!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/02/2015, 22h28
  2. TAction -> Tag du composant qui le lance
    Par dacid dans le forum Composants VCL
    Réponses: 3
    Dernier message: 20/07/2006, 14h28
  3. [JTable] [FocusListener] Savoir le composant qui appelle
    Par IvanPopov dans le forum Composants
    Réponses: 7
    Dernier message: 27/07/2005, 14h55
  4. mmc.exe qui ne se lance pas
    Par r0d dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 27/04/2005, 18h11
  5. [Servlet] Servlet qui ne se lance jamais
    Par Shiryu44 dans le forum Servlets/JSP
    Réponses: 23
    Dernier message: 31/03/2005, 16h41

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