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) :
et cela marche parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 with TToolButton.Create(TB) do OnClick:=@BoutonBarreClic;
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
SelectSpec est déclarée ainsi dans la classe Form1 :
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;
et définie normalement (généré par Ctr+Sup+C)
Code : Sélectionner tout - Visualiser dans une fenêtre à part procedure 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 procedure TForm1.SelectSpec(Sender: TObject);
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.
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 ...
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.
Partager