Forum iSeries, hébergé par xdocs400.com

As400, iSeries, i5, System i, une machine qui évolue pour être de plus en plus puissante.

Vous n'êtes pas identifié(e).

Annonce

ATTENTION : Le système anti-spam est à nouveau opérationnel. Nous avons réactivé les inscriptions.

#1 2007-10-26 23:13:18

LeChienQuiFume
Membre
Lieu : Perche
Inscription : 2007-02-26
Messages : 25

position cursor cobol/400

Bonjour à tous,
Je voudrais pouvoir maitriser la position du curseur dans mon fichier écran:
DISPLAY FLD  SPACE POS.
me donne bien le nom de mon champ et la position dans ce dernier.
Maintenant je voudrais pouvoir en appuyant sur la touche F5 par exemple, placer le curseur sur un champ choisi.
En RPG pas de problème mais en Cobol/400 je n'ai pas trouvé.::(
Merci pour votre aide.

Hors ligne

#2 2007-10-27 09:36:15

Hédhili Jaïdane
Membre
Inscription : 2007-07-20
Messages : 248

Re : position cursor cobol/400

Bonjour.

Si tu fais des display/accept classiques AMHA tu ne peux pas gérer la position du curseur, à moins d'utiliser leurs focntions avancées et à ce moment là tu fais comme en Cobol/2 (MF,MS) : Display ... AT LINE lineNumber COLUMN ColNumber .... WITH .....

Par contre, et puisque tu vas utiliser et gérer F5, tu fais comme en RPG, tu utilises les indicateurs dans les formats pour conditionner la position du curseur.

        01  INDICS.
              03 IND  PIC 1 OCCURS 99 INDIC 1.
..../...   
              READ ECRAN.........
              IF CDE = 05 ....
      * ou IF F5 si tu as fait un 88   F5 value 05.           
                  MOVE B"1" TO IND(nn).
              WRITE ECRANRD.... INDIC INDICS.

Si je ne réponds pas à ta question donne nous un peu plus de détails sur ton pb.


Hédhili Jaïdane
Libre et Indépendant

Hors ligne

#3 2007-10-30 22:45:06

remit
Membre
Inscription : 2007-02-25
Messages : 232

Re : position cursor cobol/400

Il y a au moins deux manières de faire :

1. Pour placer le curseur sur la première position d'un champ, spécifier pour ce champ le mot-clé DSPATR avec l'attribut PC (soit DSPATR(PC)). A chaque écriture du format d'écran, le curseur se positionne sur cette zone (si un autre champ de l'écran possède le même attribut d'affichage, c'est le plus en haut puis le plus à gauche qui l'emporte).
On obtient un positionnement conditionnel en jouant avec les indicateurs attachés au mot-clé.

2. Le mot-clé de niveau format CSRLOC permet de positionner le curseur n'importe où sur l'écran à l'écriture du format. Ceci est fait avec deux zones numériques cachées (la première pour le n° de ligne, la deuxième pour le n° de colonne) qui doivent être déclarées dans le format en même temps que le mot-clé. Lors de l'écriture du format, le curseur se positionne selon les valeurs données à ces deux zones par le programme.

A mon avis, la première manière est la plus simple à utiliser, et suffisante dans la plupart des cas.

Hors ligne

#4 2007-11-05 12:31:11

LeChienQuiFume
Membre
Lieu : Perche
Inscription : 2007-02-26
Messages : 25

Re : position cursor cobol/400

Merci beaucoup pour vos réponses.
Je m'étais arrêté sur la première solution DSPATR(PC) qui ne fonctionne pas encore(je cherche à savoir pourquoi).
La deuxième CSRLOC fonctionne sans problème mais rend le code plus flou.
Merci encore.

Hors ligne

#5 2007-11-06 08:38:32

remit
Membre
Inscription : 2007-02-25
Messages : 232

Re : position cursor cobol/400

Normalement, DSPATR ne devrait pas poser de problème.

Je vérifierais :

- si DSPATR est conditionné par un indicateur
  est-que cet indicateur est bien positionné à "1" par le programme ?
  est-ce que le WRITE du format d'écran fait bien référence aux indicateurs d'écran ?

- si DSPATR est inconditionnel
  est-qu'une zone précédente dans l'écran (c'est à dire plus à gauche ou plus en haut) n'a pas acquis le curseur ?

Hors ligne

#6 2018-04-20 10:11:49

ctalhouet
Membre
Inscription : 2013-05-30
Messages : 90

Re : position cursor cobol/400

Bonjour
Pour faire site à cette discussion ,

Existe t'il une solution pour positionner le curseur sur une zone en indiquant le nom de cette zone ?

Plutot que de gerer des indicateurs par zone pour indiquer le PC , on pourrait positionner directement le curseur  sur la zone en erreur .

Cdt

Hors ligne

#7 2018-04-20 13:18:39

larry57
Membre
Lieu : Luxembourg
Inscription : 2017-04-21
Messages : 82

Re : position cursor cobol/400

Bonjour,

Oui, c'est possible :
dans ton DSPF :
A                                      RTNCSRLOC(&ENREG &ZONE)   
A                                      CSRLOC(@NULIG     @NUCOL)   
A            ENREG         10A  H                         
A            ZONE          10A  H                         
A            @NULIG         3S 0H                         
A            @NUCOL         3S 0H                         

Dans ton programme :
if ZONE ='YTITRE'; // YTITRE est le nom de ma zone écran
Endif;

// poitionnne le curseur en 11/31
@NULIG = 11;
@NUCOL = 31;


Larry57

Hors ligne

#8 2018-04-20 15:36:44

ctalhouet
Membre
Inscription : 2013-05-30
Messages : 90

Re : position cursor cobol/400

Merci  Larry

Oui , mais  c'est par la position curseur ligne/col  et  ca necessite de gerer les ligne/col  de chaque zone mais je cherche une solution en lui donnant uniquement le nom de la zone ou se positionner ..

Dans mon ecran , j'affiche x zones . je verifie par mon RPG la validité des x  zones et en cas d'erreur , je souhaite réafficher l'ecran avec le curseur sur la zone en erreur . Actuellement , je fais ça avec des indics   sur le DSPATR de chaque zone et ca marche  mais je cherchais une solution avec le nom de la zone .du style cursorloc(&ZONE )

Hors ligne

#9 2018-04-23 07:32:38

larry57
Membre
Lieu : Luxembourg
Inscription : 2017-04-21
Messages : 82

Re : position cursor cobol/400

Bonjour,

Dans ce cas, il faut faire ceci :
A          R REC01                     RTNCSRLOC(&RCD &FLD &POS);
A                                          RTNCSRLOC(*MOUSE &ROW &COL);
A                                         CSRLOC(@NULIG     @NUCOL)   
A            FLD            10A  H
A            RCD            10A  H
A            POS             4S 0H
A            ROW            4S 0H
A            COL             4S 0H
A            @NULIG        3S 0H                         
A            @NUCOL       3S 0H         

Tu récupères le nom du champs et sa position et tu positionnes via CSRLOC.

Ca doit être OK.


Larry57

Dernière modification par larry57 (2018-04-23 15:41:09)

Hors ligne

#10 2018-04-23 13:29:03

remit
Membre
Inscription : 2007-02-25
Messages : 232

Re : position cursor cobol/400

Je crois que ctalhouet voudrait une procédure à laquelle on passerait uniquement le nom de la zone, comme
%poscur('NOM_ZONE');

Mais je pense que ce n'est pas possible et qu'il faut passer par un indicateur ou par le positionnement (ligne, colonne).

Hors ligne

#11 2018-04-23 15:40:12

larry57
Membre
Lieu : Luxembourg
Inscription : 2017-04-21
Messages : 82

Re : position cursor cobol/400

Remit, c'est possible.

P poscurB                                   
                                                       
D poscurPI                       
D Champ                         10

if Champ <> '';
      @NULIG = ROW; 
      @NUCOL = COL;
else;
      @NULIG = 0; 
      @NUCOL = 0;
Endif;

return;
P poscur E   

A tester.

Larry57

Hors ligne

#12 2018-04-24 08:04:55

ctalhouet
Membre
Inscription : 2013-05-30
Messages : 90

Re : position cursor cobol/400

Merci Remit , c'est bien ca que je cherche  et je pense que ce mot clé n'existe pas . il faut soit passer par des indics , soit par la position colonne ligne

Hors ligne

Pied de page des forums