Ajout Menu dans un PopupMenu

Signaler
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005
-
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005
-
Bonjour,
Dans mon programme je crée plusieurs menus dans un popupmenu avec ce code :
Code:
NewItems[p] = new TMenuItem(PopupMenu1);
NewItems[p]->Caption = "&Option";
NewItems[p]->OnClick = FonctionOption;
PopupMenu1->Items->Add(NewItems[p++]);

NewItems[p] = new TMenuItem(PopupMenu1);
NewItems[p]->Caption = "&Restaure";
NewItems[p]->OnClick = FonctionRestaure;
PopupMenu1->Items->Add(NewItems[p++]);

...

Cela fonctionne bien.
A présent, je désire le faire par l'intermediaire d'une fonction créée par mes soins, du genre :
Code:
AddMenu("&Option",FonctionOption);

void __fastcall TForm1::AddMenu(char * texte,??? fonction)
{ NewItems[p] = new TMenuItem(PopupMenu1);
NewItems[p]->Caption = texte;
NewItems[p]->OnClick = fonction;
PopupMenu1->Items->Add(NewItems[p++]);
}

Pour le premier paramètre "char * texte", pas de problème,
mais pour le second "??? fonction", je n'y arrive pas. Avez-vous une solution ?

5 réponses

Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
utilise un ptr de fonctions
cf ts les tut sur ce site et sur ceux du net

Magic Nono: l'informagicien!
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
exemple (de tete)

si tu as des fonction avec ces proto

int maxList(Liste l);
int minList(Liste l);

tu peux avoir une fonction ainsi
void critere(char* txt,int(*ptrFonc)(Liste l))
{
..
Liste l2;
...
int premier = (*ptrFonc)(l2);
..
}

bon, C de mem; en fait, C ptet :
void critere(char* txt,int(ptrFonc*)(Liste l))

teste

Magic Nono: l'informagicien!
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005

Merci, je n'y avais pas pensé.
Cela devrait fonctionné pour transmettre la fonction en paramètre en utilisant ce prototype :

typedef int (*PtrFonct)(Liste l);

J'espère que je n'aurais pas de problème .
Je teste cela ce soir. :)
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005

C'est trop compliqué pour moi. J'ai plusieurs erreurs à la compilation :

typedef void __fastcall (*PtrFonct)(TObject *Sender); // Déclaration de pointeur de fonction

void __fastcall TForm1::FonctionOption(TObject *Sender) // La fonction à pointer
{ ... }

void __fastcall TForm1::AddMenu(char * texte,PtrFonct fonction)
{ NewItems[p] = new TMenuItem(PopupMenu1);
NewItems[p]->Caption = texte;
NewItems[p]->OnClick = &fonction; //Erreur de conversion
PopupMenu1->Items->Add(NewItems[p++]);
}

AddMenu("&Option", FonctionOption); //Erreur, vois AddMenu(char *,void)
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005

J'ai trouvé, et ce n'était pas facile :
Code:
void __fastcall TForm1::AddMenu(char * texte,Classes::TNotifyEvent fonction)
{ NewItems[p] = new TMenuItem(PopupMenu1);
NewItems[p]->Caption = texte;
NewItems[p]->OnClick = fonction;
PopupMenu1->Items->Add(NewItems[p++]);
}

AddMenu("&Option",&FonctionOption);