2017-09-16 5 views
-3

Si j'ai un pointeur focalisé sur un FormActivate(Sender: TObject); - MyPtr := @FormActivate; - comment exécuter FormActivate avec un expéditeur de mon choix. Je ne comprends pas comment ajouter dans l'expéditeur.Delphi en utilisant des pointeurs sur les méthodes correctement

+0

Comment l'exécuter sans expéditeur? – melpomene

+2

Cette question n'est pas claire. * Expéditeur * est le formulaire qui est activé. Vous ne le sélectionnez pas; c'est automatique. Le formulaire contient déjà un pointeur vers l'événement, vous n'en avez donc pas besoin. Qu'est-ce que vous essayez exactement de faire, et quel problème particulier essayez-vous de résoudre? Pourquoi pensez-vous avoir besoin d'un * pointeur focalisé sur un FormActivate * en premier lieu? On dirait plus d'un problème XY qu'une vraie question. Quel problème essayez-vous de résoudre lorsque vous pensez avoir besoin d'un pointeur vers un gestionnaire d'événements? –

Répondre

-1

Vous ne devez pas utiliser de pointeur dans ce cas. Je ne pense pas que vous pouvez même le faire car vous avez besoin de l'instance de formulaire ainsi que de la méthode. Le FormActivate est un plugin dans le gestionnaire d'événements OnActivate, défini comme TNotifyEvent:

TNotifyEvent = procédure (Sender: TObject) de l'objet; NB: Le "d'objet" que le compilateur interprète pour exiger une instance (le mécanicien nous est caché comme il se doit).

Le correct était de faire ce que vous voulez (pas sûr que vous devriez le faire, mais bon ..) est de remplacer votre pointeur avec un MyForm: TMyForm (quel que soit le vôtre), puis appelez: MyForm. FormActivate (mySender);

Vous pouvez également remplacer Pointer par un MyEvent: TNotifyEvent, ainsi: MyEvent: = MyForm.OnActivate; puis appelez MyEvent (mySender);

Remplacer mySender par ce que vous souhaitez dans les deux exemples. J'espère que cela éclaircira les choses pour vous.

+0

La procédure ne doit pas nécessairement être une procédure pour le formulaire (peut-être mauvais exemple). C'est que j'ai une procédure qui est localisée par un pointeur et des détails comme "expéditeur" j'ai besoin de contrôle pour mettre dans la procédure comme son exécution. Steve dis-tu que je dois traiter le pointeur comme un événement? – user2522301

+0

Steve J'ai un pointeur comment puis-je transformer cela en un événement? .. MyEvent (MyPtr ^) (MySender)? – user2522301

+0

Ken White Je sais que c'est automatique mais je n'écris pas de code standard, les procédures peuvent être dans un * .DLL et beaucoup d'autres endroits. – user2522301