Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2011, 17h43   #1
Invité régulier
 
Inscription : août 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 32
Points : 5
Points : 5
Par défaut Position curseur initiale

Bonjour à tous,

Un programme peut-il connaître la position du curseur au moment de son appel ?

Je ne parle pas ici de passer cette position en paramètres (ce serait trop facile), mais j'avais dans l'idée que cette position était peut-être indiquée au niveau d'une des DS système lors de l'initialisation du programme.

J'ai essayé de voir au niveau des INFDS de l'écran et du programme, mais je n'ai rien trouvé de concluant.

Auriez-vous une idée ?

Merci
mutsum1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h00   #2
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Non ce n'est pas possible et c'est logique. C'est pareil dans le monde windows.
J'essaye de comprendre dans quel cas celà peut-être utile mais je ne trouve pas. Peux-tu m'éclairer ?
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h00   #3
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Citation:
J'ai essayé de voir au niveau des INFDS de l'écran et du programme, mais je n'ai rien trouvé de concluant.
Tu n'as pas dû bien regarder.

Citation:
Auriez-vous une idée ?
Oui mais je n'ai sous la main qu'un exemple en RPG III OPM facile à convertir en RPG IV ILE.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
     FMONECRANCF  E                    WORKSTN
     F                                              KINFDS  INFDS


      * INFDS pour position curseur
     I INFDS      DS
     I                                    B 370 3710 CURSR



      * Calcul de la position du curseur
     C            CURSR    DIV  256       WKLIG   30       Ligne
     C                     MVR            WKCOL   30       Colonne
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h21   #4
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Philippe,

je pense que notre ami ne veut pas la position du curseur dans l'écran du programme en cours, mais la position du curseur d'un programme précédent.
Imagine le programme en cours n'a pas d'écran, aucune carte F et que l'on veut récupérer la prosition du curseur de l'appelant qui lui avait un écran !!!
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h40   #5
Membre habitué
 
Inscription : août 2008
Messages : 115
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 115
Points : 116
Points : 116
Bonjour,

J'ai compris la même chose que K2R400 et dans ce cas, effectivement l'INFDS de l'écran du programme appelé ne donnera pas la bonne réponse (car pour que la pos curseur soit alimentée il faut faire une I/O sur le fichier écran associé).

Il y a cependant une solution avec les API DSM (Dynamic Screen Manager) et tout particulièrement QsnGetCsrAdr

Voici un petit programme qui marche tel quel :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
H BndDir(  'QSNAPI' )  Option( *SrcStmt )  DftActGrp(*NO)                     
                                                                              
D Row             s             10i 0 inz                                     
D Col             s             10i 0 inz                                     
 //get cursor Row and Column                                                  
D QsnGetCsrAdr    PR            10i 0 extproc('QsnGetCsrAdr')                 
D QsnCursorRow                  10i 0 const  Options( *Omit)                  
D QsnCursorColum                10i 0 const  Options( *Omit)                  
D QsnLowLevelHan                10i 0 const  Options( *Omit)                  
D  ApiError                   1024a          Options( *Omit: *VarSize )       
                                                                              
 /free                                                                        
                                                                              
  QsnGetCsrAdr(Row:Col: *omit : *omit);                                       
  Dsply  (%Char(Row) + '-' + %Char(Col));                                     
  *inlr = *on;                                                                
 /end-free
On peut aussi arriver au résultat sans api en utilisant le datastream 5250. Mais pour en avoir beaucoup fait à une époque, je le déconseille fortement ! J'étais à peu près normal avant d'en faire
jump400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h47   #6
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Peut-être bien que j'ai compris de travers mais faut dire aussi que la question n'est pas vraiment limpide de clarté ni claire de limpidité
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h49   #7
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
@jump400,
je les avais oublié ces APIs DSM, bien vu.

Peut-être que notre ami mutsum1 nous dira ce qu'il compte en faire, car ça aiguise ma curiosité.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 20h01   #8
Membre habitué
 
Inscription : août 2008
Messages : 115
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 115
Points : 116
Points : 116
Citation:
Envoyé par Mercure Voir le message
Peut-être bien que j'ai compris de travers mais faut dire aussi que la question n'est pas vraiment limpide de clarté ni claire de limpidité
Je te l'accorde, je ne vois pas non plus l'intérêt de la chose
jump400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 09h44   #9
Invité régulier
 
Inscription : août 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 32
Points : 5
Points : 5
Merci à vous pour ces réponses, et en particulier à Jump400, ça marche nickel

Désolé pour ma question un peu trop évasive.
En fait je cherchais tout simplement à générer un menu contextuel lors d'un click de souris. Or la base d'un tel procédé est que la fenêtre s'affiche au niveau de la position du curseur au moment de l'appel, d'où ma demande...

Il ne me reste plus qu'à calculer la position précise de l'affichage en fonction de la taille du menu, et le rendu devrait être assez intéressant.

Un grand merci à vous...
mutsum1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 10h23   #10
Invité régulier
 
Inscription : août 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 32
Points : 5
Points : 5
Bon en fait j'ai pris le problème à l'envers.

J'étais persuadé qu'il était possible de régler par programme la taille d'une fenêtre, mais apparemment on ne peut jouer que sur sa position.
Du coup impossible de faire vraiment mieux que le *DFT déjà existant.

C'est bien dommage, surtout quand le contenu de la fenêtre est variable...
mutsum1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 11h14   #11
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Dans ce cas soit tu utilises les APIs DSM pour fabriquer ta fenête mais dans ce cas il y a du boulot, soit tu te fais 4 ou 5 fenêtres identiques (voir plus) avec des tailles différentes. Tu afficheras le bon format en fonction de tes calculs.
Ca ressemble à une invite générique ça
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 11h58   #12
Invité régulier
 
Inscription : août 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 32
Points : 5
Points : 5
Oui c'est tout à fait ça.

Dans l'idée, le programme recevrait en paramètre un tableau contenant les options possibles, il afficherait la fenêtre correspondante, et renverrait en retour l'option sélectionnée.

J'aime bien ton idée des fenêtres multiples.
A défaut de pouvoir régler la dimension, je vais partir dans cette direction.

Merci beaucoup.
mutsum1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 14h43   #13
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Regarde les fenêtres sur cette page, ça peut peut-être t'inspirer. Il y a le code DDS et RPG avec le rendu.
Toutefois, de nos jours, personnellement je n'irais plus me prendre la tête avec des écrans verts !
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 16h48   #14
Invité régulier
 
Inscription : août 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 32
Points : 5
Points : 5
Merci pour le lien.
je n'y pas trouvé la réponse à mes questions, mais certaines idées sont intéressantes, en particulier l'affichage d'une image.

Je suis donc resté sur mes fenêtre multiples avec une sélection de la plus adaptée selon le contenu.
Ca marche bien, le rendu est impeccable.

Merci à tous.
mutsum1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h34.


 
 
 
 
Partenaires

Hébergement Web