|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Thomas Architecte technique Inscription : septembre 2010 Messages : 39 ![]() |
Bonjour.
Quelqu'un connait-il une façon de faire un programme affichant un écran qui soit en rafraichissement automatique (jusque là, c'est pas trop compliqué, encore qu'il faille un jour l'arrêter), mais qui reste réceptif aux actions du clavier pendant ce temps-là ? Pour simplifier, c'est le comportement du WRKSYSACT en mode "Automatic Refresh" (F19) que je souhaite reproduire : toutes les x secondes, l'écran se rafraichit, mais pendant cet interval de temps, le clavier n'est pas verrouillé (pas de symbole X d'occupation système) et on peut intervenir pour effectuer une opération, par exemple un F10... Merci de vos conseils. |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Inscription : septembre 2008 Messages : 251 ![]() |
Il suffit de compiler l'écran avec WAITRCD(1).
Dans le programme, tu fais un exfmt normalement. Tu peux tester dans les infos de l'écran si l'écran est en erreur de timewait ou non. Si oui, tu raffraichis. Si non, l'utilisateur a utilisé la touche Entrée ou une touche de fonction. |
|
|
00
|
|
|
#3 | ||||||
|
Membre Expert
![]() Patrick Inscription : mai 2008 Messages : 821 ![]() |
Personnellement j'opterai pour une DTAQ attachée au DSPF.
Exemple glané sur le net : Code :
Code :
Code :
CRTDSPF FILE(*CURLIB/SIMPLEDSPF) SRCFILE(QDDSSRC) DFRWRT(*NO) DTAQ(*CURLIB/SIMPLETEST) Code :
|
||||||
|
|
00
|
|
|
#4 | ||||||||||||||
|
Nouveau Membre du Club
![]() Thomas Architecte technique Inscription : septembre 2010 Messages : 39 ![]() |
Merci pour vos solutions.
J'ai tout testé, et tout fonctionne à merveille. La solution de Patrick à base de *DTAQ est très intéressante, mais il faut absolument qu'une seule instance du programme soit exécutée (et oui, deux programmes écoutant la même *DTAQ, c'est pas terrible...), donc ça ne peut pas être pour un programme utilisé par plusieurs utilisateurs simultanément. Du coup, pour en faire profiter tout le monde, voici les sources de mes tests. Ecran simple : Source du DSPF TBDSPF01D. A compiler en WAITRCD(5) DFRWRT(*NO) Code :
Code :
Sous-fichier : Source du DSPF TBDSPF02D. A compiler en WAITRCD(5) DFRWRT(*NO) Code :
Code :
Création de la DTAQ TBDSPF03. Code :
CRTDTAQ DTAQ(*LIBL/TBDSPF03) MAXLEN(80) Code :
Code :
Code :
|
||||||||||||||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Patrick Inscription : mai 2008 Messages : 821 ![]() |
Il est vrai que si deux instances s’exécutent en simultané, l'un sera rafraîchi par la DTAQ pas l'autre (l'entrée étant aspirée). Mais cette technique peut être intéressante dans certains cas.
Pour pousser à l'extrême, il est aussi possible de mettre ta DTAQ dans QTEMP. Quel intérêt ? car aucun autre job ne pourra toucher à la QTEMP d'un autre job. C'est pourtant possible avec STRWCH démarré à l'initialisation des différents jobs en question. Cet outil permet d'appeler un programme à l'entrée d'un message dans une MSGQ (une sorte de trigger). Ainsi un autre job envoie un message dans une MSGQ, les différents Watch se déclenchent dans l'ensemble des jobs initialisés avec STRWCH (ceux des utilisateurs), les programmes sont appelés dans l'environnement de l'utilisateur. Il peuvent ainsi mettre à jour la QTEMP/DTAQ, ainsi tous les écrans se rafraîchissent en même temps à l'arrivée d'un message dans une MSGQ. Pour le reste, Excellent travail, merci d'en faire profiter la communauté. Bravo !! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com