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

EDI Delphi Discussion :

utiliser une TForm ancêtre commune


Sujet :

EDI Delphi

  1. #1
    Membre éprouvé
    utiliser une TForm ancêtre commune
    Bonjour

    Sous Delphi 10.2 j'ai créé une unité avec un descendant de TForm, appelons le TMaForm, qui contient quelques composants ou méthodes utiles dans toutes mes fenêtres.

    Je l'ai ajoutée au référentiel, et je peux donc créer de nouvelles unités qui héritent de la précédente, et ça marche très bien.

    Mais j'ai une bizarrerie :

    Si je ferme l'unité ancêtre, et sauve mon projet, quand je le réouvre, j'ai systématiquement, et pour chaque unité héritant de la form commune, le message : "Erreur à la création de la fiche : Ancêtre de TMaForm non trouvé." Et je ne peux pas afficher les fiches. L'ancêtre de TMaForm c'est TForm, je ne vois pas pourquoi il n'est pas trouvé...

    Il suffit d'ouvrir MaForm.pas, de fermer le projet et de le réouvrir, pour éviter le souci.

    Cela me paraît idiot de devoir laisser toujours ouverte l'unité ancêtre.

    Est-ce que j'ai oublié quelque chose ?

    Merci pour vos suggestions !
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  2. #2
    Expert éminent sénior
    Bonjour, ce problème existait déjà à l'époque de Delphi 7, l'héritage de Form et Frame, c'est juste infâme à gérer, cela existe mais franchement c'est vilain.

    Je pratique toujours de la même façon de sorte qu'un TMaForm soit codée comme une Classes à part entière, pas de DFM, constructor et destructor, propriétés pour gérer les composants.
    Evidemment, cela ne permet pas facilement d'hériter des contrôles mais ayant vu des abus d'héritage, comme cacher les contrôles hérités ou alors une usine à gaz pour les ré-organiser, mieux vaut se limiter à des composants non visuels.
    De plus, TMaForm n'est qu'un aggrégat, le moins de code mais offrant l'accès à d'autres classes fournissant telle ou telle fonctionnalité.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre émérite
    Tu as raison et c'est pour cela que je n'utilise à titre personnel jamais d'héritage de form. Il y a bien d'autres moyens en delphi.

  4. #4
    Expert éminent sénior
    alors je suis d'accord avec Shai pour l'héritage d'une classe sans DFM, c'est parfois plus simple

    par contre j'ai un héritage de Form et Frame dans un projet récent qui ne pose pas de pb...mais j'ai simplement fait Fichier/Nouveau/Autre/Elements héritables et pris la fiche modèle comme base sans passer par le référentiel...je ne sais pas si ça change qqc
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre éprouvé
    Bon, merci pour vos conseils, je vais créer mon ancêtre sans dfm...
    C'est dommage que l'éditeur ne se bouge pas pour améliorer ça.
    Pour info, avec Lazarus, ça marche avec dfm et interactivité sans souci.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  6. #6
    Expert éminent sénior
    Citation Envoyé par tintinux Voir le message
    Bon, merci pour vos conseils, je vais créer mon ancêtre sans dfm...
    C'est dommage que l'éditeur ne se bouge pas pour améliorer ça.
    Pour info, avec Lazarus, ça marche avec dfm et interactivité sans souci.
    alors comme dit plus haut, sans le référentiel je ne rencontre pas de problème

    ensuite Embarcadero fait bcp d'effort pour prendre en compte les bugs remontés dans Quality, ils sont testés, la priorité fixée, et il n'est pas possible de tout corriger tout le temps...donc

    1) si le bug n'est pas référencé dans Quality il n'a aucune chance d'être corrigé
    2) s'il est référencé dans Quality mais sans un scénario permettant de le reproduire il a peu de change d'être corrigé (les bugs aléatoires sont terriblement compliqués à corriger)
    3) s'il est référencé, reproductible, mais peu important il a de forte chance de traîner longtemps - même s'il est simple a corrigé car ils préfèrent passer 5j sur un seul bug majeur que de corriger 200 bugs sans importance sur la même durée.
    4) les bugs, sont corrigés, relus, testés, aucune modification n'est faite à la va vite, donc même si c'est simple, ça prend du temps et ça implique plusieurs personnes
    5) malgré ces étapes, il arrive qu'une correction qui semble sans conséquence dans le contexte où elle est faite provoque un effet papillon catastrophique...d'où la préférence pour les bugs majeurs qui sont déjà catastrophiques

    voilà, donc si tu trouves le bug important et qu'il n'apparaît pas dans Quality, tu sais ce qu'il te reste à faire

    Par ailleurs, si le bug est référencé, tu peux voter pour lui, mais même s'il a un fort soutient, il peut ne pas passer les règles ci-dessus et traîner un certain temps.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

###raw>template_hook.ano_emploi###