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 :

création de form


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    857
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 857
    Points : 267
    Points
    267
    Par défaut création de form
    Besoin de conseil pour la creation dynamique de "form"


    Jusqu'a présent pour mes petits projets je mettais ce code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Application.CreateForm(TForm50, Form50);
    form50.ShowModal;
    form50.free;
    Mais aujourd'hui j'ai besoin:
    - de faire du non modal
    - de créer plusieur fois la même "Form"

    J'ai trouvé plusieurs possibilités sur le net:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    cas 1:
    fic:=TForm50.create(application);
    fic.show;
     
    cas 2:
    Form50 := TForm50.CreateForm(Self);
    form50.show;
     
    cas 3:
    Form50 := TMyForm50.Create(nil) ;
    form50.show;
     
    cas 4:
    Application.CreateForm(TForm50, Form50);
    form50.show;
    Quelles sont les différences entres ces 4 cas ?
    J'ai vu aussi que suivant les cas c'est assez "pointu" pour libérer la mémoire sous peine d'erreur .

    cordialememt

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 886
    Points : 11 411
    Points
    11 411
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    // cas 1: on crée une fiche dont on rend l'application propriétaire
    // en passant comme Owner la variable Application lors de la création
    // le propriétaire est chargé de libérer/détruire la fiche
    // si on ne le fait pas avant, Application s'en chargera à la fin du programme
    fic:=TForm50.create(application);
    fic.show;
     
    // cas 2: le propriétaire est l'objet pointé par Self dans une méthode
    // duquel on crée la fiche (Form1 si création dans TForm1.Button1Click, par ex.)
    Form50 := TForm50.CreateForm(Self);
    form50.show;
     
    // cas 3: on ne passe pas de Owner (nil) : on se charge de gérer la destruction
    Form50 := TMyForm50.Create(nil) ;
    form50.show;
     
    // cas 4: fiche crée automatiquement par l'application (dans le dpr)
    // équivalent de Form50:=TForm50.create(application);
    // mais avant le Application.Run
    Application.CreateForm(TForm50, Form50);
    form50.show;
    Si création dynamique, pas besoin de la syntaxe du cas 4.
    Si tu gères le cycle création/libération, tu peux passer nil comme propriétaire (cas 3).

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 736
    Points : 25 645
    Points
    25 645
    Par défaut
    Je te conseille aussi la lecture de TForm.Create et TComponent.Create et surtout TComponent.Owner

    Pour le cas nil, utilise OnClose et Action caFree
    Evite de conserver une référence dessus, tu pourras toujours retrouver dans Screen.Forms[]

    Attention aussi à la variable déclaré automatiquement comme form50, soit tu l'utilises comme Singleton et donc tu gère la libération manuellement, soit c'est un Multiton et il ne faut surtout pas l'utiliser (le mieux c'est même de la retirer, personnellement, c'est ce que je fais y compris pour les Modal)

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

Discussions similaires

  1. Création de formes automatiques selon dimensions
    Par Sami Xite dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/04/2008, 22h28
  2. Pbl création sous-form.
    Par Nessie37 dans le forum IHM
    Réponses: 2
    Dernier message: 13/02/2008, 18h05
  3. création de forme et de line
    Par patou41000 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 14/05/2007, 23h23
  4. Création de form Win32 en VC++ 2003
    Par kimlee dans le forum Visual C++
    Réponses: 2
    Dernier message: 07/03/2007, 15h23
  5. [AJAX] Création obj/form non accessibles
    Par speedev dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/07/2006, 12h27

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