Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - Evolutions récentes

15. Modifications apportées dans la version 4.35 (juin 97)

Fonctions de librairie

Champs SCAN

FLD_set_check() : fixe la condition du SCAN pour un champ de façon à modifier au runtime le comportement de la fonction de SCAN des PAGES.

Clipboard

Trois fonctions permettent d'utiliser le clipboard de Windows dans une application :

        WscrClipSet(U_ch *txt) qui place du texte dans le clipboard
WscrClipIsData() qui indique si du texte est disponible
U_ch *WscrClipGet() qui lit le texte du clipboard

DDE

Implémentation d'un serveur et d'un client DDE.

        WscrDdeServer    : initialisation et enregistrement du serveur DDE
WscrDdeServerEnd : fermeture du serveur

WscrDdeGet : retrouve une information en provenance d'un serveur DDE
WscrDdeSet : poste une information pour un serveur DDE

WscrDdeConnect : ouvre une conversation avec un serveur DDE
WscrDdeEnd : termine une conversation
WscrDdeGetItem : retrouve une information
WscrDdeSetItem : poste une information

SCROLL

Fonctions d'alignement pour les cellules, les titres de lignes et de colonnes

sc_falign(SCROLL *, int l, int c) sc_flalign(SCROLL *, int l) sc_fcalign(SCROLL *, int c)

Nouvel élément client : entier sc_ncl.

Fonctions PG_edit() et PG_edit_window()

Ces fonctions retournent -1 ou -2 si l'action ABORT a été exécutée.

Langage SCR

TPAGE

Implémenté en mode caractères. L'implémentation ressemble à une A_BAR en mode caractère. Trois nouveaux attributs sont ajoutés au TPAGES : back, rattr, box.

PAGE/FIELD

Ajout de touche fonction d'accès direct au champ (ALT_A par exe.). La première lettre correspondant dans le Prompt du champ est soulignée de façon à permettre le placement direct en Windows sur le champ en question. Non encore opérationnel en mode caractère.

WIN_SKIP n

Cette valeur permet de laisser tomber les n premières lignes d'une PAGE pour Windows, par exemple dans le cas de lignes de titre. Tous les DRAW qui se trouvent avant la n+1ème ligne sont ignorés dans la boite de dialogue générée.

Auparavant, tous les champs se trouvant avant la nème ligne étaient sautés, de sorte que même si WIN_SKIP valait 0, les DRAWS (Prompt y compris) de la ligne 0 étaient annulés.

LARGEUR MENUS

Pour élargir tous les menus d'une certaine largeur (par exemple tous les menus Yes/No, soit ceux de trois caractères), on peut utiliser WIN_NCPFLD. Cependant, la largeur utilisée pour créer le menu en Windows et celle du champ (3 pour Yes/No) plus 3 caractères.

Scan Page

Nouveaux attributs des champs d'une PAGE :

La fonction de librairie FLD_set_check(obj, shift, attr) permet de modifier la valeur de l'attribut au runtime.

GLOBAL

La directive BOX_1 (qui remplace dans l'écran tous les box 1-2 et box 2 par des box 1) est supportée sous Windows: le link fonctionne. Elle n'a évidemment aucun effet sous Windows.

Compteur de SCAN

L'affichage et le traitement de compteurs est corrigé et amélioré: pendant le comptage, le bouton affiche le texte "Stop". A la fin du traitement, le texte "Ok" remplace le texte "Stop".

De plus, une touche ou un click sur le bouton OK est attendu en fin de scan comme en mode caractère.

Attention, dans le cas d'un scan avec affichage dans une PAGE, il n'est plus possible d'arrêter le traitement en pressant une touche. En effet, c'est le mécanisme spécifique à la PAGE scr_incr qui permet de vérifier qu'une touche est pressée ou non.

WSCROLL

La partie non utilisée des colonnes dans un écran de SCROLL est réparti entre les premières colonnes de façon à avoir toujours un nombre entier de colonnes dans l'écran.

Les modifications de taille des fenêtres de SCROLL fonctionnent correctement, y compris pour les titres de colonnes

Un nouveau champ getalign() dans la structure WSCROLL permet de choisir l'alignement pour chaque cellule. Cette fonction a comme syntaxe:

        getalign(WSCROLL *wscrl, int line, int col)

elle retourne

Les cellules ne contenant que des -, des = ou leur équivalent semi-graphique sont remplacés par des lignes horizontales traversant toute la cellule.

Implémentation des fonctions Cut et Paste pour les copies de cellules ou les échanges entre programmes. Cut copie les cellules sélectionnées ou la cellule courante dans le clipboard. Paste ne fonctionne que si la fonction settext est définie dans la structure WSCROLL.

Cadre autour de la cellule d'édition (si la fonction settext est définie).

SCR4_E

La présence de champs HIDDEN dans les PAGES pouvait annuler certains textes (DRAW ou texte des SCREENS). Cette erreur est corrigée.

MP_EDIT_ISAM

La BPG se met parfois toute seule en OUTPUT pour tous les champs. Une tentative de correction a été apportée.

Problème d'édition des BC

Lorsqu'un BC est édité à partir d'appels du C, il faut éviter d'afficher le BC avant la recherche. Si on le fait, la gestion des PAGES sous Windows fait que le premier champ input de la APG conserve la valeur qu'il avait au moment du BC_display().

En particulier, l'écriture suivante :

        if(BC_open(bc_adr)) return(-1);
BC_display(bc_adr);
SCR_set_text(ap_bc_adr_code, "12345 ");
BC_search(bc_adr, 0);
BC_search_lbcs(bc_adr);
BC_display_lbcs(bc_adr);
while(SCR_LKEY != SCR_F2 && SCR_LKEY != SCR_ESCAPE)
BC_edit_lbcs(bc_adr);
BC_undisplay(bc_adr);

pose un problème : la valeur "12345" placée dans la PAGE ou sa remplaçante provenant du BC_search() (suite à l'appel à SCR_isam_to_page() dans BC_search()) est perdue pour des raisons de traitement interne des PAGES sous Windows au moment de BC_edit_lbcs(). Il en va de même si on utilise BC_edit() au lieu de la boucle sur BC_edit_lbcs().

En fait, les lignes qui précèdent devraient logiquement être écrites:

        if(BC_open(bc_adr)) return(-1);
SCR_set_text(ap_bc_adr_code, "12345 ");
BC_search(bc_adr, 0);
BC_display(bc_adr);
while(SCR_LKEY != SCR_F2 && SCR_LKEY != SCR_ESCAPE)
BC_edit_lbcs(bc_adr);
BC_undisplay(bc_adr);

Ce qui est plus court et n'effectue qu'une seule lecture des lignes de BC. En effet, la fonction BC_search() se charge de lire les lignes du BC. Donc, on ouvre le BC, on place la valeur de recherche, on recherche et ensuite seulement on affiche.

Mot de passe au démarrage d'une application

Il est possible d'afficher des messages et de demander un mot de passe au démarrage d'une application Windows. Deux fonctions peuvent être exploitées à cet effet:

WscrStart1()

Cette fonction s'exécute avant le chargement du .scr. On ne peut donc à ce moment afficher une PAGE pour demander un mot de passe Il est par contre possible d'afficher une image ou du texte. Actuellement aucune fonction SCR n'est implémentée à cet effet. Par contre, l'API Win32 offre de nombreuses possibilités.

WscrMain()

Cette fonction s'exécute après chargement du .scr. On peut donc y employer les objets de SCR. WscrMain() retourne le handle vers la fenêtre principale de l'application. En règle générale, on souhaitera que la fenêtre de l'application soit affichée sous la fenêtre de mot de passe. Il faudra pour cela procéder de façon un peu détournée:

C'est la variable hMainWnd qui devient père des fenêtres créées par PG_edit*. Il faut donc qu'elle soit connue avant de lancer PG_edit*(). Si cette variable vaut 0, les fenêtres PG_edit*() n'ont pas de père: elles ne peuvent être blocantes par rapport à la fenêtre principale de l'application.

Exemple

            HWND WscrMain()
{
hMainWnd = WapEditAppl(appl);
if(PG_edit_pwd(rcp_chpwd, RC_PASSWD, SCR_ESCAPE, 2))
return(0);
return(hMainWnd);
}

Position des MENUS et des PAGES

Il est possible de positionner sous Windows les MENUS édités avec la fonction MN_edit(). Pour ce faire, il suffit de fixer la valeur des éléments mn_w_x et mn_w_y de la structure MENU.

Pour obtenir des valeurs adéquates, on peut se baser sur la position absolue du champ d'une PAGE ou de la PAGE elle-même. Ces valeurs sont obtenues par la fonction WscrGetFldPos(). Si le numéro du champ est négatif, la position et la taille de la PAGE sont retournées au lieu de celles d'un champ.

    WscrGetFldPos(PAGE *pg, int fld_nb, int *x, int *y, int *w, int *h)

Exemple

    WscrGetFldPos(my_pg, 5, &x, &y, &w, &h);
mn->mn_w_x = x;
mn->mn_w_y = y + h;
MN_edit(mn);

On peut également positionner une PAGE en fixant les valeurs pg_w_x et pg_w_y de la structure PAGE.

MPAGES

Les mots-clés NODELETE, NOMODIFY et NOCREATE sont pris en compte dans la gestion sous Windows des MPAGES: les options correspondantes sont mises en grisés et désactivées.

EDIT INDEX

La saisie des champs d'un index dans une PAGE en vue d'une recherche limite les champs accessibles aux seuls champs de l'index sélectionné.

De plus, le fait de presser ENTER suffit à valider la recherche.

Cette version n'est pas encore au point dans toutes les circonstances.

Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be