Contrairement à une idée répandue sur ce forum, l'instruction
END ne joue aucun rôle dans la gestion des événements.
L'instruction
END n'existe que pour empêcher l'exécution de continuer en séquence et d'aller exécuter le traitement d'un événement
dans le cas où on met un traitement des événements après le programme principal.
PANORAMIC est un langage Basic et lors du lancement,
l'exécution commence à la première ligne du source. C'est pourquoi il est commode de commencer un programme en définissant l'environnement par la création des objets, leurs positions, leurs dimensions, leurs caractéristiques et à quels événements ils devront réagir. Dans ce cas, on a un programme "principal", qui débute à la première ligne du source. Or, quand tout l'environnement a été décrit, il faut pouvoir arrêter ce programme principal pour qu'il n'aille pas éxécuter du code réservé aux traitement des événements.
C'est à cela que sert le
END et uniquement à cela: séparer le programme principal du reste.
Si on regarde le schéma le plus utilisé pour un programme utilisant les événements, il y a besoin d'un
END:
- Code:
-
label clique:rem on définit un label
button 1:rem on définit un objet
top 1,50:left 1,100:rem on le positionne
on_click 1,clique:rem on le fait réagir à un événement clic
rem on doit arrêter le programme principal ici, sinon on va aller exécuter "clique"
rem c'est pourquoi on met END
end
rem on met ici le traitement du clic
clique:
caption 1,"clic"
return
Dans cet exemple, si on n'avait pas mis de
END, l'exécution aurait continué jusqu'à l'instruction
RETURN et on se retrouverait avec une erreur du type : RETURN trouvé et il n'y a pas eu de GOSUB. C'est le seul rôle du END: arrêter le programme principal pour que l'exécution n'aille pas exécuter le traitement réservé pour les événements et causer du "désordre".
Mais si on décide le mettre les traitements d'événements
AVANT de définir les objets, on n'a plus besoin de
END car l'exécution s'arrête naturellement à la dernière ligne du source !
- Code:
-
label alenvers,clique
goto alenvers
rem on met ici le traitement du clic
clique:
caption 1,"clic"
return
alenvers:
button 1:rem on définit un objet
top 1,50:left 1,100:rem on le positionne
on_click 1,clique:rem on le fait réagir à un événement clic
En résumé:
- L'instruction
END ne joue aucun rôle dans la gestion des événements.
- Un événement est actif dès l'instruction qui le définit:
ON_CLICK,
ON_CHANGE, etc...
- Cet événement reste actif après l'exécution du
END.
- Après l'exécution du
END, le programme principal est arrété, mais la gestion des événements continue à être active.