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 :

TForm et parents


Sujet :

C++Builder

Vue hybride

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut TForm et parents
    Bonjour,

    J'ai des difficultés à comprendre le fonctionnement des relations parents/enfants entre TForm.

    J'ai une application qui dois fonctionner sur deux écrans. Une fenêtre par écran.
    J'utilise donc deux "Application->CreateForm(...)"

    Sur la fenêtre de mon écran secondaire je veux ajouter un TForm qui dois prendre l'intégralité de la surface de la fenêtre. Ce TForm dois donc avoir comme parent la fenêtre.
    Ce que je ne comprend pas c'est où définir le parent de mon TForm ?
    Dans le constructeur de TForm ? (TForm* maForm = new TForm( formParent ); ou TForm* maForm = new TForm( formParent->Handle );
    Ou dans l'une des variables du TForm ? maForm->Parent = formParent;

    Merci

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    salut, je ne comprends pas pourquoi ta deuxième Form dois avoir la première comme Parent? Tu ne te trompe avec Owner. Normallement tu veux qu'une Form secondaire ait comme Owner la première. Comme ça, à la fermeture dans Form principale la deuxième sera aussi fermé.

    Reagade un peu la doc sur la création de fenêtre: http://docwiki.embarcadero.com/Libra...s.TForm.Create

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut
    Quelle est la différence entre un owner et un parent.
    Je ne connaissais que les parent avec l'api win32 et QT.

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par greg2 Voir le message
    Quelle est la différence entre un owner et un parent.
    Tu vas rigoler

    Owner c'est le propriétaire, c'est à dire l'objet qui est responsable de la desallocation de ta form [en gros dans le destructeur du propriétaire, le propriétaire va détruire tous "ces enfants"]
    Si tu veux une gestion manuelle de ta form, tu passes NULL au constructeur.


    Parent c'est le parent, c'est à dire l'objet qui va contenir et afficher ta form.
    Par exemple: Tu crées un bouton. Mais tant que tu n'as pas affecté son parent, il ne sera pas visible.

    Là où c'est rigolo, c'est que lorsque tu affectes le parent, le propriétaire est automatiquement le parent.
    Voire mon post en dessous: le parent peut détruire "ces enfants"

    Donc le propriétaire ne sert à rien:


    Tu es sûr que tu peux avoir 2 forms principales? Il y a une limitation: 1 et 1 seule form principale

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut
    En fait je fais une migration d'un programme sous 2010 vers XE8 et j’essaie de comprendre pourquoi une de mes fenêtre "enfant" ne s'affiche pas.

    Tu es sûr que tu peux avoir 2 forms principales? Il y a une limitation: 1 et 1 seule form principale
    Est ce que ça veux dire si je crée deux fenêtres dans le WinMain comme ci-dessous, c'est sensé être mauvais ?

    Application->CreateForm(__classid(TV_ihm), &V_ihm);
    Application->CreateForm(__classid(TV_ihmMainDraw), &V_ihmMainDraw);

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Dans la documentation, c'est écrit "Note: By default, the form created by the first call to CreateForm in a project becomes the application's main form."

    Donc oui, c'est mauvais: tu ne sais pas vraiment ce qui va se passer: si la deuxième form sera créée en mémoire mais pas afficher et provoquer une fuite mémoire [à la fin] soit (en regardant l'exemple Embarcadero) la première form sera détruite et remplacée par le deuxième.

  7. #7
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut foetus

    Citation Envoyé par foetus Voir le message
    Là où c'est rigolo, c'est que lorsque tu affectes le parent, le propriétaire est automatiquement le parent.

    Donc le propriétaire ne sert à rien:
    C'est faux, si on change le Parent cela n’affecte pas le Owner.
    Dans le code soumis par greg2, met un break point après la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             DisplayInterface->Parent       = V_ihmMainDraw;
    et met dans ta Watch List: DisplayInterface->Owner
    Tu vas voir qu'il reste à NULL.

    Citation Envoyé par foetus Voir le message
    D'ailleurs il faut être sûr que le new lance une exception. Et si je ne dis pas de bêtises, il ne faut jamais qu'un constructeur ni même un destructeur lance une exception
    C'est OK de mettre une exception dans un constructeur. D'ailleurs il y a plein de classe où c'est le cas dans la VCL / RTL. Par contre, pour le destructeur tu as 100% raison.

    Va lire ceci: https://isocpp.org/wiki/faq/exceptions#ctors-can-throw

  8. #8
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par Crayon Voir le message
    C'est faux, si on change le Parent cela n’affecte pas le Owner.
    Cela semble dépendre de la descendance

    Note: The Parent property declared in TControl is similar to the Owner property declared in TComponent, in that the Parent of a control frees the control just as the Owner of a component frees that Component.

    documentation TControl.Parent

Discussions similaires

  1. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28
  2. Taille d'un TForm à l'état Maximized
    Par Altau dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/06/2003, 12h57
  3. DLL, affichage et parent...
    Par KRis dans le forum Composants VCL
    Réponses: 6
    Dernier message: 13/12/2002, 17h01
  4. [TForm] Ne pas autoriser l'ouverture d'un form
    Par sbeu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2002, 11h20
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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