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

Langage Delphi Discussion :

frame sans DFM


Sujet :

Langage Delphi

  1. #1
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut frame sans DFM
    Salut a tous,
    je rencontre actuellement un problème qui n'est pas bloquant, mais me force a créer plein de petites unités que j'aimerai fusionner.
    Voici le cas en question :
    J'ai 2 classes principales de frames
    - FrmConteneur
    - FrmFiltre

    La classe FrmFiltre est heritée par FrmFiltreType1, FrmFiltreType2, ...
    qui sont elles-memes heritées par une multitude de frames FrmFiltreType1_A, FrmFiltreType1_B, FrmFiltreType2_A, ...

    La classe FrmConteneur est elle heritée par FrmConteneur1, FrmConteneur2, ... qui peuvent elles meme etre heritée
    Ces FrmConteneur contiennent des instances de descendants de FrmFiltre. Par exemple, je peux avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FrmConteneur_X :
        contient  -> un FrmFiltre1_A et un FrmFiltre2_A
        herite de -> FrmConteneur_Y :
                         contient  -> un FrmFiltre1_B
                         herite de -> FrmConteneur
    Mon chagrin est le suivant :
    j'ai une multitude de classes du genre FrmFiltre1_X, qui la plupart du temps ne font que surcharger quelques methodes virtuelles de leur parent.
    Le probleme est que je ne peux pas regrouper ces FrmFiltre1_X dans une seule unité car il faut un dfm pour chaque si je veux les poser et les manipuler graphiquement a la conception dans un FrmConteneurX
    Pourtant, je m'en fout des dfm car ils sont tous vides, et pourtant, je suis obligé de me trimbaler un tripotée de .dfm et .pas inutiles.

    Quelqu'un aurait il une solution miracle a mon probleme ?

    Merci

    PS: je suis en D7

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    tu peux déclarer une frame avec un autre ancêtre que TFrame (qui surcharge TFrame lui-même), mais pour utiliser une frame il faut au final un DFM, tu n'as pas le choix

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    uses
      MyFrames; // déclare sans DFM un TMyFrame=class(TFrame)
     
    type
      TFrame1 = class(TMyFrame)
      end;
     
    {$R *.DFM}
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    tu peux déclarer une frame avec un autre ancêtre que TFrame (qui surcharge TFrame lui-même)
    interessant a savoir, mais ce qui m'interesserai ca serai le contraire

    Citation Envoyé par Paul TOTH Voir le message
    mais pour utiliser une frame il faut au final un DFM, tu n'as pas le choix
    es-tu sur a 100% de ton affirmation ?
    Dans ce cas, n'est il pas possible d'avoir plusieurs dfms dans mon unité ? Du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    type
    TFrm1 = class(TMyFrame)
    end;
     
    TFrm2 = class(TMyFrame)
    end;
     
    ...
    {$R frm1.dfm}
    {$R frm2.dfm}
    Par contre, je me suis penché sur comment delphi defini les frame insérables au designtime, et je me suis rendu compte que ca depend du dpr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    MyUnit in 'MyUnit.pas'{MyFrame: TFrame},
    ...
    ce qui rique de poser probleme si il y a plusieurs dfm dans la meme unit

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Alors, à la compilation ça doit passer en effet, mais l'IDE est conçu pour n'avoir qu'une fiche/frame par unité et le nom du DFM est le même que l'unité...et c'est là que ça posera problème.

    Quand au constructor de TFrame et TForm, il cherche automatiquement la ressource portant son nom, s'il ne la trouve pas tu auras une erreur. Le DFM est donc obligatoire...sauf à créer manuellement les instances avec le constructor CreateNew.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Je pense que le moyen le plus propres serait de mettre tout le code de tes composants FrmFiltreXXX dans un package conception/design, de le compiler, puis de le charger dans l'IDE.

    Dans un tel package, tu pourrais te passer de dfm et appeler explicitement RegisterClass pour les classes que tu veux déclarer.

    Pour faire des modifications sur ces composants, et voir ces modifications dans le concepteur, tu aurais juste besoin de décharger le paquet, recompiler, puis recharger.


    Sinon, l'IDE râle un peu, mais tu peux passer derrière elle sur le code produit et changer le type de tes composants :
    tu peux coller un composant Toto de type FrmFiltre1 dans l'éditeur de fiche, puis aller dans ton .pas, et changer le type de Toto en FrmFiltre1_X.
    L'IDE met une alerte te disant "le dfm dit que Toto doit être de type FrmFiltre1, alors que la déclaration est de type FrmFiltre1_X. Voulez-vous corriger la déclaration?" lorsque tu ouvres l'unité, mais tu peux lui dire "non", et ça ne pose pas de problème à la compilation ni à l'exécution.
    Le seul soucis est si tu changes le nom de ton composant dans le dfm, l'IDE recrée la déclaration, et tu dois re-passer derrière.
    *LeGEC*

Discussions similaires

  1. Simuler le principe de frame sans frameset
    Par sami_c dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 24/09/2013, 17h45
  2. [HTML 4.0] afficher la totalité de la frame sans scroll
    Par omarzougui1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/05/2011, 17h45
  3. Ouvrir un lien d'une frame sans cliquer
    Par Kapha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/01/2007, 08h32
  4. Réponses: 5
    Dernier message: 27/07/2006, 08h05
  5. Appli MultiFrame mais sans Frame Interne
    Par etiennegaloup dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 05/07/2005, 20h34

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