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

Composants VCL Delphi Discussion :

Héritage entre Forms


Sujet :

Composants VCL Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Héritage entre Forms
    Salut a tous.

    Mon application possède plusieurs Forms.
    Les Forms ont toutes des caractéristiques communes et j'ai pensé à définir une classe TForm de base avec les propriétés qui vont bien pour mon application.
    Les autres Forms héritent de cette classe de base mais les propriétés des classes filles n'héritent pas des propriétés de la classe de mère. Les propriétés des classes filles ont les valeurs définies dans l'IDE et dans les fichiers dfm associés à la Form.

    Je fais bien l'héritage. Je définis les valeurs des propriétés dans le constructeur de la classe mère. Je fais bien un appel à inherited dans les constructeurs des classes filles.
    Je vois pas trop comment faire pour définir dans mon source les propriétés que je veux définir à ma Form. A chaque fois que j'essaie quelque chose, je m'aperçois que c'est la valeur des propriétés définies dans l'IDE et dans le fichier dfm associé qui prennent le dessus.

    Si quelqu'un a une idée, elle est la bienvenue

  2. #2
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 66
    Points : 191
    Points
    191
    Par défaut
    Je fais bien l'héritage. Je définis les valeurs des propriétés dans le constructeur de la classe mère. Je fais bien un appel à inherited dans les constructeurs des classes filles.
    Je vois pas trop comment faire pour définir dans mon source les propriétés que je veux définir à ma Form. A chaque fois que j'essaie quelque chose, je m'aperçois que c'est la valeur des propriétés définies dans l'IDE et dans le fichier dfm associé qui prennent le dessus.
    Comment fais-tu l'heritage, dans l'IDE ou par dynamiquement par code ?
    Pouquoi a tu besoin de toucher au constructeur des classes filles ? Nepeusx-tu pas faire tes definitions de valeurs dans leur evenement OnCreate ?

  3. #3
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    La description du problème est un peu confuse :-)

    Tu as essayé de faire click droit sur les filles et "Revenir à hérité" ? (attention, cette action peut être très violente)

    Sinon tu peux aussi modifier le .DFM à la main : tu vires simplement les propriétés qui ont été redéfinies au niveau de la fille, les valeurs seront alors prises dans la mère.

    Bloon

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je fais l'héritage dans le code.
    Chaque Form hérite de la Form de base (TFrmAncetre), dans laquelle je définis les propriétés qui me conviennent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Extrait du code de TFrmAncetre
    type
      TFrmAncetre = class(TForm)
     
    // Extrait du code d'une des mes Form
    type
      TFrmConsigne = class(TFrmAncetre)
    Je veux faire en sorte de définir les caractéristiques des mes Form à un seul endroit. Pour cela, l'héritage me semble être la solution. Je définis les caractéristiques dans FrmAncetre et toutes les autres Forms de l'appli héritent de cette Form.

    J'utilise les constructeurs pour les Forms parce que je crée dynamiquement mes Forms.
    Le constructeur de TFrmAncetre définit une valeur pour les propriétés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    constructor TFrmAncetre.Create(Owner: TComponent);
      begin
        inherited;
        Width := 800;
        Height := 600;
        Color := clBtnFace;
        Visible := False;
      end;
     
    constructor TFrmConsigne.Create(Owner: TComponent);
    begin
      inherited;
    end;
    En faisant des tests plus fins, je viens de m'apercevoir qu'il n'y a que la propriété Visible pour laquelle la propagation de valeur par le constructeur ne marche pas.
    Si je force Visible à True dans l'IDE pour FrmConsigne, la propriété restera bien à True bien que je construise FrmConsigne dynamiquement par le constructeur dont le code est ci-dessus.

    C'est un moindre mal mais cela va me forcer à mettre Visible à False pour toutes les Form de mon appli manuellement dans l'IDE.
    Je suis obligé de mettre Visible à False parce que je veux utiliser ShowModal.

  5. #5
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Je suis obligé de mettre Visible à False parce que je veux utiliser ShowModal.
    euh... j'utilise ShowModal très souvent et je ne m'occupe pas de la propriété Visible ! La fenêtre ne devient visible que lorsque tu fais Show ou ShowModal, tu ne devrais pas t'en occuper ni dans l'IDE, ni dans le constructeur.

    Bloon

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Et bien, Visible est à False par défaut dans l'IDE effectivement.
    En revanche, si Visible est à True pour une Form et que tu fais un appel à ShowModal avec cette même Form, ca va déclencher une exception.

    Je maîtrise mal encore la création dynamique de Forms et je comprends toujours pas pourquoi la valeur de la propriété Visible ne se propage pas dans le cas qui me concerne.

    Je vais essayer de creuser du coté de la directive de compilation
    Je suppose que les applis que tu codes possèdenet également plusieurs Forms, en plus de la MainForm.
    Tu crées dynamiquement tes Forms ? Comment est-ce que tu gères les propriétés générales de tes Forms ? (je suppose qu'elles doivent toutes avoir les mêmes valeurs, par souci de cohérence)

    Merci pour tes conseils Bloon

  7. #7
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Dans l'utilisation courante des fenêtres, on ne touche pas à la propriété Visible. On peut la tester pour savoir si la fenêtre est affichée ou pas, mais le plus simple est d'utiliser Show, ShowModal, Close ou modifier de la propriété ModalResult (quand on a fait showModal)

    En ce qui me concerne, je crée (presque) toutes mes fenêtres dynamiquement et j'utilise aussi une hiérarchie de fenêtres. Je définis les propriétés dans l'IDE parce que c'est rare que ça change : par exemple je veux que toutes mes fenêtres soient centrées au départ. De ma TFormAncetre dérive TDialogueAncetre qui définit BorderStyle à bsDialog et toutes les fenêtres qui ne doivent pas être redimensionnées dérivent de TDialogAncetre.

    Sinon je sais pas trop quoi te dire sur les propriétés vu que j'utilise la plupart du temps les valeurs par défaut :-)

    Bloon

  8. #8
    FWS
    FWS est déconnecté
    Inactif
    Inscrit en
    Juillet 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 16
    Points : 18
    Points
    18

Discussions similaires

  1. [C#] Passage de paramètre entre forms
    Par farfadet dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/02/2006, 14h36
  2. [VBA] Code entre forms
    Par Virgile59 dans le forum Access
    Réponses: 3
    Dernier message: 28/12/2005, 21h57
  3. communication entre forms
    Par Archimède dans le forum Langage
    Réponses: 10
    Dernier message: 13/10/2005, 18h05
  4. [VB.NET] Communication entre forms
    Par alex69 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 23/06/2005, 11h27
  5. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58

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