|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Débuté par alexeyk, 13 déc. 2004 20:19 - 3 réponses |
| |
| | | |
|
| |
| Posté le 13 décembre 2004 - 20:19 |
Bonjour,
J'aimerais simplifier le contrôle des saisies dans les fiches. Et j'ai besoin de donner le focus à des champs de saisie qui peuvent se trouver dans les onglets ou super – champs imbriqués. Comment faire?
Ce que j'aimerais réaliser : - Chaque fichier comporte une liste de rubriques obligatoires (rubriques_obligatoires_fichier=rubrique1+tab+rubrique2...) paramétrée à l'init du programme - L'utilisateur valide la saisie (bouton "enregistrer") d'une fenetre fiche - Le programme analyse tous les champs de saisie de la fenêtre (énumération par programmation) - Si un champ a une liaison fichier, je dois voir si la rubrique est obligatoire (cf. la liste), puis vérifier si l'utilisateur a saisi une valeur correcte ou non (fenetre.champ dans liste_valeurs_interdites (0, null, ‘’, …)) - Si la rubrique est obligatoire et l'utilisateur n'a rien saisi alors il faut : colorier le libellé du champ en rouge ajouter le libellé champ dans une chaîne de compte rendu d'erreur - A la fin du test sur tous les champs de la fenêtre il faut : afficher un message d'erreur (liste de tous les champs en erreur) donner le focus (reprisesaisie / ecranpremier ??? -> c’est la que je cherche une solution) au premier champ en erreur
1) Comment énumérer tous les champs d'une fenêtre qui ont une liaison fichier 2) Code générique pour donner le focus à un champ quelconque 3) Contraintes : - Un champ peut être dans un onglet / super - champ - Les onglets onglet / super - champs peuvent être imbriqués sur plusieurs niveaux - Il faut que le code fonctionne sur n'importe quelle fenêtre dont on ne connaît pas le contenu à l'avance - La plupart des champs concerné sont des champs de saisie simples (monétaire, numérique, date, texte …) ou des combos. On ne contrôle pas la saisie dans les tables et autres champs complexes.
Le but c'est de positionner automatiquement l'utilisateur sur les champs en erreur quand il valide la fiche. L'utilisateur corrige la saisie, valide, et le programme le positionne sur le champ en erreur suivant, jusqu'à validation de la fiche (tous les champs obligatoires sont renseignés).
A vous les experts 
Cordialement, Alexey K. |
| |
| |
| | | |
|
| | |
| |
| Posté le 14 décembre 2004 - 11:45 |
>1) Comment énumérer tous les champs d'une fenêtre qui ont une liaison fichier
J'ai pas testé, mais en utilisant une fonction de ce style, ça doit marcher :
PROCEDURE MonEnumere (MonParent)
MonChamp = EnumereSousElement (MonParent, enumPremier) TANTQUE MonChamp <> "" SELON MonChamp..Type CAS typOnglet, typSuperChamp, ... : MonEnumere ({MonParent+"."+MonChamp, indChamp}..nom) CAS typComboAVS, typDate, ... : SI {MonParent+"."+MonChamp, indChamp}..LiaisonFichier <> "" ALORS // Ajouter le champ à la liste FIN AUTRES CAS : FIN
EnumereSousElement (MonParent) FIN
2) Code générique pour donner le focus à un champ quelconque
Si dans la liste obtenu ci-dessus tu sauvegardes {MonPArent+"."+MonChamp}..Nom comme élément de la liste, il suffit de faire RepriseSaisie (ElementDeLaListe) |
| |
| |
| | | |
|
| | |
| |
| Posté le 14 décembre 2004 - 17:18 |
Code 1 : énumération des champs, ne fonctionne pas - Avec un cas simple d'imbrication : fenêtre(onglet1Volet2(onglet2Volet3(champ))) - Si un volet / super - champ de la chaîne n'est pas accessible par tab et n'a pas d' ordre de navigation
Code 2 : prise de focus sur champ, ne fonctionne pas - Avec un cas simple : la fenêtre contient un onglet avec 2 volets, le volet ouvert est le 1, le champ se trouve dans le 2eme. RepriseSaisie n'ouvre pas le volet 2
Il faut que à la fin du traitement : - Les bons volets soient positionnés (si le champ est dans le volet 2 et que l'utilisateur est sur le volet 1, il faut ouvrir le volet 2 par programmation) - Il faut que le curseur de saisie soit positionné dans le champ
Donc le problème n'est pas aussi simple qu'il n'y parait
Cordialement, Alexey K. |
| |
| |
| | | |
|
| | |
| |
| Posté le 15 décembre 2004 - 10:30 |
Code 1 : énumération des champs, ne fonctionne pas - Avec un cas simple d'imbrication : fenêtre(onglet1Volet2(onglet2Volet3(ch amp)))
J'ai pas de problème à priori, essaie d'exécuter pas à pas pour voir d'où te vient l'erreur : il faut peut-être un peu plus détailler chaque cas (onglet/superchamp/... ). Note qu'il doit y avoir un '.' entre le nom de ton onglet et le numéro de ton volet
Il faut que à la fin du traitement : - Les bons volets soient positionnés (si le champ est dans le volet 2 et que l'utilisateur est sur le volet 1, il faut ouvrir le volet 2 par programmation) - Il faut que le curseur de saisie soit positionné dans le champ
C'était un exemple rapide que j'ai donné, dans des cas un peu plus complexes il peut être nécessaire d'analyser le nom extrait de ta liste (si fenêtre n'est pas celle en cours, l'afficher devant, affecter l'onglet au numéro de volet corespondant, ... ). L'aide est suffisamment explicite pour ça. |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|