|
|
|
|
|
- Vocabulaire
- Comment utiliser un delegate DotNet avec WINDEV ?
- Comment traiter les événements .NET
- Astuce
- Divers
DotNetDélégué (Fonction) En anglais : DotNetDelegate Initialise un délégué .NET. Ce délégué permettra à .NET de rappeler une procédure ou une méthode du WLangage dans le cas des événements ou des "callbacks".
clPossède est un PossèdeEvènement
clPossède:add_MonEvènement(DotNetDélégué("MonHandler", "EventHandler<MonArgumentEvènement>"))
clPossède:Déclenche("Coucou")
PROCÉDURE MonHandler(src, args)
Trace(args:Message)
Syntaxe
<Résultat> = DotNetDélégué(<Procédure WLangage> , <Type du délégué>)
<Résultat> : Objet .NET Objet .Net du type du délégué. <Procédure WLangage> : Nom de procédure Nom de la procédure ou de la méthode WLangage à appeler. Cette procédure est de la forme :
PROCEDURE <Nom de la procédure>(Src, Args) où : - Src correspond à l'objet .NET envoyant l'événement
- Args correspond à l'objet .NET utilisé comme paramètre de l'événement.
<Type du délégué> : Chaîne de caractères Nom de la classe du délégué à créer. Ce paramètre ne doit pas correspondre à une variable. Remarques - Delegate : Sert à gérer une callback. C'est un type "fonction". Il définit le prototype de la fonction. Le delegate est initialisé avec une fonction .NET correspondant au prototype. Le delegate est l'équivalent .NET du pointeur de fonction du langage C. Il est possible d'associer plusieurs méthodes au même delegate : elles seront toutes appelées.
Attention : dans la documentation .NET, ce terme peut également désigner les "delegates methods", c'est-à -dire les méthodes associées à un délégué. - Handler : Type particulier de delegate spécialement dédié au traitement des événements.
- Evénement : Il est possible d'associer à un événement un ou plusieurs handlers. Lorsque l'événement se produit, tous les handlers qui lui ont été associés sont appelés.
Comment utiliser un delegate DotNet avec WINDEV ? Pour utiliser un delegate DotNet avec WINDEV, il faut : - Trouver le delegate dans la liste des classes .NET
Le delegate est lui-même une classe .NET. Vous devez connaître le nom du delegate (voir la documentation de votre assemblage .NET). - Déterminer les paramètres du delegate
Le delegate définit une méthode Invoke. La procédure WLangage associée au delegate doit posséder les mêmes paramètres. - Associer la procédure WLangage au delegate
Le delegate est utilisé dans une classe .NET. Cette classe possède des méthodes permettant d'ajouter ou de retirer une "delegate method" au delegate. Reportez-vous à la documentation de votre assemblage .NET pour connaître les noms de ces méthodes.
Exemple : - Nom de la classe utilisant le delegate : CUtiliseDelegate
- Nom de la classe du delegate : CUtiliseDelegate.CpfMonDelegate
- Prototype de la méthode Invoke de la classe CUtiliseDelegate.CpfMonDelegate : Invoke(entier)
- Prototype de la méthode WLangage correspondante : Procédure MaCallbackWL(local i est un entier)
clUtilise est un CUtiliseDelegate
clUtilise:AjouteDelegate(DotNetDélégué("MaCallbackWL", "CUtiliseDelegate.CpfMonDelegate"))
clUtilise:UtiliseDelegate()
Comment traiter les événements .NET Pour traiter les événements .Net, il faut : 1. Trouver l'événement L'événement est un membre d'une classe .NET. Ce membre a un nom et un type. Le type définit le type du handler qui pourra être associé à l'événement. Le nom permet de trouver deux méthodes : - "add_<Nom de l'événement>"
- "remove_<Nom de l'événement>"
Ces deux méthodes permettent d'associer et de dissocier un ou plusieurs handlers à un événement. Le type du paramètre de ces deux méthodes est le nom du type du handler. Exemple : La classe PossèdeEvénement contient un événement MonEvenement de type EventHandler<MonArgumentEvénement>. 2. Récupérer un handler La récupération d'un handler est réalisée grâce à la fonction DotNetDélégué : - Le premier paramètre est le nom de la procédure WLangage
- Le second paramètre est le nom de la classe du type du handler. Ce nom peut être récupéré par le nom du type des paramètres des méthodes "add_xxx" et "remove_xxx".
Exemple : La procédure WLangage est de la forme :
PROCÉDURE MonHandler(src, args)
Trace(args:Message)
src est un objet .NET de type PossèdeEvénement, args est un objet .NET de type MonArgumentEvénement 3. Associer le handler à l'événement Pour associer le handler à l'événement, il suffit d'appeler sur l'objet possédant l'événement, la méthode "add_<Nom de l'événement>". Exemple :
clPossède:add_MonEvénement(DotNetDélégué("MonHandler", "EventHandler<MonArgumentEvénement>"))
4. Déclencher l'événement Dans notre exemple, l'appel à clPossède:Déclenche provoque l'événement. Astuce Dans la procédure WLangage, il est possible : - soit d'utiliser directement les méthodes associées aux paramètres de la procédure. Cependant, la complétion n'est pas disponible.
- soit de définir un objet dynamique et de lui affecter le paramètre voulu. La complétion est alors disponible sur l'objet.
Ces deux méthodes sont utilisées dans l'exemple détaillé. Divers - Cette fonction ne peut pas être utilisée en compilation dynamique.
- La procédure WLangage est exécutée dans un thread secondaire. Le mode HFSQL utilisé est une copie légère du contexte HFSQL à chaque appel. Le contexte est détruit à la fin de la procédure.
Liste des exemples associés :
|
Exemples didactiques (WINDEV) : WD ObservateurRépertoire
[ + ] Cet exemple montre l'utilisation de la fonction WLangage fSurveilleRépertoire. il permet de monitorer un répertoire, c'est à dire d'être prévenu à chaque fois qu'une modification est faite dans ce répertoire. Une modification peut être : - Un ajout de fichier / répertoire - Un renommage - Une modification de fichier - Une suppression de fichier
|
|
Exemples didactiques (WINDEV) : WD Délégué DOTNET
[ + ] Cet exemple didactique montre comment interagir avec les délégués DOTNET
|
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|