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

WinDev Discussion :

Changer la taille d'une fenêtre interne au clic


Sujet :

WinDev

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut Changer la taille d'une fenêtre interne au clic
    Bonjour à tous!

    J'ai une fenêtre principale contenant à droite un séparateur, à gauche un séparateur et au milieu une fenêtre interne.
    Mon objectif est que, lorsque je clique sur les extrémités de la fenêtre interne (gauche, droite, haut et bas), ma fenêtre interne augmente de taille sans modifier la taille de la fenêtre principale. En somme, lorsque je clique, des ascenseurs apparaissent.

    Voici le code que j'ai implémenté lorsque le bouton de la souris se relache :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    Res est un entier = CurseurPos(cpFenêtre)
    SI Res <> -1 ALORS
    	SI ( PoidsFaible(Res) - FenIntPosX(FPrincipale.fenInterne) ) <= 150 ALORS
    		FPrincipale.FermePartieGauche()
    		FPrincipale.FermePartieDroite()
     
    		FenTaille(FPrincipale.fenInterne.SCHEMATIQUE,FPrincipale.fenInterne.SCHEMATIQUE..Largeur + 50, FPrincipale..Hauteur)
     
    		FPrincipale.OuvrePartieDroite()
    		FPrincipale.OuvrePartieGauche()
    		Info("On est proche du X Gauche")
    	FIN
     
    	SI ( PoidsFaible(Res) - FenIntPosX(FPrincipale.fenInterne) ) >= 590 ALORS
    		Info("On est proche du X Droite")
    	FIN
     
    	SI ( PoidsFort(Res) -  FenIntPosY(FPrincipale.fenInterne) ) <= 10 ALORS
    		Info("On est proche du Y Haut")
    	FIN
     
      SI ( PoidsFort(Res) -  FenIntPosY(FPrincipale.fenInterne) ) >= 520 ALORS
    		Info("On est proche du Y Bas")
    	FIN		
    FIN
    Pour information, SCHEMATIQUE est une image, OuvrePartieGauche(), OuvrePartieDroite(), FermePartieGauche() et FermePartieDroite() permettent de fermer et d'ouvrir les parties gauches et droites (les séparateurs et les autres composants).

    Ce code la fonctionne qu'a moitié. En effet, lorsque je clique sur l'extrémité gauche, la taille de la fenêtre principale s'agrandit, SCHEMATIQUE également.
    Mais ce n'est pas ce que je souhaite. Pour rappel, l'objectif est d'agrandir la taille de SCHEMATIQUE à l'aide d'ascenseur et que la fenêtre principale reste la même.

    Si vous avez des solutions ou des pistes de solutions à me proposer, je suis preneur.

    Cordialement.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Dans ton bout de programme je ne vois pas les ascenseurs intervenir.
    Tu peux lier un ascenseur à la taille de la fenêtre : FenTaille(FPrincipale.fenInterne.SCHEMATIQUE,FPrincipale.fenInterne.SCHEMATIQUE..Largeur, FPrincipale..Hauteur + ASC_ordonnées..valeur)
    Faut pas oublier de mettre un minimum, un maximum et une valeur initiale aux ascenseurs.
    Mieux vaut un petit lien qu'un long discours.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Je pensais qu'en mettant les ascenseur automatique, et qu'en augmentant la taille de SCHEMATIQUE se trouvant dans un champ de fenêtre interne, les ascenseurs allaient apparaitre

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Je connais pas bien les fenêtre internes mais si tu parles des ascenseurs automatiques de la fenêtre interne je pense qu'ils devraient apparaitre qu'à partir du moment ou la taille de la fenêtre est plus petite que sa taille d'origine (un peu comme pour les tables).

    Par contre tu peut mettre des ascenseurs en dehors de la fenêtre et les lier à la taille de la fenêtre.

    Tu peux faire aussi un système avec la position de la souris, changement du curseur et redimensionnement de la fenêtre mais là faut faire intervenir les évènements. C'est pas évident au premier abord quand on connait pas bien les évènements

    Tout dépend si tu veux te faciliter les choses ou pas.
    Mieux vaut un petit lien qu'un long discours.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Un champ fenêtre interne a une certaine taille. Si on lie ce champ à une fenêtre interne qui est plus grande que le champ fenêtre interne et que l'on a définit, alors les ascenseurs apparaitront automatiquement.

    Ce que j'essaie de faire, c'est d'augmenter la taille de cette fenêtre interne, pour le moment sans succès.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Pour que les ascenseurs apparaissent il faut décocher la case de gabarit dans l'IHM de la description de la fenêtre interne.

    Après j'ai pas vu d'option permettant de redimensionner le champ quand le programme est lancé.
    Mieux vaut un petit lien qu'un long discours.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Tu pourrais regarder le fonction FenTailleUtile() qui sert à redimensionner une fenêtre interne.

    http://doc.pcsoft.fr/fr-FR/?10000170...FenTailleUtile

    _

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Bonjour =JBO=, cette fonction n'existe pas sur Win11 (en tout cas, quand je marque 'FenTailleUtile(' dans le code, ca me fait une erreur )

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    D'après la doc WinDev sur le web, cette fonction serait disponible depuis WD11...

    A tout hasard, es-tu sûr d'avoir une version à jour ?
    _

  10. #10
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    En regardant l'aide de la 12, j'ai un NEW devant la fonction.
    Petite erreur d'information de l'aide en ligne, à mon avis.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Oui ma version est à jour.

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Merci à Lo² pour la précision sur le NEW en WD12.


    Alors peut-être une autre idée...


    Dans la fenêtre interne, créer une procédure locale qui effectuera son redimensionnement, par exemple:

    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PROCEDURE Dimensionner(nHauteur est un entier, nLargeur est un entier)
     
    MoiMême..Hauteur = nHauteur
    MoiMême..Largeur = nLargeur

    Et voir si tu peux l'exécuter à partir de la fenêtre qui contient le champ fenêtre interne, en utilisant une des syntaxes ci-dessous.

    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fenInterne.Dimensionner(100,80)
     
    FPrincipale.fenInterne.Dimensionner(100,80)
     
    ExécuteTraitement("fenInterne.Dimensionner", trtProcédure, 100, 80)
     
    ExécuteTraitement("FPrincipale.fenInterne.Dimensionner", trtProcédure, 100, 80)

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Voila deux pieces jointes, une (avantClic) contenant une partie de l'IHM et une croix montrant où je clic et l'autre (apresClic) contenant le résultat à l'exécution de ton code.

    Euuh la vraiment, je suis désolé d'être vraiment 'lourd' et 'dépendant', mais je ne comprends pas un tel résultat
    Images attachées Images attachées   

  14. #14
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Moi non plus je ne comprends pas... tes images...... faudrait nous commenter la chose si tu veux qu'on comprenne...

    Est-ce que c'est le champ fenêtre interne qui a été redimensionné... peut être en même temps que la fenêtre interne ?

    Déjà pour être sûr de bien cibler la fenêtre interne, ce serait bien de tracer (ou d'afficher) le nom complet de la cible du redimensionnement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PROCEDURE Dimensionner(nHauteur est un entier, nLargeur est un entier)
     
    info(MoiMême..NomComplet)
     
    MoiMême..Hauteur = nHauteur
    MoiMême..Largeur = nLargeur
    Si le mot-clé MoiMême ne convient pas, on pourrait le remplacer par le mot-clé MonParent.


    Explique nous comment tu fais appel à la procédure de redimensionnement.
    Le code + Des explications sur la "localisation" de ce code (ex. un traitement de fenêtre ou de champ ???)

    Merci.
    _

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Désolé pour le manque de précision...

    Ce qui est important de savoir pour ce bout d'IHM est que entre les deux séparateurs (gauche et droite) il y a le champ fenetre interne. Le rectangle gris/noir est l'image se trouvant dans la fenetre interne.

    Pour le test que tu m'as demandé de faire dans la procédure de redimensionnement, lorsque je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    info(MoiMême..NomComplet)
    Le résultat est le Champ de la fenêtre interne (à savoir que cette procédure se trouve dans la fenêtre interne).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    info(MonParent..NomComplet)
    Le résultat est la fenetre principale

    >Explique nous comment tu fais appel à la procédure de redimensionnement.
    Lorsque le clic gauche est laché, voici le code :

    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
    18
     
    Res est un entier = CurseurPos(cpFenêtre)
    SI Res <> -1 ALORS
     
    SI ( PoidsFaible(Res) - FenIntPosX(FPrincipale.CHFenInterne) ) >= 590 ALORS
     
        //Ferme le contenu d'extreme gauche et d'extreme droite		
        FPrincipale.FermePartieGauche()
        FPrincipale.FermePartieDroite()
     
    //FPrincipale.CHFenInterne.SCHEMATIQUE..Largeur étant l'image que je souhaite agrandir		 FPrincipale.CHFenInterne.dimension(FPrincipale.CHFenInterne.SCHEMATIQUE..Largeur + 100,FPrincipale..Hauteur)
     
       //Ouvre le contenu d'extreme gauche et d'extreme droite	
       FPrincipale.OuvrePartieDroite()
       FPrincipale.OuvrePartieGauche()
     
        //info("On est proche du X Droite")
    FIN
    Merci pour le temps passé

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    L'évènement du clic est sur l'image ?

    Si pour tester tu mets un bouton et que dans ce bouton tu mets juste SCHEMATIQUE..Largeur = SCHEMATIQUE..Largeur + 50 juste pour voir ?
    Mieux vaut un petit lien qu'un long discours.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Citation Envoyé par sphynxounet Voir le message
    Si pour tester tu mets un bouton et que dans ce bouton tu mets juste SCHEMATIQUE..Largeur = SCHEMATIQUE..Largeur + 50 juste pour voir ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CHFenInterne.SCHEMATIQUE..Largeur += 50
    Dans ce cas la, je remarque que SCHEMATIQUE augmente en taille mais les ascenseurs n'apparaissent pas.

  18. #18
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    D'après ta réponse, les noms complets retournés par MoiMême et MonParent ne sont pas cohérents avec ce qui est expliqué dans l'aide en ligne de mon WD12...
    Est-ce que tu as lu l'aide en ligne de WD11 pour ces mots-clés ?


    Aussi, après avoir essayé la proposition de sphynxounet...

    tu pourrais aussi tenter d'appeler la procédure via la fonction ExécuteTraitement().

    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ExécuteTraitement("CHFenInterne.dimension", trtProcédure, FPrincipale.CHFenInterne.SCHEMATIQUE..Largeur + 100, FPrincipale..Hauteur)
     
    // ou 
     
    ExécuteTraitement("FPrincipale.CHFenInterne.dimension", trtProcédure, FPrincipale.CHFenInterne.SCHEMATIQUE..Largeur + 100, FPrincipale..Hauteur)

    Mon but ici est de "couper le lien" avec le point d'appel de la procédure, pour que MoiMême ou MonParent fasse enfin référence à la fenêtre interne elle-même.
    _

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ExécuteTraitement("FPrincipale.CHFenInterne.dimension", trtProcédure, FPrincipale.CHFenInterne.SCHEMATIQUE..Largeur + 100, FPrincipale..Hauteur)
     
    //et
    		FPrincipale.CHFenInterne.dimension(FPrincipale.CHFenInterne.SCHEMATIQUE..Largeur + 100,FPrincipale..Hauteur)
    ont le même effet (cf les imprim' écran).

    Pour la définition de MoiMême, je pense qu'on doit avoir la même : " Le mot-clé MoiMême permet de manipuler le champ en cours."
    (de même pour MonParent)

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Citation Envoyé par Redg9 Voir le message
    Pour rappel, l'objectif est d'agrandir la taille de SCHEMATIQUE à l'aide d'ascenseur et que la fenêtre principale reste la même.
    Histoire que les choses soient claires pour moi : tu veux des ascenseurs automatiques qui une fois que ton champ image (SCHEMATIQUE) est plus grand que le champ de la fenêtre interne apparaissent (au niveau du champ fenêtre interne) et te permettent de te déplacer dans ton champ fenêtre interne ?

    Ou tu veux des ascenseurs qui agissent sur la taille de schématique ?
    Mieux vaut un petit lien qu'un long discours.

Discussions similaires

  1. [WD9] Changer le contenu d'une fenêtre interne
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 15h02
  2. taille d'une fenêtre
    Par Zakain dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/10/2005, 15h11
  3. changer le "look" d'une fenêtre...
    Par just1980 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 20/04/2005, 19h23
  4. [Débutant] Trouvez la taille d'une fenêtre
    Par Sharukh Khan dans le forum MFC
    Réponses: 6
    Dernier message: 06/06/2004, 22h23
  5. Changer l'icône d'une fenêtre à partir d'un .res
    Par henderson dans le forum C++Builder
    Réponses: 8
    Dernier message: 11/03/2003, 10h48

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