IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

EventHandler sur WinDev


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut EventHandler sur WinDev
    Bonjour à tous.

    J'ai besoin de votre aide. En effet je débute dans le développement WinDev car je dois intégrer un terminal de paiement par cartes à un logiciel externe qui a été développé sur WinDev.

    Si le C# ne me pose pas vraiment de problèmes, je suis un peu perdu maintenant sur Windev.

    J'ai intégré à mon projet l'assemblage .NET de l'Api et j'arrive à envoyer activer/désactiver/envoyer des transactions au terminal. Maintenant mon problème c'est gérer les événements retournés par celui-ci afin de déterminer par exemple si la transaction est passée ou a échoué.

    En C# j'ai ceci (j'ai enlevé les bouts de code qui ne sont pas pertinents pour le problème)
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public MainForm()
            {
     
     
                terminal.TransactionCompleted += new SIX.TimApi.Terminal.TransactionCompletedEventHandler(terminal_TransactionCompleted);
     
            }
    void terminal_TransactionCompleted(object sender, SIX.TimApi.Terminal.TransactionCompletedEventArgs transactionCompletedEventArgs)
            {
                setRequestInProgress(false);
     
                // If event contains a null exception the transaction completed successfully.
                // Use data.getTransactionType() to see what kind of transaction finished if you
                // do not track this information yourself already. getTransactionType() is
                // present for your convenience.
                if (transactionCompletedEventArgs.TimError == null)
                {                
                    MessageBox.Show("Transaction validée","Transaction",MessageBoxButtons.OK,MessageBoxIcon.Information);
                }
                else 
                {
     
                    MessageBox.Show(transactionCompletedEventArgs.TimError.ErrorMessage, "Transaction échouée", MessageBoxButtons.OK, MessageBoxIcon.Information);
    			}
            }

    J'ai regardé cette doc mais je n'arrive pas à faire fonctionner

    https://doc.pcsoft.fr/fr-FR/?1000017...legue_fonction


    Quelqu'un aurait une idée/piste?

    Merci beaucoup de votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Points : 59
    Points
    59
    Par défaut
    Bonjour.

    FileCopy est une classe que je me suis créé en C# pour la copie de plusieurs fichiers avec information de l'état d'avancement.

    J'ai déclaré ma classe dans la procédure de ma fenêtre.
    J'ai ajouté les évènements liés à ma classe FileCopy (gclCopy.Add[...]) dans Fin d'initialisation de la fenêtre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            gclCopy est FileCopy()
     
    	gclCopy.add_CopyStarted(DotNetDélégué("Action_DébutCopie","EventHandler<DokareWD.CopyingStartArgs>"))
    	gclCopy.add_ProgressionChanged(DotNetDélégué("Action_ProgressionCopie","EventHandler<DokareWD.ProgressionChangedArgs>"))
    	gclCopy.add_CopyEnded(DotNetDélégué("Action_FinCopie","EventHandler<DokareWD.CopyingEndArgs>"))
    	gclCopy.add_AllCopyCompleted(DotNetDélégué("Action_EnsembleCopieTerminée","EventHandler"))
    Puis j'ai créé plusieurs procédures locales privées à ma fenêtre comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCÉDURE PRIVÉE Action_DébutCopie(sender, args)
    Et je récupère les infos de mon EventHandler<DOKAREWD.CopyingStartArgs> en utilisant args de la façon suivante :
    J'espère que cela d'aidera.

    Cordialement

  3. #3
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Je pense que tu te fourvoie en utilisant dotNetDélegué qui sert à appeler du WLangage dans une fonction .NET.
    Comme tu vas développer en Windev, il est nettement plus simple d'utiliser ton assemblage .NET dans ton projet.
    Tu utilises alors les fonctions de l'API comme des fonctions WLangage ... ou presque.
    Par ailleurs, il est aussi possible de Saisir du code C#
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Points : 59
    Points
    59
    Par défaut
    Je ne me fourvoies pas, ça marche.

    Par contre c'est une piste qui peut déboucher sur autre chose.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci à vous pour vos réponse. Cependant après multiples essais je n'arrive toujours pas à comprendre la gestion des evenements en Windev.. Je suis certain que cela doit être un truc tout con et que je cherche midi à 14h.. mais venant du c#, le windev est un tout nouveau monde et du coup je suis pas mal perdu sur des fonctions un peu plus avancées..

    Si j'arrive à capter les événements tout ce dont veux faire sera a portée de main mais là je bloque...

    Dois-je utiliser des procédures locales d'une fenêtre? Des procédures Globales?

    Si quelqu'un arriverait à me guider avec le code c# que j'ai mis sur le post principal dans le reste de mon projet

    Merci à vous

  6. #6
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tiagof.design Voir le message
    Dois-je utiliser des procédures locales d'une fenêtre? Des procédures Globales?
    Cela dépend de la visibilité de la fonction/procédure.
    Si ta fonction n'est utilisée que dans ta fenêtre, il est inutile de créer un collection de procédures globales.

    Par exemple, je n'ai qu'une seule fenêtre qui permet l'ajout de client la fonction AjouteClient sera une procédure locale à la fenêtre.
    Par contre, si j'ai 2 (ou plus) fenêtre qui permettent l'ajout de client, il faudra créer une collection de procédure (e.g. COL_Client) dans laquelle on inclura la fonction AjouteClient.
    Un petit passage par l'autoformation te permettra d'y voir plus clair.

    En ce qui concerne ton code

    Cela pourrait se traduire par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    FONCTION terminal_TransactionCompleted(Param...):booleen
    SI TransactionCompletedEventArgs.TimError=NULL ALORS
         Info("Transaction OK")
         RENVOYER Vrai
    SINON
         Erreur("Transaction NOK")
         RENVOYER FAUX
    FIN
    La fonction peut être utilisée de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI terminal_Transaction(Param...) ALORS     //Vrai a été renvoyé par la fonction
         Info("On a déjà vu que c'était bon")
    SINON
         Info("On a déjà vu que c'était faux")
    FIN
    C'est RENVOYER qui se charge de tout.
    Si on ne veux pas de dialogue on peut même utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FONCTION terminal_TransactionCompleted(Param...)
    RENVOYER TransactionCompletedEventArgs.TimError
    L'appel se fait alors comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI terminal_Transaction(Param...)=NULL ALORS
         Info("Transaction OK")
    SINON
         Info("Transaction NOK")
    FIN
    L'équivalent de "new" en WLangage est allouer.
    Pour affecter une valeur particulière à une instance de classe il faut passer cette valeur lors de l'allocation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MaClasse est CLasse
         PRIVE
         m_sNom est chaine
         m_dDateNaissance est chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Constructeur(sNomInstance est chaine ="")
    :m_sNom=sNomInstance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    clMonInstance est MaClasse
     
    clMonInstance=allouer un MaClasse("toto")
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oh merci beaucoup pour ta réponse bien développée. Je vais reprendre tes conseils et essayer cela.

Discussions similaires

  1. MCD sur windev 10
    Par t.n.b.g dans le forum WinDev
    Réponses: 5
    Dernier message: 08/04/2008, 16h52
  2. Cours et tutoriels et pdf sur WINDEV WEBDEV
    Par hocine1978 dans le forum WinDev
    Réponses: 6
    Dernier message: 19/12/2006, 17h27
  3. Mode test et retour sur WinDev
    Par PapyCrouton dans le forum WinDev
    Réponses: 2
    Dernier message: 06/10/2006, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo