Je suis sous W11 avec Delphi 6 Personal Edition.
Je n'arrive pas à m'en sortir avec les évènements OnEnter et OnExit d'un TEdit ou d'un objet dérivé de TEdit.
Je sais (ou crois savoir) que OnEnter est déclenché lorsque le TEdit "gagne" le focus.
Je sais (ou crois savoir) que OnExit est déclenché lorsque le TEdit "perd" le focus.
D'après ce que je vois, un TEdit créé dans l'IDE se comporte effectivement comme ça.
Or, un TEdit (ou un TEdit dérivé) créé par programme ne génère aucun de ces deux évènements, quelque soit le contexte.
Ces objets créés par programme génèrent bien les évènements OnClick et OnKeyPress, mais JAMAIS OnEnter ni OnExit.
Je joins un projet de démo dans un fichier ZIP pour montrer le problème. Ce programme crée 4 objets:
- un TEdit créé par l'EDI Delphi
- un TEdit standard créé par programme dans le OnCreate de la form principale
- un TMyEdit dérivé de TEdit créé par programme dans le OnCreate de la form principale
- un TMemo créé par l'IDE Delphi (servant à recevoir une ligne de texte pour chaque évènement déclenché)
Au lancement, le TEdit créé par l'IDE a le focus, et la ligne corrrespondante apparaît dans le mémo
Ensuite, on frappe la touche TAB. Effet etendu: OnExit dans le premier TEdit, OnEnter dans le TEdit créé par programme, curseur dans ce dernier.
Or, on a bien OnExit sur le premier TEdit, mais OnEnter dans le TMemo, et le curseur est dans ce dernier.
Une nouvelle frappe de TAB revient vers le TEdit créé par l'IDE, avec les évènements correspondants.
Les deux objets créés par programme ne sont jamais atteints par TAB.
Maintenant, un clic dans un de ces objets créé par programme génère bien un OnClick sur cet objet, mais PAS de OnEnter !
Pire: la touche TAB ne semble avoir aucun effet: ni évènement généré ni focus déplacé
Et même le clic dans un autre objet quelconque ne génère pas de OnExit sur l'objet créé par programme où était le curseur...
J'ai encore dû rater quelque chose d'important. Pourriez-vous me mettre sur la voie ? Merci d'avance !
Voici une capture d'écran:
![]()






Répondre avec citation





Partager