| ★ APPLICATIONS ★ CREATION GRAPHIQUE ★ CHERRY-PAINT (CPC REVUE N°5 -> 9) ★ |
| CHERRY PAINT (CPC Revue n°5) | CHERRY PAINT (CPC Revue n°6) | CHERRY PAINT (CPC Revue n°7) | CHERRY PAINT (CPC Revue n°8) | CHERRY PAINT (CPC Revue n°9) |
Amis lecteurs, bonjour. Je vous propose aujourd'hui d'étudier le fonctionnement de la main et des menus déroulants : c'est un gros morceau et une partie essentielle de Cherry-Paint...VOYONS D'ABORD LA MAIN A quoi peut bien servir cette main ? Comme vous l'avez sans doute remarqué, on ne peut pas accéder à la totalité d'une page d'écran avec le crayon ou le pinceau, par exemple. Effectivement, on ne peut agir que sur la fenêtre de travail pour éviter, bien sûr, d'effacer les icônes, les trames, etc. Pour accéder malgré tout à la page d'écran complète, nous allons utiliser cette fameuse main. Imaginez-vous que la fenêtre de travail est en fait un trou dans "le bureau", (desktop, selon le terme consacré). A tavers ce trou, on voit une partie de la page d'écran complète. Imaginez-vous aussi que la page d'écran complète est une feuille de papier que l'on peut déplacer sous le "trou". Par conséquent, si l'on veut voir une partie de la page écran actuellement cadrée par le bureau, il suffit de "pousser" ou de "tirer" la page à l'aide de la main ; la feuille va alors "glisser" et l'on verra se déplacer la page d'écran à travers le "trou". Pour utiliser la main, il faut bien sûr la sélectionner en cliquant dans la case contenant la main. En cliquant et en déplaçant simultanément la main, on pousse alors la feuille. Le déplacement de la page est limité par la taille de cette page. En d'autres termes : on ne peut pas sortir de la page d'écran ! Jusqu'à présent nous avons parlé de "trous", de "bureau", de "feuilles de papier". Tous ces termes sont en fait des représentations imagées et n'ont évidemment aucune réalité physique (vous avez des trous dans votre AMSTRAD, vous ?). Nous allons donc voir maintenant comment la main fonctionne en réalité. Lorsqu'un déplacement est effectué à l'aide de la main, la partie de l'image qui sort (c'est-à-dire qui n'est plus en face du trou dans le bureau) ne doit pas purement et simplement disparaître de la mémoire, car si l'on déplace l'image dans l'autre sens, ce morceau d'image doit évidemment réapparaître. Il faut donc l'avoir sauvegardé quelque part en mémoire. Cherry-Paint réserve à cet effet une zone de mémoire débutant en # 100 et finissant en #4100. Cette zone a, par conséquent, une largeur de #4000, c'est-à-dire 16 k-octets ; elle est donc capable de contenir une page d'écran complète. Cette solution peut sembler contestable. Effectivement, il serait suffisant de conserver la partie indivisible de la page d'écran, alors que dans Cherry-Paint, la fenêtre de travail existe en double ; dans la mémoire d'écran et dans la zone de sauvegarde, en dautres termes : on perd 9 k. Donc, si je pousse mon raisonnement jusqu'au bout, le gugusse qui a écrit Cherry-Paint s'est complètement planté ! Eh bien non, pas du tout ! Premièrement, parce que le gugusse qui a écrit Cherry-Paint, c'est moi, et deuxièmement, parce que la double représentation en mémoire de la zone de travail permet d'obtenir un effet très intéressant. Dans Cherry-Paint, le déplacement avec la main ne se fait pas point par point pour des raisons de vitesse. Par exemple, pour le déplacement latéral, il est intéressant de décaler l'image d'un octet à la fois pour éviter de faire des décalages de bits très gourmands en temps de calcul : pour un décalage de 4 bits à droite, le temps de calcul est 6 fois plus grand ! VOYONS MAINTENANT LES MENUS DEROULANTS En haut de l'écran de Cherry-Paint se trouve la barre de menus. Cette barre contient plusieurs options : Fichier, Outils, Facilités, Caractères, Taille, Style. En cliquant par exemple sur l'option Fichier, on voit apparaître un menu déroulant qui contient : Sauver une image, Charger une image, Nouvelle page, etc. Si, à ce moment là, on arrête de cliquer, le menu déroulant se referme et aucune action rï'est entreprise. Par contre, si on déplace le pointeur vers le bas, on observe alors que l'option sur laquelle se trouve la flèche passe en vidéo inverse. Si l'on arrête alors de cliquer, l'option en vidéo inverse est exécutée. Par exemple, si on relâche lorsque la flèche se trouve sur "Nouvelle page", la page est effacée... à condition que le programme correspondant existe, ce qui n'est pas le cas actuellement (nous le créerons dans le prochain épisode) ! Les menus déroulants permettent donc d'augmenter largement les possibilités du programme (gestion du lecteur de disque, des caractères, etc...), d'autant plus que dans Cherry-Paint, ces menus déroulants sont conçus de manière à être totalement extensibles : le gestionnaire de menus déroulants contient une table qui contient les indications suivantes pour chaque menu déroulant :
De cette manière, si je veux ajouter un élément à mon menu déroulant, il suffit que j'ajoute 1 à la largeur du menu déroulant, que j'ajoute l'adresse de mon sous-programme dans la première table et l'adresse de mon titre dans la seconde table. C'est tout. Voyons maintenant le fonctionnement du gestionnaire de menus déroulants un peu plus en détails. Il se décompose en trois phases essentielles :
Dans Cherry-Paint, le gestionnaire de menus déroulants est très rapide : il est impossible de discerner l'ouverture du cadre de l'écriture des titres (ce qui n'est pas le cas de tous les logiciels utilisant des menus déroulants !). Pour que l'ouverture d'un menu soit réalisée à une vitesse satisfaisante, il est impensable d'utiliser les routines du moniteur pour afficher une chaîne de caractères. La routine que je vous propose est nettement plus rapide que celle du moniteur : la différence de vitesse provient du fait que pour chaque caractère à afficher, le moniteur calcule l'adresse dans la page d'écran après avoir testé la légalité de la position, puis transforme les 8 octets de la matrice pour les adapter au mode courant, et masque chaque octet avec le masque de la couleur actuelle (voir listing source)... Pour saisir le code du programme, nous allons procéder de la manière habituelle :
ADAPTATION JOYSTICK Pour faire l'adaptation complète au joystick, il faut faire : POKE &8233,72 |
| ![]() |
| Page précédente : Cherry-Paint |
|