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

C++Builder Discussion :

Taille et position initiale d'une fenêtre MDI fille [FAQ]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 31
    Par défaut Taille et position initiale d'une fenêtre MDI fille
    Bonjour,

    Je souhaiterais pouvoir ajuster la taille et la position initiale de fenêtre MDI fille, et je ne sais pas comment faire ! Par défaut, les fenêtres s'affichent à partir du bord haut-gauche de la fenêtre mère, avec un petit décalage pour chaque nouvelle fenêtre créée. De plus, j'ai beau modifier les valeur Height et Width de la fenêtre fille, les dimensions ne sont pas celles que je souhaite. Pour pouvoir chsoisir la taille de ma fenêtre fille, j'ai choisi la valeur ScreenCenter de la propriété position, mais je ne peux plus choisir la position initiale...
    J'avais pensé indiqué les tailles et positions de la fenêtre juste avant l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void __fastcall TFenPrinc::mnuGestionEleveClick(TObject *Sender)
    {
        TFenGestionEleve *FenetreGestionEleve;
        FenetreGestionEleve = new TFenGestionEleve(this);
        FenetreGestionEleve->Top = 100;
        FenetreGestionEleve->Height = 400;
        mnuGestionEleve->Enabled = false;
    }

    mais ça ne fonctionne que pour la position initiale (et encore, la fenêtre doit s'afficher à la position choisie par le programme et seulement ensuite là ou je veux d'ou un petit scintillement) et pas pour la taille.
    Bref, je suis preneur de toute aide que vous pourrez m'apporter. Ce n'est pas très important pour mon programme, mais j'aimerais faire les choses bien, et ça me donne l'occasion d'apprendre (je ne suis pas developpeur pro...).
    Merci d'avance de votre aide.

    ---
    Christophe

  2. #2
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut Re: Taille et position initiale d'une fenêtre MDI fille
    Citation Envoyé par nutsDz
    Je souhaiterais pouvoir ajuster la taille et la position initiale de fenêtre MDI fille
    Si c'est une fenêtre fille, il faut renseigner la propriété FormStyle avec fsMDIChild. Sur clic d'un bouton, on crée bien une fenêtre enfant avec dimension et position choisies.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TForm *f;
    f=new TForm(Application);
    f->FormStyle=fsMDIChild;
    f->Width=300;
    f->Height=100;
    f->Top=10;
    f->Left=20;
    }
    À bientôt
    Gilles

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 31
    Par défaut
    Ca fonctionne maintenant, merci... Mais je pensais voir écrit plus ou moins la même chose avant de poster
    Est ce que le fait d'avoir écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f->FormStyle=fsMDIChild;
    dans la procédure de lancement de la fenêtre fille plutôt qu'en utilisant l'inspecteur d'objet (ce que je faisait précédemment) pour ma fenetre f change quelquechose ? Encore une chose, quelle est la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=new TForm(Application);
    et
    que j'utilise habituellement pour créer mes fenêtres et que j'ai trouvé dans un bouquin ?
    Encore merci, je crois que je peux mettre Résolu et je suis quand même confus

    ---
    Christophe

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Il existe une méthode un peu plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f->SetBounds(..., ..., ..., ...);
    La MDIForm est toujours propriétaire d'une MDIChild ce qui lui permet de gérer les propriétés
    liées au fenêtres enfants (MDIChildCount, ActiveMDIChild etc...).
    Pour les autres forms, c'est Application qui est en propriétaire.

    A plus !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 31
    Par défaut
    Salut,
    Je vais essayer cette méthode SetBounds, car j'ai toujours ce petit soucis d'affichage : est ce qu'il ne serait pas possible de déterminer taille et position de la fenêtre fille AVANT d'afficher la fenêtre ?
    J'ai un peu l'impression que les deux actions (détermination taille/position et affichage) sont trop proches et que de ce fait, la fenêtre est d'abord affichée à une position non contrôlée puis ensuite à la position et avec la taille choisie... d'ou cet effet de double affichage.

    ---
    Christophe

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 31
    Par défaut
    J'aurais pas du mettre résolu si vite
    Si j'ai bien compris le mécanisme des fenêtre MDI, elle est d'abord affichée puis ensuite on choisit ses caractéristiques (j'ai vérifié en mettant un ShowMessage entre
    f = new TForm(Application); et f->SetBounds(100,100,400,300)

    J'ai voulu ruser en mettant la propriété Visible de f à false mais il y a une erreur disant que je ne peux pas masquer une fenêtre MDI fille !! C'est sans doute un peu chipoter, mais ce serait mieux de pouvoir choisir taille et position de cette fenêtre fille AVANT de l'afficher non ?? A moins que ce ne soit pas possible auquel cas je laisse comme c'est par défaut. J'avais essayé de changer ces valeurs dans la méthode OnCreate de la fiche fenêtre enfant mais j'ai une grosse erreur... Si vous avez d'autres suggestions...

    ---
    Christophe.

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Tu peux placer SetBounds(...) dans le constructeur de la MDIChild !

    A plus !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 31
    Par défaut
    Merci, ça paraît logique en plus... Le petit hic, c'est qu'on arrive ici au bout de ce que je sais faire... Je vais donc de ce pas me plonger dans les bouquins et sur le net, je devrais trouver comment faire, où placer mon code...
    Merci en tout cas, j'ai bien avancé.

    ---
    Christophe.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 31
    Par défaut
    Bon c'est super tout fonctionne comme je voulais. Dernière question pour assouvir ma curiosité : je croyais que les initialisations comme celles que je veux (taille et position initiale) se faisaient dans méthode OnCreate ?
    C'est quoi la différence avec le fait de mettre ses valeurs dans le constructeur ?
    Encore merci

    ---
    Christophe.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/01/2009, 17h49
  2. Position région d'une fenêtre fille MDI
    Par kimlee dans le forum C++
    Réponses: 2
    Dernier message: 08/10/2007, 11h55
  3. Fermeture d'une fenêtre MDI fille dans Excel
    Par docsteff dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/09/2007, 15h32
  4. Empécher une fenètre MDI de se fermer
    Par vanitom dans le forum MFC
    Réponses: 6
    Dernier message: 28/11/2005, 09h21
  5. cacher une fenêtre MDI
    Par briscard dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/06/2004, 15h12

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