Tuto Events?
Tuto Events?
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.
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.
- Mindphazer
- Messages : 694
- Inscription : mer. 24/août/2005 10:42
Re: Tuto Events?
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
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
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Re: Tuto Events?
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?
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)

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)

Re: Tuto Events?
Simple :je n'ai pas trouvé la méthode pour lier des évènements à une procédure ( BindGadgetEvent(#Gadget, @handler() par exemple ).
Code : Tout sélectionner
BindGadget(unGadget, @uneProcedure() )
Re: Tuto Events?
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.Ollivier a écrit : mer. 10/janv./2024 18:10 Simple :Code : Tout sélectionner
BindGadget(unGadget, @uneProcedure() )
En tout cas, merci pour avoir pris le temps de m'apporter des réponses.
Re: Tuto Events?
Un programme interactif Windows doit avoir une boucle principale (et une seule)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.
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?
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?
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().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() ).
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...
*: 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
- 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
Re: Tuto Events?
Ok. C'est le genre d'info que je recherchais. Merci.