Abstraction Concrète : Module Forme


Les formes regroupent des champs constitués par des zones d'édition étiquetées. La saisie dans les zones d'édition incluses dans une forme est contrôlée.

Le type forme comporte un champ de fenêtre de forme nommé fen, et un champ enreg constitué par un tableau des zones d'édition de la forme.

La fonction insere_champ forme num insère un nouveau champ dans la zone d'édition num de la forme forme.
La fonction edite_champ forme num édite le champ contenu dans la zone d'édition num de la forme forme. Cette fonction retourne en résultat une valeur du type touche correspondant au rapport d'édition de la fonction editer du module edition.
La fonction def_champ frm num dimensionne le champ num de la forme frm et l'affiche avec son étiquette et sa zone d'édition. Le résultat fourni est un triplet (xz, yz, lz) dans lequel xz et yz déterminent les coordonnées de position de la zone d'édition associée au champ et lz sa longueur.
La fonction def_forme (posx,posy) largeur tit fl construit une forme nommée tit avec une largeur totale (label + zone d'édition) largeur, à partir de la position colonne posx et ligne posy. L'argument fl de la fonction def_forme est une liste de paires (étiquette de champ, longueur du champ) à raison d'une paire pour chacun des champs inclus dans la forme. La hauteur de la fenêtre de la forme créée est égale au nombre de champs de la liste fl + 2 (lignes de bordures).
La fonction init_forme frm initialise et affiche la forme frm.
La fonction actualise_forme frm actualise les valeurs des zones d'édition de la forme frm.
La fonction longueur_totale_champs frm n retourne la longueur totale additionnée des champs de la forme frm depuis le champ n. La fonction position_champ num frm retourne la position du début du champ num de la forme frm.
La fonction champs_dans_enreg frm retourne une chaîne formée par la concaténation des champs de la forme frm, pour construire un enregistrement de longueur fixe par exemple.
La fonction enreg_dans_champs frm str_enreg installe les champs de la forme frm à partir d'une chaîne correspondant à un enregistrement de longueur fixe str_enreg.
La fonction nouvelle_forme frm réinitialise le champ de chaque zone d'édition de la forme frm.
La fonction modifier_forme frm contrôle la saisie dans la forme frm. La touche <Ctrl Origine> valide la saisie et déplace le curseur d'édition au début du premier champ de la forme courante. La touche <Ctrl Fin> valide la saisie et déplace le curseur d'édition au début du dernier champ de la forme courante. La touche <Tab> valide la saisie et déplace le curseur d'édition au début du champ suivant de la forme courante. La touche <Maj Tab> valide la saisie et déplace le curseur d'édition au début du champ précédent de la forme courante. La touche <Entrée> valide et termine la saisie. La touche <Echap> annule et termine la saisie. Pour les autres touches, le fonctionnement est identique à celui de la fonction editer du module edition.

Exemple


(**** Forme : Exemple, phrases d'implémentation et résultats ****)

let f1 = 
  def_forme (41,2) 40 "Adresses"
    [("Nom", 25);("Prenom", 25);("Fonction", 25);("Societe", 25)] ;;

initforme f1 ;


 +Adresses------------------------------+
 ¦Nom :                                 ¦
 ¦Prenom :                              ¦
 ¦Fonction :                            ¦
 ¦Societe :                             ¦
 +--------------------------------------+