Ajout Menu dans un PopupMenu

larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005 - 13 août 2004 à 12:21
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005 - 15 août 2004 à 12:51
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

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 août 2004 à 15:28
utilise un ptr de fonctions
cf ts les tut sur ce site et sur ceux du net

Magic Nono: l'informagicien!
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 août 2004 à 15:34
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!
0
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005
13 août 2004 à 16:38
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. :)
0
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005
14 août 2004 à 01:09
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
larion Messages postés 140 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 juillet 2005
15 août 2004 à 12:51
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);
0
Rejoignez-nous