1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2012
    Messages : 38
    Points : 30
    Points
    30

    Par défaut Assigner dynamiquement un gestionnaire d'événement génère une erreur "Illegal expression"

    Bonjour.

    Je cherche à ajouter dynamiquement un ComboBox à un TToolBar qui doit effectuer une tâche quand la sélection change.

    Pour cette barre d'outils j'ai déjà pu assigner un gestionnaire d'événement pour les boutons à l'aide de la syntaxe qui donne l'adresse de la procédure (trouvée dans ce forum) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with TToolButton.Create(TB) do
      OnClick:=@BoutonBarreClic;
    et cela marche parfaitement.

    J'ai donc repris ce code pour la création de la liste déroulante et le compilateur me renvoie l'erreur "Illegal expression".

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      with TComboBox.Create(ToolBar1) do
        begin
          Parent := ToolBar1;
          Name := 'SelSpec';
          Hint := 'Choisir une spécification';
          AutoSize := True;
          Items.Add('Spec 1');
          Items.Add('Spec 2');
          OnChange=@SelectSpec;
          ItemIndex:=1;
        end;
    SelectSpec est déclarée ainsi dans la classe Form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      procedure SelectSpec(Sender: TObject);
    et définie normalement (généré par Ctr+Sup+C)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure TForm1.SelectSpec(Sender: TObject);
    De son côté le gestionnaire d'événement des boutons qui fonctionne est défini ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      TForm1 = class(TForm) 
    ...
        procedure BoutonBarreClic(Sender: TObject);
    ...
      end;
    ...
     
    procedure TForm1.BoutonBarreClic(Sender: TObject);
      var                                               
    ...
    Dans les deux cas la procédure qui assigne le gestionnaire est définie avant celle qui contient la création et l'assignation du composant, ce qui d'ailleurs ne devrait jouer aucun rôle puisqu'elles sont toutes déclarées dans l'interface.

    Manifestement le compilateur semble attendre des paramètres dont considère la ligne comme un appel du gestionnaire.

    Je ne comprends pas pourquoi cette différence de comportement du compilateur. Quelle erreur ai-je faite ?

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    2 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 2 933
    Points : 7 970
    Points
    7 970

    Par défaut

    C'est pê une erreur de copier/coller dans le forum, mais tu as une comparaison (égalité) et non une affectation entre le OnClick et l'adresse de la procédure à déclencher.
    Delphi 5 Pro - Delphi 10.1 Berlin Starter Edition - CodeTyphon 6.15 sous Win 7 et 5.20 sous Ubuntu 14.04
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2012
    Messages : 38
    Points : 30
    Points
    30

    Par défaut

    Non, c'était bien présent dans le code, le CTRL+SHIFT+Flèche droite que j'ai fait pour remplacer "Click" par "Change" ayant pris le ":=" et le "@", je n'ai pas du reculer suffisamment et et fait sauter le ":". Erreur grossière que je n'ai pas relevée.

    Merci Tourlourou, cela fonctionne maintenant comme attendu.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/02/2010, 11h09
  2. Réponses: 1
    Dernier message: 24/09/2006, 09h13
  3. Maj dynamique d'un gestionnaire d'événement
    Par Herode dans le forum JavaScript
    Réponses: 2
    Dernier message: 31/03/2006, 11h15
  4. [VBA] Gestionnaire d'évènement commun
    Par Neilos dans le forum Access
    Réponses: 11
    Dernier message: 14/06/2005, 12h18
  5. Perte de gestionnaire d'événements dans une fenêtre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/08/2004, 21h14

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