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 :

creation de Form


Sujet :

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 creation de Form
    bonjour,


    lorsque l'on veut suprimer l'autocreate des form (qui se fait par defaut) et pouvoir créer une form juste avant de l'utiliser j'utilise ce code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.CreateForm(TForm3, Form3);
    form3.ShowModal;
    form3.Free;
    est ce que c'est bon ou il manque quelque chose (form3.destroy,par exemple)

    merci

  2. #2
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Ne pas faire de free avant l'utilisation : ça libère ta TForm (ça la détruit).

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Voici un exemple classique de ce que je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      Form3 := TForm3.Create(Application);
      with Form3 do begin
        try
          if ShowModal = mrOk then
             ...
          else
             ...
        finally
          Release;  // et non Free.
        end;
      end;
    @+ Claudius

  4. #4
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut
    Moi je fais directement comme ceci dans le cas d'un showmodal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      with TForm3.Create(Application) do begin
        try
          if ShowModal = mrOk then
             ...
          else
             ...
        finally
          Release;  // et non Free.
        end;
      end;
    A+

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    +1 Andry

    Dans le cas d'un ShowModal c'est tout à fait judicieux.

    @+

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    La méthode d'Andry est très concise mais il ne faut pas en abuser, elle va poser des problèmes en cas de débogage, l'objet TForm3 ainsi alloué est difficilement accessible en débogage.

    D'autre part, il était préconise par Borland d'employer Release au lieu de Free dans le cas des fiches (descendantes de TForm).

    Enfin l'emploi du bloc de protection de ressource try .. finally est plus que recommandé dans le cas de l'utilisation temporaire d'une ressource. Surtout quand la ressource est allouée et libérée au sein d'un même bloc. On entend par ressource la mémoire mais aussi toute entité qui est réservée à un usage donné et devant être libérée quand ce dernier prend fin, cela recouvre par exemple les fichiers.

    En ce qui concerne les autocreate, il na faut pas oublier de faire du vide dans le fichier dpr quand cela s'impose, en supprimant la ligne Application.CreateForm(TForm3, Form3) ou en passant par le mécanisme dédié de l'IDE.

    Par symétrie, la libération d'une fiche autocréée devrait être laissée à la VCL qui se charge de détruire les fiches autocréées en fin d'exécution. Ceci-dit rien n'interdit de les libérer explicitement, la VCL est suffisament bien conçue pour supporter ceci.

    Cdlt

  7. #7
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    ne pas oublier aussi le le paramètres Action de l'évènement OnClose;


  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    Citation Envoyé par aityahia
    ne pas oublier aussi le le paramètres Action de l'évènement OnClose;

    C'est absolument inutile dans ce que je viens de décrire...

    cdlt

  9. #9
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Citation Envoyé par e-ric
    C'est absolument inutile dans ce que je viens de décrire...

    cdlt
    évidement c'est une alternative d'ailleurs c'est mieux que de faire tous c'est tests sauf dans le cas ou on veut récupérer la valeur du ModalResult.

  10. #10
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 123
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par e-ric
    C'est absolument inutile dans ce que je viens de décrire...

    cdlt
    Oui. ça l'est plus quand on utilise des MDI.

  11. #11
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Citation Envoyé par mayloshi
    Oui. ça l'est plus quand on utilise des MDI.

    pas forcément le CaFree libères la form après sa fermeture tous simplement, vous avez juste mal compris ce que je voulais dire .

  12. #12
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    je sais mais dans notre discussion en cours la libération est faite explicitement par l'appelant.


    bon week-end à tous

    cdlt

Discussions similaires

  1. Creation de Form dans un Thread
    Par yannick_sch dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/07/2010, 18h48
  2. Creation de form dynamique
    Par Techsan dans le forum Débuter
    Réponses: 5
    Dernier message: 26/05/2010, 15h45
  3. Creation de forms
    Par anubis_1001 dans le forum Débuter
    Réponses: 7
    Dernier message: 28/11/2008, 12h20
  4. Creation dune Form ds un Thread
    Par Soulama dans le forum Langage
    Réponses: 1
    Dernier message: 17/01/2006, 12h41

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