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

Delphi Discussion :

Liste de Formes


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Liste de Formes
    Bonjour,

    Dans le cadre d'un développement delphi 2005, je suis amené à créer une liste de composants, définis par un nom et une valeur. Il m'est venue l'idée de créer un objet dérivé d'une TForm, contenant un label et une editBox, chacune contenant respectivement le nom et la valeur du composant à afficher. L'idée est d'instancier autant d'objet dérivé de TForm que de composant a afficher. De plus, ces instances de composants sont stockés dans une liste dans la classe parent. Ainsi, le code ressemble a ceci pour la création / stockage dans la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      //pour  chaque entité
      for i := 0 to nbEntity -1 do
        myFrmEntityList.add (TfrmEntity.createEntity(self,myEntity[i], i));
    Le constructeur createEntity est défini comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    constructor TfrmEntity.createFrmEntity(aOwner : TComponent; aEntity :TEntity; aIndex : integer );
    begin
      inherited create (aOwner);
      setEntity(aEntity);
      afficherEntity;
      Name := name + intToStr(aIndex);
    end;
    Ensuite, je voudrais afficher chaque instance de frmEntity contenue dans la liste myFrmEntityList. Pour cela, j'ai fait le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i := 0 to myFrmEntityList.count -1 do
    begin
      myfrmEntityList[i].parent := self;
      myfrmEntityList[i].top := calculNextTop ();
      myfrmEntityList[i].show;
    end;
    ou calculNextTop renvoie un compteur incrémenté de 25 à chaque passage.

    Mon problème est le suivant : les instances de myfrmEntity se superposent, comme si leur top était à 0, alors que chaque propriété top a bien une valeur différente. Existe t-il une méthode particulière pour afficher une liste de forme ? Faut -il mieux passer par des TFrames ? J'avoue que je nage un peu a ce niveau la.
    Et de Kaïn naquirent ses infants. Et les infants de ses infants. Et ils se répendirent sur le monde. Les ténèbres leurs appartenaient.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Peux-tu donner la definition de ta class myFrmEntityList ?

    Je pense qu'il faille peut-être caster comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i := 0 to myFrmEntityList.count -1 do begin ... TForm(myfrmEntityList[i]).top := calculNextTop (); ... end;
    Par ailleurs j'ai fais plusieurs développements avec des fenêtres embarquées comme toi. Si je peux t'apporter un conseil c'est de ne pas assigner le parent de ta fenêtre embarquée par un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TForm(myfrmEntityList[i]).parent := self;
    Mais plutôt grace à l'api de windows SetParent, comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     var F: TForm;
    begin
      F := TForm.Create(Form1);
      with TEdit.Create(Self) do
        parent := F;
      with TEdit.Create(Self) do
      begin
        top := 30;
        parent := F;
      end;
      Windows.SetParent(F.Handle, Form1.Handle);
      F.Show;
    end;
    Sinon des comportrements étranges se produisent lors de l'exécution.

    Va voir ce fil de discussion : http://www.developpez.net/forums/showthread.php?t=30196

    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    ca fonctionne très bien ^^ merci Effectivement, avec Windows.SetParent(); ca fonctionne très bien ^^ merci

    Et de Kaïn naquirent ses infants. Et les infants de ses infants. Et ils se répendirent sur le monde. Les ténèbres leurs appartenaient.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher une liste sous forme de tableau [SWING]
    Par Sylver--- dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/03/2007, 15h17
  2. Réponses: 11
    Dernier message: 28/02/2007, 12h18
  3. Reload d'une liste dans form
    Par Juan277 dans le forum Access
    Réponses: 3
    Dernier message: 06/12/2006, 16h42
  4. Listes et forms 6i
    Par debutant forms 6i dans le forum Forms
    Réponses: 25
    Dernier message: 10/04/2006, 18h31
  5. [C#] liste des form actives
    Par chnew dans le forum C#
    Réponses: 5
    Dernier message: 02/01/2006, 13h04

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