Tuto Events?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Tuto Events?

Message par jph »

Bonjour,

Je voudrais juste savoir si il existe un tuto assez complet sur la gestion des évènements en PB ? J'ai essayé de voir sur ces forums mais je n'ai rien vu. Peut-être que j'ai mal cherché? Merci d'avance.
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

Re: Tuto Events?

Message par Mindphazer »

Il y a le vieux bouquin "Purebasic - A beginner's guide" qui n'est pas trop mal foutu... et qui a été traduit par kernadec : viewtopic.php?t=18529
Les évènements sont expliqués à partir de la page 114
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Tuto Events?

Message par jph »

Mindphazer a écrit : mer. 10/janv./2024 16:31 Les évènements sont expliqués à partir de la page 114
Je viens de parcourir brièvement ce bouquin et je n'ai pas trouvé la méthode pour lier des évènements à une procédure ( BindGadgetEvent(#Gadget, @handler() par exemple ). Peut-être que dans les anciennes versions de PB cela n'existait pas encore? En tout cas, c'est bien expliqué et on peut s'en sortir avec ça

Merci.
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Tuto Events?

Message par Marc56 »

BindGadgetEvent()
https://www.purebasic.com/french/docume ... event.html

est arrivé avec la version 5.20 LTS (2013)
https://www.purebasic.com/documentation ... story.html
(utiliser CTRL+F pour trouver la première occurrence dans la page)

Toujours commencer par les références officielles: elles sont à jour (sauf les version beta dont l'aide arrive après)
(néanmoins pour les beta, l'aide contextuelle (syntaxe en barre d'état) est toujours à jour)
:wink:
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Tuto Events?

Message par Ollivier »

je n'ai pas trouvé la méthode pour lier des évènements à une procédure ( BindGadgetEvent(#Gadget, @handler() par exemple ).
Simple :

Code : Tout sélectionner

BindGadget(unGadget, @uneProcedure() )
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Tuto Events?

Message par jph »

Ollivier a écrit : mer. 10/janv./2024 18:10 Simple :

Code : Tout sélectionner

BindGadget(unGadget, @uneProcedure() )
En fait, je posais la question car je suis à la recherche d'un peu de théorie qu'il me manque. J'ai bien réussi à programmer des events. Je pense pouvoir m'en sortir mais je ne comprends pas toujours ce que je fais. Du moins comment ça fonctionne. Je suis un peu comme quelqu'un qui conduit une voiture en ignorant ce qu'est un embrayage. C'est possible mais c'est mieux quand on comprends ce que l'on fait.

En tout cas, merci pour avoir pris le temps de m'apporter des réponses.
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Tuto Events?

Message par Marc56 »

je suis à la recherche d'un peu de théorie qu'il me manque. J'ai bien réussi à programmer des events. Je pense pouvoir m'en sortir mais je ne comprends pas toujours ce que je fais. Du moins comment ça fonctionne.
Un programme interactif Windows doit avoir une boucle principale (et une seule)

Méthode 1. La boucle classique (WindowEvent() WaitWindowEvent()) sera interrompue le temps que l'évènement détecté soit traité (dans le code ou dans une procédure) à moins que le traitement soit traité en parallèle (avec un Thread). On l'utilise donc de préférence pour du travail séquentiel (ex: travail avec des bases de données)

Méthode 2. BindEvent() BindGadgetEvent() BindMenuEvent() travaillent en dehors de la boucle et vont faire le traitement à tout moment. On l'utilise pour mettre des données à jour rapidement (ex: gestion graphique). Bind... nécessite quand même une boucle principale (vide) sinon le programme quitte.
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Tuto Events?

Message par jph »

Merci. Je commence à comprendre et j'arrive à peu près à faire ce que je veux. Donc ça va. Merci encore pour ces précisions.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Tuto Events?

Message par Ollivier »

J'ajoute aux très bons conseils de Marc (56) que les "binds"* préparent un terrain automatique. Et que les fonctions WindowEvent() et WaitWindowEvent() exécutent l'automate interne préparé avec les "binds"*

*: ce que j'appelle les "binds", ce sont les instructions BindEvent(), BindGadgetEvent(), UnbindEvent() et UnbindGadgetEvent(), etc...

Aussi, pour faire rager marc56, le rendre jaloux, attiser son bellicisme et... Bon j'arrête de raconter des grosses bêtises, et, meilleurs voeux à marc56.

Donc pour perfectionner son explication :

- méthode 1 : tout le traitement des évènements passe par la valeur de retour de WindowEvent().

Code : Tout sélectionner

Repeat
 x = WindowEvent()
 If x = #codeEvenementDansLAide
  etc...
 EndIf
Until x = codePourQuitterIdemDansLAideWindowEvent
Les conditions sont explicites.

- méthode 2 : les evénèments traités s'apparentent à des objets que l'on active et règle (BindSuffixe() ), ou désactive (UnbindSuffixe() ) et les conditions sont implicites. La boucle principale est toujours la même, sans trop se soucier de la valeur de retour de WindowEvent() (ou WaitSuffixe() ).

Code : Tout sélectionner

Repeat
  WaitWindowEvent()
ForEver ; penser à "binder" préalablement un évènement de fin
Les deux méthodes ne sont pas exclusives : on peut mixer un traitement semi-automatique avec des "binds" tout en testant la valeur de retour avec If, Select, Until, etc... L'essentiel est de ne pas faire de doublons, en "bindant" un évènement tout en vérifiant la présence de cet évènement dans la valeur de retour de WindowEvent(). De tels doublons, c'est faisable, mais ça fait un code particulièrement et inutilement compliqué à comprendre. Donc le mix c'est bien mais chaque évènement doit être soit "bindé" soit traité explicitement avec les If, etc...
jph
Messages : 68
Inscription : dim. 17/juil./2022 16:02

Re: Tuto Events?

Message par jph »

Ok. C'est le genre d'info que je recherchais. Merci.
Répondre