Normaliser, c'est empiéter sur la créativité des auteurs, mais au plan de l'UI, cela permet de ne pas déconcerter l'utilisateurs, et au plan du code, cela permet à plusieurs développeurs de travailler en commun plus facilement.
Aucune norme ne saurait prétendre à un idéal, mais seulement un choix subjectif parmi tous les choix possibles.
Elles ne sont pas strictement obligatoires, mais il est demandé de les respecter autant que possible.
Vous trouverez ces éléments sur la page ressources.
La police des menus est Segoe UI, de couleur gris 546368, de couleur bleu clair au survol E8F0FE
Le bouton Fermer est toujours en bas à droite.
Le bouton Annuler est en bas de la colonne des boutons. Les boutons Valider et Annuler peuvent être à même hauteur en bas à droite. Dans ce cas, Annuler est à droite de Valider.
Gestan est actuellement traduit en espagnol (langue 1) et en anglais (langue 2) : il faut intégrer ces deux langues dans les langues du projet.
Pour les libellés devant être traduits, il faut générer la pré-traduction avec un Ctrl+T sur chaque libellé concerné.
Pour faciliter la traduction, tous les libellés composés dynamiquement doivent utiliser la fonction ChaineConstruit, par exemple :
// A ne pas faire
Info("Le contact " + CONTACT.NOMFAMILLE + " est inconnu.")
// A faire
Info(ChaineConstruit("Le contact %1 est inconnu.", CONTACT.NOMFAMILLE))
Tous les fichiers doivent posséder :
La charte de programmation Windev nous paraît ajouter un alourdissement non indispensable. Des conventions de nommage plus légères sont suffisantes, voir ci-dessous.
Dans la mesure du possible, n'utilisez que les images présentes dans le set d'icônes de Gestan.
Si vous utilisez une image propre à votre extension, nommez-la selon cette convention : [extension]_nomimage_[couleur]_[taille]_[nb états].png, avec [extension]=préfixe de votre extension, [couleur]=couleur de la variante de couleur éventuelle. Par exemple z27_thunder_64_1.png, ou z27_bullet_red_64_1.png. L'usage du préfixe évite que votre image soit remplacée par une image de Gestan core.
Le nombre de décimales des montants monétaires est paramétrable. Pour prendre ce paramètre en compte et mettre les montants au bon format, utilisez la fonction gf_Renvoyer_MasqueNum().
Par exemple, dans le code d'initialisation de l'écran ou de l'état :
MTTHT_Crédit..MasqueSaisie = gf_Renvoyer_MasqueNum() MTTHT_Débit..MasqueSaisie = MTTHT_Crédit..MasqueSaisie
Pour le mode test, vous pouvez faire :
MTTHT_Crédit..MasqueSaisie = EnModeTest() ? "999 999,99" SINON gf_Renvoyer_MasqueNum() MTTHT_Débit..MasqueSaisie = MTTHT_Crédit..MasqueSaisie
Le nombre de décimales des prix d'achat reste libre (notamment pour tenir compte des prix d'achats au mille d'éléments devant être revendus).
Le nombre de décimales des quantités de produit est paramétrable dans Gestan. Pour prendre ce paramètre en compte et mettre les quantités de produit au bon format, utilisez la fonction gf_Renvoyer_MasqueNum()avec le paramètre “QTPROD”.
Par exemple :
QTE_PRODUIT..MasqueSaisie = gf_Renvoyer_MasqueNum("QTPROD")
Commentez vos programmes !
Une proportion de 20% de commentaire par rapport aux lignes de code est un minimum.
N'écrivez pas pour ne rien dire, comme par exemple :
// Fermeture de l'écran Ferme()
mais écrivez pour expliquer ce que fait votre programme et pourquoi.
Fonction de gestion des erreurs, à mettre dans le code d'initialisation de la fenêtre.
A noter que la fonction gf_InfoErreur est utilisable dans beaucoup de cas d'erreurs. Le premier paramètre est le type d'erreur : c'est une variable globale commençant par MSG_
// Gestion des erreurs d'accès à la base de données SI PAS EnModeTest() ALORS QUAND EXCEPTION gf_InfoErreur(MSG_ERRINATTENDUE,2,ExceptionInfo(errMessage)) ExceptionActive() RepriseSaisie() FIN FIN
Coloration des zones de l'écran
A mettre dans l'init
gf_Coloriser()
** Alimentation de la zone “timestamp”**
A mettre juste après le FichierVersEcran() qui est habituellement en fin d'initialisation de la fiche. Le libellé TimeStamp doit s'appeler lib_DateHeure.
lib_DateHeure = gf_Alimenter_DateHeure("JRFERIE")
Fonction de contrôle de lecture : gf_InfoPasTrouve. Cette fonction affiche un message standard pour enregistrement non trouvé.
SI PAS HLitRecherche(CONTACT,IDCONTACT,VALKLE) ALORS gf_InfoPasTrouve("CONTACT",VALKLE);RETOUR
Fonction de suppression d'enregistrement :
Ici, un exemple de suppression dans la table des absences.
SI TableSelect(tbl_ABSENCE)=-1 ALORS RETOUR
// Contrôles avant validation (éventuellement)
SI ABSENCE.IVALIDE ALORS Info("Cette absence est validée, suppression non autorisée.");RETOUR
SI PAS gf_Info_Erreur(MSG_SUPPRIMER,3) ALORS RETOUR
TableSupprime(tbl_ABSENCE)
TableAffiche(tbl_ABSENCE, taCourantPremier)
Fonction d'exécution d'un traitement batch : gf_Info_Traitement. Cette fonction affiche un message standard à la fin d'une exécution, par exemple la mise à jour d'un fichier. Par exemple :
gf_Info_Traitement(nbOK,"M",nbKO,nbParcours,"Libellé complémentaire éventuel")
affichera : “Opération terminée OK, 10 enregistrements parcourus, 7 enregistrement modifiés, 0 erreurs détectées, Libellé complémentaire éventuel.”
La présence d'une documentation est obligatoire. Elle doit être disponible dans les trois langues, et accessible via un bouton de type F1, avec le code suivant :
gf_Aide("https://manuel.gestan.fr/doku.php?id=fr:wiki:referentiel:joursferies")
Ce code va ouvrir la page d'aide dans la bonne langue (fr, es, ou en), en fonction de la lange de l'interface.
Il faut activer les masques d'affichage des monétaires et des quantités de produit, en utilisant les fonctions ad hoc, comme par exemple, dans la fonction d'initialisation de l'état :
MONTANT_1..MasqueSaisie = gf_Renvoyer_MasqueNum() MONTANT_2..MasqueSaisie = MONTANT_1..MasqueSaisie
Vous pouvez mettre dans la fonction d'initialisation de l'état les lignes suivantes :
// Initialisations de l'état HLitPremier(PARAMAPPLI,RAISON_SOCIALE) IMG_LOGO = PARAMAPPLI.LOGO_R LIB_BASETAT = PARAMAPPLI.LIB_BAS_ETAT GP_ENTETE..CouleurFond = PARAMAPPLI.CL_FONDCOL LIB_IDETAT=ExtraitChaîne(MonEtat..Nom,2,"_")+" - "+DateVersChaîne(DateSys(),"JJ/MM/AA")+" "+HeureVersChaîne(HeureSys(),"HH:MM")+" - "+gCdUser
ℹ️ Autres articles “Développement Windev pour Gestan”