| |
Posté le 06 juin 2023 - 17:18 |
Bonjour,
J'aimerai utiliser la fonction Evénement() pour connaître la modification d'un état d'un champ. Je n'arrive pas à trouver le message windows qui permet de détecter la modification d'un état d'un champ ?
Sinon existe-t-il une autre manière de détecter la modification d'un état d'un champ d'une fenêtre ? Exemple SAI_NOM..Etat = Actif qui passe à SAI_NOM..Etat = Grisé
Merci de vos retour |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 186 messages |
|
Posté le 06 juin 2023 - 19:48 |
Bonjour,
avec un timer qui surveille le changement de l'état ? Ex :
Procedure ScanneEtat()
gnNumTimer = TimerSys("ScanneEtat",5 s)
SI gnNumTimer = 0 ALORS
Erreur ("Timer non créé")
SINON
SELON SAI_NOM..Etat CAS Actif : CAS Grisé : FIN FIN Message modifié, 06 juin 2023 - 19:48 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 397 messages Popularité : +13 (13 votes) |
|
Posté le 06 juin 2023 - 22:48 |
Bonsoir,
Dans ce cas précis de détection de l'état d'un champ de saisie, il devrait être possible de surcharger la propriété ..Etat et d'effectuer le traitement que vous souhaitez dans la partie Ecriture de la propriété.
Procedure Etat()
RENVOYER MoiMême..Etat
Procedure PUBLIQUE Etat(Valeur)
Trace("nouvel etat",Valeur)
MoiMême..Etat = Valeur
|
| |
| |
| | | |
|
| | |
| |
Posté le 07 juin 2023 - 10:15 |
Bonjour,
L'idée est bonne, j'ai déjà surchargé une Fonction WLangage, mais une propriété, je ne sais pas si c'est possible.
Merci |
| |
| |
| | | |
|
| | |
| |
Posté le 07 juin 2023 - 10:17 |
Bonjour,
Merci de la réponse, mais j'évite d'utiliser les timers qui peuvent prendre de la ressource système, pour rien.
Cordialement |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 450 messages Popularité : +31 (43 votes) |
|
Posté le 07 juin 2023 - 10:36 |
Bonjour
Peut être une piste avec les groupes ? mettre 2 champs de saisie dans un groupe appelé GR_saisie par exemple et ensuite faire un test sur GR_saisie.modifie = vrai
je m'en sert pour éviter d'ajouter un bouton enregistrer et de proposer automatiquement à l'utilisateur d'enregistrer que si il y'a eu des modifications
cdlt
DGMessage modifié, 07 juin 2023 - 10:39 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 397 messages Popularité : +13 (13 votes) |
|
Posté le 07 juin 2023 - 14:46 |
David a écrit :
Bonjour,
L'idée est bonne, j'ai déjà surchargé une Fonction WLangage, mais une propriété, je ne sais pas si c'est possible.
Merci
Ma proposition tient techniquement (il est tout à fait possible de surcharger la propriété Etat d'un champ de saisie), j'ai même re-testé sur WinDev 28 avant de poster ici.
Mon usage du conditionnel était surtout parce que je ne sais pas si ça répond exactement à votre problématique, et je n'ai pas testé si cela marche "tout le temps" : par exemple, si le champ fait partie d'un groupe et que c'est le groupe qui est grisé. C'est principalement cela qu'il faudra vérifier. |
| |
| |
| | | |
|
| | |
| |
Posté le 08 juin 2023 - 13:52 |
Merci de ta réponse
En effet ça fonctionne bien si tu surcharges la propriété de chaque champ Mais je ne peux pas modifier tous les champs et toutes les fenêtres de mon projet
Je continue d'investiguer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 397 messages Popularité : +13 (13 votes) |
|
Posté le 08 juin 2023 - 18:45 |
Donc si je comprends bien : vous cherchez à détecter l'instant où un champ (n'importe lequel) dans n'importe quelle fenêtre passe en grisé ? Et ce si possible sans avoir à modifier chacun des champs concernés.
Cela semble assez tordu, et même si on peut sortir les EnumèreChamp() et les TimerSys() pour faire le taf, ça risque de bouffer un paquet de performances en fonction du degré de réactivité que vous souhaitez.
Donc, si on en revenait d'abord aux bases : quel est le but recherché d'une telle fonction ? Mettons qu'on arrive à une fonction qui fasse ça correctement, qu'est-ce qu'elle va faire du résultat ?
En fonction de cela il y a peut-être une solution complètement différente qui pourrait satisfaire. |
| |
| |
| | | |
|
| | |
| |
Posté le 12 juin 2023 - 09:43 |
bchanudet a écrit :
Donc si je comprends bien : vous cherchez à détecter l'instant où un champ (n'importe lequel) dans n'importe quelle fenêtre passe en grisé ? Et ce si possible sans avoir à modifier chacun des champs concernés.
Cela semble assez tordu, et même si on peut sortir les EnumèreChamp() et les TimerSys() pour faire le taf, ça risque de bouffer un paquet de performances en fonction du degré de réactivité que vous souhaitez.
Donc, si on en revenait d'abord aux bases : quel est le but recherché d'une telle fonction ? Mettons qu'on arrive à une fonction qui fasse ça correctement, qu'est-ce qu'elle va faire du résultat ?
En fonction de cela il y a peut-être une solution complètement différente qui pourrait satisfaire.
Bonjour
C'est une gestion de droits que j'ai mis sur les fenêtres. Chaque champ à un droit et à chaque modification de l'état d'un champ, qu'il soit par l'utilisateur ou par le programme, une procédure est lancée et met en grisé le champ si l'utilisateur n'a pas le droit.
Cette méthode fonctionnait bien avec l'événement de Windows WM_ERASEBKGND A chaque modification graphique d'un champ une procédure était appelée et me permettait de mettre à jour le champ mais en Windev 28, ça ne fonctionne plus correctement.
Merci de votre aide
Bonne journée |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 889 messages Popularité : +227 (347 votes) |
|
Posté le 12 juin 2023 - 11:52 |
Bonjour, Si j'ai bien tout compris, tu crées un groupware perso. Si c'est le cas, fouille dans le code des fonctions gpu_XXX ou dans celui des fenêtres, tu devrais trouver ton bonheur.
Note : On trouve les fonctions gpu_XXX dans le composant interne créé lors de l'utilisation du GPW en manuel (le retour à l'option sans GPW conserve ce composant.)
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |