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

C++ Discussion :

Plantage sur suppression d'un élément de menu.


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 29
    Points
    29
    Par défaut Plantage sur suppression d'un élément de menu.
    Bonjour,
    Je crée dynamiquement des menus, que je veux supprimer par la suite.
    Voici le code pour la création :
    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
     
    bool CreerMenu(TMenuItem *menu,TNotifyEvent fonctionClickl)
    {
    TMenuItem *nouveauMenu;
    int index;
    /*
     Exécution d'une requête pour retrouver les menus à créer dans une table
    */
    SQLQuery->First();
    for(index = 0;index < SQLQuery->RecordCount;index++)
           {nouveauMenu = NULL;
    	 nouveauMenu = new TMenuItem(NULL);
    	 if (nouveauMenu != NULL)
    		{nouveauMenu->Name = "Menu"+(String)index;
    		 nouveauMenu->OnClick = fonctionClick;
    		 nouveauMenu->Caption = SQLQuery->FieldByName("TITRE")->AsString;
    		 nouveauMenu->Tag = 10 + index; // pour repérer le menu créé
     
    		 menu->Add(nouveauMenu);
    		}
    	 SQLQuery->Next();
    	}
    La création des menu fonctionne correctement, le clic sur un élément de menu fait bien appel à la fonction pointée par le paramètre 'fonctionClick'.

    Voici le code pour supprimer ces menus :
    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
     
    void NettoyerMenu(TMenuItem *menu)
    {
    int index,nbSousMenus;
     
    index = 0;
    nbSousMenus = menu->Count;
     
    if (nbSousMenus >=1)
    	{// il y a au moins 1 sous menu
    	 for (index = nbSousMenus-1;index >= 0;index--)
    		{// les menus créés ont un Tag supérieur ou égal à 10
                     if(menu->Items[index]->Tag >= 10)   
    			{menu->Delete(index);
    			}
    		}
    	}
    }
    Ce code fonctionne correctement aussi.
    Si j'appelle plusieurs fois les fonctions de suppression puis création des menus, tout se déroule normalement.

    Par contre, après la création du menu, je clique sur un élément créé, la fonction correspondante est appelée et fonctionne normalement.
    Je quitte la fonction, je demande la suppression des menus, et là je me retrouve avec un message "Violation d'accès ..."

    Pour la suppression des menu, j'ai aussi utilisé le code suivant, sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    			{menu->Items[index]->Free();
    Si quelqu'un a une idée ...merci d'avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Problème résolu.

    C'était une erreur dans la fonction 'fonctionClick()' qui générait le plantage (un simple pointeur déclaré à la place d'une structure).
    Le code ci-dessus pour la création et la suppression dynamique de menus est donc correct.
    Penser à utiliser la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    menu->Items[index]->Free();
    qui supprime le menu ET libère la mémoire, plutôt que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    menu->Delete(index);
    qui ne libère pas la mémoire.

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

Discussions similaires

  1. Suppression définitive d'éléments du menu démarrer
    Par DamKre dans le forum Windows XP
    Réponses: 36
    Dernier message: 30/07/2009, 13h48
  2. Réponses: 15
    Dernier message: 08/10/2008, 00h04
  3. Signaler le survol de la souris sur un élément de menu
    Par hellspawn_ludo dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 05/05/2008, 15h56
  4. [LG]plantage sur une commande basique !
    Par Jeff on the web dans le forum Langage
    Réponses: 5
    Dernier message: 13/01/2004, 19h07
  5. Réponses: 14
    Dernier message: 01/12/2003, 17h47

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