DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Communication / Fonctions Dotnet
  • Vocabulaire
  • Comment utiliser un delegate DotNet avec WINDEV ?
  • Comment traiter les événements .NET
  • Astuce
  • Divers
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
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

Vocabulaire

  • 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 :
  1. 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).
  2. 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.
  3. 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)
    // Instancier une classe possédant un delegate 
    clUtilise est un CUtiliseDelegate

    // Ajouter une "delegate method" (callback WL) au delegate
    clUtilise:AjouteDelegate(DotNetDélégué("MaCallbackWL", "CUtiliseDelegate.CpfMonDelegate"))

    // Provoquer l'utilisation du delegate par la classe .NET
    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 :
WD ObservateurRépertoire 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
WD Délégué DOTNET Exemples didactiques (WINDEV) : WD Délégué DOTNET
[ + ] Cet exemple didactique montre comment interagir avec les délégués DOTNET
Composante : wd290vm.dll
Voir Aussi
Version minimum requise
  • Version 12
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 08/09/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale