Salut,
Est ce que quelqu'un pourrait donner la définition simple d'un CALLBACK? La doc de PB est assez évasive, et j'ai pas vraiment trouvé d'explication simple dans le forum...
Merci
++
_/Torp\_
kesako callback...?
Toute création d'une fenêtre window est rattachée à une procédure permettant de traiter les évènements souris , clavier et des gadgets.
Pure simplifie la tâche de l'utilisateur avec ses commandes: event =WaitWindowEvent() , eventGadgetId() etc..; de sorte que l'utilisateur n'a pas à se préoccuper de la forme des messages reçus.
Mais il est souvent utile d'avoir accès directement à cette procédure; ce que permet : SetWindowCallback(@Callback()).
Ensuite avec la nouvelle procédure implantée: Procedure Callback(WindowID, Message, wParam, lParam), on a un accès aux différents messages grâce à ces trois variables: Message, wParam, lParam.
C'est la base de la programmation Window.
Pure simplifie la tâche de l'utilisateur avec ses commandes: event =WaitWindowEvent() , eventGadgetId() etc..; de sorte que l'utilisateur n'a pas à se préoccuper de la forme des messages reçus.
Mais il est souvent utile d'avoir accès directement à cette procédure; ce que permet : SetWindowCallback(@Callback()).
Ensuite avec la nouvelle procédure implantée: Procedure Callback(WindowID, Message, wParam, lParam), on a un accès aux différents messages grâce à ces trois variables: Message, wParam, lParam.
C'est la base de la programmation Window.
Un Callback est un pointeur sur fonction : cela permet d'assigne une fonction à appeler en paramètre.
Exemple d'utilisation simple : imaginons que tu as une fonction permettant de lire un fichier s'appelant "LitDonne".
A la base ta fonction ne permet de lire que depuis un fichier mais ton projet grandissant, tu aimerais que l'utilisateur puisse lire depuis un flux quelconque (mémoire, réseaux, tube ...) mais ne voulant pas te prendre la tête à le faire tu décides que ce sera au programmeur voulant implémenter cette fonctionnalité de le faire. C'est la que les callbacks peuvent être utile : plutot que d'avoir une fonction figée comme :
Tu auras :
Ici, ta fonction LitDonné appelera le pointeur passé en paramètre : c'est lui qui se chargera de lire le flux qu'il souhaite.
C'est un exemple bidon mais j'espère t'avoir éclairé un peu.
Pour les callbacks concernant windows, c'est un peu plus compliqué à cerner car il faut savoir comment windows gère la pile des messages mais la, c'est un autre débat (qui pourrait t'embrouiller en plus).
Exemple d'utilisation simple : imaginons que tu as une fonction permettant de lire un fichier s'appelant "LitDonne".
A la base ta fonction ne permet de lire que depuis un fichier mais ton projet grandissant, tu aimerais que l'utilisateur puisse lire depuis un flux quelconque (mémoire, réseaux, tube ...) mais ne voulant pas te prendre la tête à le faire tu décides que ce sera au programmeur voulant implémenter cette fonctionnalité de le faire. C'est la que les callbacks peuvent être utile : plutot que d'avoir une fonction figée comme :
Code : Tout sélectionner
Procedure LitDonne(fichier_a_lire.s)
resultat = OpenFile(fichier_a_lire)
; blah ...
EndProcedure
Code : Tout sélectionner
Procedure LitDonne(*pointeur_fonction_a_appeler.l)
; pseudo code
CallFunctionFast(*pointeur_fonction_a_appeler, param ...)
EndProcedure
C'est un exemple bidon mais j'espère t'avoir éclairé un peu.
Pour les callbacks concernant windows, c'est un peu plus compliqué à cerner car il faut savoir comment windows gère la pile des messages mais la, c'est un autre débat (qui pourrait t'embrouiller en plus).
"Qui baise trop bouffe un poil." P. Desproges