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 :

Comment fermer une fenêtre dynamique avec onclose


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Par défaut Comment fermer une fenêtre dynamique avec onclose
    Bonjour,
    J ai un probleme pour fermer ma fiche dynamique.
    Je cree une form avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            if FindComponent('form'+inttostr(compteuronglet))=nil then
                begin
                Form := TForm.create(nil);
                form.height:=162;
                form.width:=400;
                form.position:=podesktopcenter;
                form.visible:=true;
                form.name:='form'+inttostr(compteuronglet);
                form.show;
                form.onclose:=MaFormClose;
    puis un bouton BNon qui permet de fermer la fiche. Quand l utilisateur clique sur le bouton, ca va bien dans ma fonction BnonOnclick qui contient un
    form.close. Et la, ca bug pendant l'execution.

    Le code de mon onclose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TFDonneesMissions.MaFormClose(Sender: TObject; var Action: TCloseAction);
    VAR
        form:TForm;
    begin
    showmessage('dans maformclose');
    form:=TForm(Findcomponent('form'+inttostr(compteuronglet)));
    FreeAndNil(form);
    form.free;
    end;
    Et quand je clique sur le bouton, il ne va pas dans ma fonction MaFormClose, alors qu il y va quand je ferme ma form avec la croix.
    Apres 3 jours de recherches infrutueuses sur google, je m en remets a vous.
    Merci !
    Julie

  2. #2
    Membre Expert

    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
    Par défaut
    Tout simplement avec

    Action := caFree; dans lévénement onClose de ta fenêtre dynamique.

    Cordialement

  3. #3
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Par défaut
    Salut,
    Merci pour la réponse.
    Je dois mal utiliser le cafree, car c'est ce que je fais, mais rien ne se passe.
    Mon code de creation de ma form contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form.onclose:=MaFormClose;
    puis, ma procedure ma formclose, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TFDonneesMissions.MaFormClose(Sender: TObject; var Action: TCloseAction);
    begin
    showmessage('maformclose');
    action := caFree;
    end;
    et pour appeler ma fonction maformclose, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    form:=TForm(Findcomponent('form'+inttostr(compteuronglet)));
    form.close;
    Et ca ne marche pas. J'ai une erreur a l'execution avec un access violation.
    Qu est ce qui cloche?
    Merci
    Julie

  4. #4
    Membre Expert

    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
    Par défaut
    Essaie cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TFDonneesMissions.MaFormClose(Sender: TObject; var Action: TCloseAction);
    begin
       action := caFree;
    end;

  5. #5
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Par défaut
    Salut,
    Je ne vois pas la difference avec mon code. C'est exctement pareil, a part qu il n y a pas le showmessage, non?
    Peut etre que le showmessage peut bloquer le processus...

    Mais, en mettant ton code, j ai tjrs mon access violation des qu il arrive au form.close. Je pense que le programme ne comprend pas que je souhaite relationner form.close et maformeclose, car il ne rentre pas dans ma procedure maformclose je pense.
    Julie

  6. #6
    Membre Expert

    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
    Par défaut
    Ok, ta fiche est créé quand tu instancies la classe "TFDonneesMissions"

    donc pour la créer il te suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    with TFDonneesMissions.create(Serlf) do
    begin
      height := 162,
      width := 400;
      position := podesktocenter;
      name := 'form'+inttoStr(compteurOnglet);
      show; 
    end;
    Tu vas ensuite dans ton unité où est décrite ta classe "TFDonneesMissions"
    Dans l'inspecteur d'objet, tu cliques l'onglet événement et tu recherches l'événement onClose.
    Tu doubles cliques afin de créer l'événement, puis tu complètes avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TFDonneesMissions.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      action := caFree;
    end;
    Cela fonctionnera.

  7. #7
    Membre émérite Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form:=TForm(Findcomponent('form'+inttostr(compteuronglet)));
    Ça retourne nil sur mon poste. Il ne trouve pas de fiche form0.

    Est-ce que c'est du MDI que tu cherches à faire ?

  8. #8
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Par défaut
    Ah ah !
    Il ne trouve pas la form (ou pas la bonne).
    Surement pour ca qu il n'arrive pas a la fermer ;o)
    Alors, nouvelle question : pourquoi un
    me renvoit nil alors que je crée la form form0 qq lignes avant?
    Merci

  9. #9
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par nopnop
    :
    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
    23
     
            if FindComponent('form'+inttostr(compteuronglet))=nil then
              begin
                Form := TForm.create(nil);
    //je préfére            Form := TForm.create(application);
     
                form.show;// la c'est form.showmodal pour vs
                form.:=MaFormClose;
     
    dans Tbutton de fermeture
    Procedure Tform.button;
    begin
           modalresult:=1;
     //ou      Release tt cour si tu préféré show que showmodal
    end;
    procedure TFDonneesMissions.MaFormClose(Sender: TObject; var Action: TCloseAction);
    VAR
        form:TForm;
    begin
    showmessage('dans maformclose');
    form:=TForm(sender);
    form.release;// au lieu de free
    end;
    dans l'aide de delphi:
    TCustomForm.Create

    TCustomForm Voir aussi

    Crée et initialise un nouvel objet TForm.

    constructor Create(AOwner: TComponent); override;

    Description

    Utilisez la méthode Create pour instancier un objet TForm ou un descendant de TForm pendant l'exécution. AOwner désigne le propriétaire de l'objet TCustomForm.

    Pour les descendants de TCustomForm qui ne sont pas des objets TForm, utilisez plutôt CreateNew. L'appel de Create pour un descendant de TCustomForm qui n'est pas un TForm déclenchera une exception.
    TCustomForm.Release

    TCustomForm Voir aussi

    Détruit la fiche et libère la mémoire associée.

    procedure Release;

    Description

    Utilisez la méthode Release pour détruire la fiche et libérer la mémoire associée.

    Release ne détruit pas la fiche avant que tous les gestionnaires d'événements de la fiche et des composants de la fiche n'aient eu le temps de terminer leur exécution. Tous les gestionnaires d'événement de la fiche doivent utiliser Release à la place de Free. Si vous ne respectez pas cette règle, une violation d'accès risque d'être générée.

    Remarque*: Release retourne immédiatement à l'appelant. Elle n'attend pas que la fiche soit libérée.

Discussions similaires

  1. comment fermer une fenêtre modale avec le code
    Par Sheriff dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 16/10/2006, 16h36
  2. Comment fermer une fenêtre externe à l'application ?
    Par Matt2094 dans le forum Delphi
    Réponses: 8
    Dernier message: 30/08/2006, 16h52
  3. Comment fermer une fenêtre enfant MDI ?
    Par DeveloMagaly dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2005, 13h10
  4. Comment fermer une Fenetre Modal avec Code ?
    Par Soulama dans le forum Langage
    Réponses: 19
    Dernier message: 13/07/2005, 11h17
  5. Comment fermer une fenêtre quand la souris et clavier sont inactifs ?
    Par Goldenkiller dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/12/2004, 22h09

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