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

EDI Delphi Discussion :

[D2007] inherited transformé en object dans le dfm


Sujet :

EDI Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Par défaut [D2007] inherited transformé en object dans le dfm
    Bonjour,

    J'essaie de reprendre un vieux composant créé avec Delphi 7 en Delphi 2007. Ce composant utilise des Frames. Or régulièrement Delphi transforme les parties inherited des Frames du dfm en object. Et comme certaines Frames sont en plusieurs exemplaires sur la fiche cela provoque un plantage pour duplication de nom. Sur un autre poste de développement avec une installation similaire ce phénomène ne se produit apparemment pas. Savez-vous quelle pourrait être l'option qui entraîne ce comportement ?

    Merci.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 101
    Par défaut
    inherited dans une DFM indique de l'héritage !
    As-tu plusieurs niveaux d'héritages de TFrame comme TFrame puis TAbstractSovitecFrame puis TCustomerFrame par exemple ...
    Les Sources et les bibliothèques sont elles installées de façon totalement identique entre les 2 postes ?
    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 Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    C'est un problème que j'ai souvent rencontré.
    Dans les DFM, la seule chose qui différence un TFrame d'un TForm c'est que le TFrame commence par inherited et le TForm par object.

    De temps en temps, Delphi prend idée de remplacer le inherited par object, et lorsque tu réouvres ensuite la frame dans l'IDE, il te l'affiche comme si c'était un TForm (donc avec une barre de titre, un border...).

    Par contre, je n'ai jamais trouvé ce qui provoquait cette anomalie qui m'a toujours semblée aléatoire. Lorsque je détectais que l'IDE avait fait ce genre de "farce", je fermais l'IDE, je corrigeais le DFM à la main et je relançais tout.

    Je pense que ça doit arriver lorsque tu as de l'héritage entre les frames et que l'IDE ne retrouve pas la frame parente.

  4. #4
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Dans les DFM, la seule chose qui différence un TFrame d'un TForm c'est que le TFrame commence par inherited et le TForm par object

    inherited indique que l'objet est hérité...une form qui hérite d'une autre forme commencera par inherited dans le dfm, ca n'a rien à voir avec une quelconque différence entre Form et Frame...
    A mon avis, si l'ide colle object à la place de inherited, c'est parce qu'il trouve pas l'ancêtre. du coup il met object et comme l'ancetre est inconnu, il considère par défaut que c'est une form...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    As-tu plusieurs niveaux d'héritages de TFrame comme TFrame puis TAbstractSovitecFrame puis TCustomerFrame par exemple ...
    Non, j'utilise directement le TFrame de base.

    Citation Envoyé par ShaiLeTroll Voir le message
    Les Sources et les bibliothèques sont elles installées de façon totalement identique entre les 2 postes ?
    Les deux postes ont été installés à l'identique... il y a quelques années, depuis il y a surement eu des divergences.

    Citation Envoyé par Franck SORIANO Voir le message
    C'est un problème que j'ai souvent rencontré.
    Dans les DFM, la seule chose qui différence un TFrame d'un TForm c'est que le TFrame commence par inherited et le TForm par object.

    De temps en temps, Delphi prend idée de remplacer le inherited par object, et lorsque tu réouvres ensuite la frame dans l'IDE, il te l'affiche comme si c'était un TForm (donc avec une barre de titre, un border...).
    Ce n'est pas inline plutôt pour un TFrame ? Chez moi le inline reste, mais les descendants de l'inline deviennent object au lieu d'inherited.

    Citation Envoyé par Franck SORIANO Voir le message
    Par contre, je n'ai jamais trouvé ce qui provoquait cette anomalie qui m'a toujours semblée aléatoire. Lorsque je détectais que l'IDE avait fait ce genre de "farce", je fermais l'IDE, je corrigeais le DFM à la main et je relançais tout.
    C'est ce que je fait aussi, mais c'est pénible quand cela arrive plusieurs fois par jour, et que tu es obligé de reprendre à chaque fois toutes tes modifs "à l'aveugle".

    Citation Envoyé par Franck SORIANO Voir le message
    Je pense que ça doit arriver lorsque tu as de l'héritage entre les frames et que l'IDE ne retrouve pas la frame parente.
    Il est vrai que pour des problèmes de dépendance les Frames ne sont pas dans le même paquet que la form qui les accueille.

    Merci de vous être penché sur mon problème.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Par défaut
    Bonjour,

    Je remonte ce topic car, bien que je sois passé à Delphi 2010, et donc avec une installation toute fraiche, le problème persiste.
    De plus si je compile la version avec les inherited le TFrame n'est pas initialisé et j'ai des EAccessViolation Lors des accès au TFrame.
    Le TFrame incriminé fonctionne bien lorsque je le pose sur le formulaire d'une application.

    Auriez-vous une idée car moi je ne sais plus quoi faire pour m'en sortir.
    Merci.

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 101
    Par défaut
    Ne jamais utilisé de Frame mais tout simplement un Form avec BorderStyle à bsNone et en changeant le Parent ...

    Ah, l'héritage de fenêtre c'est pas non plus la joie mais c'est déjà plus cohérent ...

    Je n'ai jamais vu l'utilité d'hériter une FORM avec DFM, certe créer un type générique au dessus du TForm ou une version abstraite d'une Form pour forcer l'implementation des descendants, oui, mais toujours SANS DFM !

    Enfin, transforme tes frames en composants installés en packet si c'est possible ...
    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

  8. #8
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Citation Envoyé par sovitec Voir le message
    Je remonte ce topic car, bien que je sois passé à Delphi 2010, et donc avec une installation toute fraiche, le problème persiste.
    J'ai aussi constaté le problème même avec D2010.
    En fait, je pense qu'il me fait le coup à peu près systématiquement lorsque je recompile un package qui contient un composant qui est posé sur la Frame.
    D'une façon générale, je pense que l'IDE n'aime pas qu'on lance une compil lorsque les fiches sont ouvertes.
    La seule "solution" que j'ai trouvée pour l'instant c'est de fermer les frames ouvertes avant de compiler.

Discussions similaires

  1. inline versus object dans les dfm
    Par ZZZzzz2 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 16/02/2009, 14h36
  2. Réponses: 5
    Dernier message: 27/07/2006, 08h05
  3. [JComboBox] Transformer l'Object en Date
    Par Rimk78 dans le forum Composants
    Réponses: 4
    Dernier message: 30/05/2005, 16h51
  4. [Création de compo] Stocker une TList de records dans un dfm
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 6
    Dernier message: 29/10/2004, 11h01
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

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