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:
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:
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:
1 2
|
{menu->Items[index]->Free(); |
Si quelqu'un a une idée ...merci d'avance