Page 1 sur 1

Tuto Events?

Publié : mer. 10/janv./2024 14:51
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.

Re: Tuto Events?

Publié : mer. 10/janv./2024 16:31
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

Re: Tuto Events?

Publié : mer. 10/janv./2024 17:00
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.

Re: Tuto Events?

Publié : mer. 10/janv./2024 17:22
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:

Re: Tuto Events?

Publié : mer. 10/janv./2024 18:10
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() )

Re: Tuto Events?

Publié : mer. 10/janv./2024 20:14
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.

Re: Tuto Events?

Publié : jeu. 11/janv./2024 12:53
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.

Re: Tuto Events?

Publié : jeu. 11/janv./2024 12:58
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.

Re: Tuto Events?

Publié : ven. 12/janv./2024 23:49
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...

Re: Tuto Events?

Publié : sam. 13/janv./2024 5:17
par jph
Ok. C'est le genre d'info que je recherchais. Merci.