PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Capture touche dans colonne table de type combo avec saisie
Capture touche dans colonne table de type combo avec saisie
Iniciado por luc.st.yves_pasdespam, jun., 18 2005 12:02 AM - 5 respostas
Publicado em junho, 18 2005 - 12:02 AM
Bonjour,

j'ai une table, dans laquelle j'ai un champ Combo avec saisie.

C'est très bizarre mais sur tous les champs colonne de ma table, l'événement "touche enfoncée" de ma table réponds à merveille sauf sur cette colonne qui est une combo en saisie. Si j'enlève la saisie dans les propriétés de ma combo, alors la touche enfoncée est appelée mais dès que je remets la saisie, l'événement ne réponds pas.

Quelqu'un a une solution ?

Merci !

Luc
Publicado em junho, 19 2005 - 3:32 PM
C'est vrai que les combo et interrupteur dans les tables n'ont pas un comportement
très propre...
Publicado em junho, 20 2005 - 2:13 PM
Il faut connaitre le système de gestion et de propagation des évènements.

Quand un évènement est capturé, il n'y a plus de propagation.


Voir Evenement() pour capturer l'évènement,
SendMessage() pour l'envoyer au combo.

Cordialement,

C.AUBRY
Publicado em junho, 20 2005 - 6:48 PM
Christian, peux-tu préciser ta réponse car je ne vois pas bien le lien.

Mon problème est que si l'on met un champs combo dans une table, l'événement "toucheenfoncée" ne sera pas appelé lorsque j'appuie sur une touche quand je suis en saisie dans la combo, et celà, seulement si j'ai activé la saisie dans ma combo.

Si c'est un autre champs, ça fonctionne. Si ma combo n'est pas en saisie, ça fonctionne aussi.

On dirait simplement que le fait que la combo soit en saisie, et donc Windev accepte que l'on tape des caractères dans la combo, la capture de touche est ignorée.

Si tu veux bien préciser ta pensée, merci à l'avance.

Luc
Publicado em junho, 21 2005 - 10:53 AM
La captre de l'évènement touche enfoncé est effectué depuis la table.
Lorsqu'il y a une combo, l'évènement est propagé non dans la table mais dans la combo.

Exemple :
Pour l'évènement touche enfoncé : Erreur( "coucou"), fonctionne pour un champ de saisie.

Par contre, dans le code de la combo, si tu ajoute dans le code :
Entrée de colonne1
Erreur( "coucou1"), le message s'affiche.

Donc, l'évènement est envoyé directement dans la combo ( propagation de l'évènement )

Le même problème existe pour toutes les applications windows.
Un message est envoyé, si aucune méthode exite pour récupérer l'évènement, elle sort du programme existant et passe au moteur windows, ainsi de suite. C'est pour cette raison que parfois des programmes plante avec un message. Dans le meilleur des cas, c'est l'apli qui est fini, dans le pire des cas, il faut re-bouter le PC.


Je suis nouveau utilisateur de windew, mais je connais bien d'autre logiciel ( clipper, Visual objet ). La gestion des erreurs est aussi complexe que le logiciel.

Avec des BREAK, RECOVER, etc... pour éviter une propagation qui sorte du contexte.

Il en est de même pour les fenêtre avec des menu. Un menu peut être envoyé d'une fenêtre, si la fenêtre ne peut pas interpreter le menu, l'évènement remonte jusqu'au menu principal. ( iconisation de toute les fenêtres par exemple ). Imagine que rien ne permet de capturer cet évènement, l'iconisation se fera pour toutes les fenêtre de l'appli mais aussi pour toutes les fenêtre ouverte dans window ( explorer, etc ...) Génant, non ?.

Cordialement,

C.AUBRY
Publicado em junho, 21 2005 - 7:09 PM
Merci Christian,

maintenant c'est pluc clair.

Et ma conclusion est que, étant donné que Windev ne nous donne pas accès à l'objet Combo en tant que tel à l'intérieur de la colonne, nous ne pouvons donc pas intercepter cet événement. Par contre, je pourrais certainement capturer l'événement en le faisant moi-même par les API de windows à l'iade du Handle du combo. Reste à voir si je peux récupérer le Handle de ce combo car encore une fois, Windev ne nous donne pas vraiment accès de façon directe aux objets Combos dans une table.

Luc