2010-02-27 4 views
0

J'ai écrit un composant d'éditeur de texte avancé (largeur fixe, coloration syntaxique, etc.) dans Delphi, en utilisant l'API Windows combinée avec l'élément TCanvas, et ça marche très bien, sauf pour une chose: Si je mets l'accent sur un autre contrôle à l'intérieur de la même application qui affiche un signe, comme un TEdit, en volant le focus de mon éditeur, le signe du nouvel éditeur (tel que TEdit) n'est pas affiché; à la place, le curseur se déplace dans mon composant éditeur! Par exemple, si j'écris un caractère dans le nouvel éditeur (TEdit), il apparaîtra comme prévu, et le curseur se déplacera vers la droite dans mon composant. Qu'est-ce qui peut causer ça? Je soupçonne qu'il y a un certain conflit entre la manipulation de Win API du focus du clavier et la gestion de la VCL. Dans mon composant d'éditeur, j'utilise CreateCaret en réponse à WM_SETFOCUS et DestroyCaret en réponse à WM_KILLFOCUS. Apparemment, le problème se produit uniquement si le nouveau contrôle d'édition est dans une nouvelle fenêtre modale.Delphi Focus Problème vu par Caret

+0

Sans l'exemple de code, on ne peut que deviner. Peut être votre composant de l'éditeur de texte reçoit un message WM_SETFOCUS incorrect après avoir reçu WM_KILLFOCUS et avoir perdu le focus actully. – kludg

+0

Malheureusement, ce n'était pas ça ... –

Répondre

1

J'ai trouvé un bogue trivial dans le code du composant. Mes excuses.

+0

Alors s'il vous plaît accepter une réponse (Loren ou le vôtre). Cela supprimera le drapeau sans réponse. –

+0

Je le ferai dans quatre heures. (Le serveur ne me laisse pas le faire maintenant.) –

0

Ma première pensée serait que vous n'obteniez pas le message WM_KILLFOCUS. Je voudrais construire un diagnostic pour vous dire si cela se produit ou non.

Je suis PAS incliné à utiliser un débogueur pour ce genre de problème, je trouve que faire des choses comme modifier le titre fonctionne mieux lorsque vous essayez de diagnostiquer des interactions comme celle-ci.

+0

Merci, mais je suis certain que le code est exécuté. (J'ai essayé avec le bip.) –