IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AS/400 Discussion :

Position curseur initiale


Sujet :

AS/400

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 57
    Points : 36
    Points
    36
    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

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    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 ?

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    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.

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    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 !!!

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    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é

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    @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é.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    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

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    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...

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    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...

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    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

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    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.

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    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 !

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. position curseur souris par rapport à ma JTable
    Par jdewalqu dans le forum Composants
    Réponses: 3
    Dernier message: 24/08/2006, 17h21
  2. position curseur dans TEdit
    Par bandit boy dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/03/2006, 16h53
  3. [win32][D5] - position curseur dans paintbox
    Par bregolhen dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/11/2005, 23h45
  4. [TstringGrid] et position curseur
    Par petitcoucou31 dans le forum Composants VCL
    Réponses: 10
    Dernier message: 01/11/2005, 22h28
  5. Réponses: 4
    Dernier message: 07/06/2005, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo