6 : Fenêtres, texte et menus

L'Amiga est un système WIMP, comme vous le savez sûrement. Le concept original d'une interface informatique contenant des Fenêtres, Icônes, Souris et Pointeurs a été développé par Xerox au Palo Alto Research Centre. J'ai un jour interviewé Dan Silva, l'auteur de Deluxe Paint, qui y travaillait, et il disait que la plupart des choses qu'ils y inventent seront rarement utilisées, car elles sont tellement en avance sur ce que nous avons actuellement que cela relève pratiquement de la science-fiction. Pas étonnant que les interfaces WIMP, ou Interfaces Utilisateur Graphiques comme les costards préfèrent les appeler, aient mis autant de temps à s'imposer dans le monde réel.

Lorsque l'Amiga fut conçu en 1985, les interfaces graphiques étaient à la mode, si bien que les concepteurs très visionnaires y ont intégré une souris et une interface graphique (gooey) appelée Workbench. La manière d'Accéder aux fenêtres et aux menus avec AmigaBASIC était adéquate mais limitée. Ce n'est qu'avec AMOS que nous pouvons vraiment déchaîner toute la puissance des fenêtres et des menus.

Fenêtres propres

Si ce que vous avez en tête pour votre programme AMOS n'est pas un jeu mais plutôt ce que l'on appellerait un programme utilitaire ou de productivité, alors vous devrez maîtriser les aspects fenêtrés d'AMOS. Une simple fenêtre avec des menus déroulants peut sembler un peu fade, bien qu'il existe des moyens de les rendre plus attrayantes, mais elle est totalement fonctionnelle. Une fenêtre est fondamentalement une petite zone indépendante de texte et de graphismes sur l'écran.

Nous verrons plus tard comment rendre les choses un peu plus intéressantes, mais pour l'instant, nous allons voir comment créer des programmes simples basés sur des fenêtres.

Pour ouvrir une fenêtre à l'écran, vous devez utiliser la commande WIND OPEN, comme ceci :

Wind Open 1,10,10,50,10

Cela ouvrirait par exemple une fenêtre à l'écran appelée fenêtre 1, dont le coin supérieur gauche serait à la position 10,10 sur l'écran, avec une largeur de 50 caractères et une hauteur de 10. L'avantage pratique de tout cela est que vous pouvez avoir deux ou plusieurs fenêtres à l'écran, chacune ayant son propre texte affiché, comme dans cet exemple :

Rem * Two Windows.AMOS *
Rem
Screen Open 0,640,200,16,Hires
Cls 0
Flash Off
Paper 7 : Wind Open 1,0,0,40,20 : Print "Here is a win-
dow..."
Paper 4 : Wind Open 2,320,0,40,20 : Print "So this is a
window, eh?"
Wait Key
Window 1 : Paper 7 : Print "And I can print..."
Wait Key
Window 2 : Paper 4 : Print "...to any one I choose..."
Wait Key
Window 1 : Paper 7 : Print "...just by saying Window x..."
Wait Key
Window 2 : Paper 4 : Print "...and typing whatever I want..."
Wait Key
Window 1 : Paper 7 : Print "...and up it pops in each..."
Wait Key
Window 2 : Paper 4 : Print "...window I specify!!!"
Wait Key
    

Chaque fois que vous appuyez sur une touche dans ce programme, le texte suivant apparaît dans la fenêtre spécifiée. Bien entendu, vous pouvez pousser cela à l'extrême, mais seulement si cela ne vous dérange pas que les gens ne puissent plus lire le texte à cause du trop grand nombre de fenêtres !

Bien que les fenêtres que vous obtenez dans AMOS ne soient pas exactement les mêmes que celles auxquelles vous êtes habitué dans AmigaDOS, elles offrent tout de même une variété de styles et de formes, et peuvent se comporter comme de vraies fenêtres avec un minimum de modifications. Par exemple, vous pouvez les redimensionner, voire ajouter des gadgets comme les poignées Intuition, mais tout cela doit être fait manuellement car Intuition n'est pas chargé lorsque AMOS est en cours d'exécution, hélas.

Redimensionnement de fenêtre

Le redimensionnement est un bon exemple, voyons cela :

Rem * Resizing Window.AMOS *
Rem
Screen Open 0,640,256,16,Hires
Paper 0 : Cls 0
Wind Save
Reserve Zone 1
Wind Open 1,10,50,20,20,1
Border ,0,4
Title Top " Resize me, babe "
Set Zone 1,10,50 To 10+160,50+160
Do
    If Mouse Key=1 and Mouse Zone=1
        GX1=10 : GY1=50 : RESIZE
        Reset Zone 1 : Set Zone 1,GX1,GY1 To GX2,GY2
        SX=(GX2-GX1)/8 : SY=(GY2-GY1)/8
        Wind Size SX,SY
    End If
    Print "AMOS: the only way to fly. ";
Loop
    
Procedure RESIZE
Shared GX1,GX2,GY1,GY2
Gr Writing 2
Repeat
    If Mouse Key=1
        GX2=X Screen(X Mouse) : GY2=Y Screen(Y Mouse)
        OGX=GX2 : OGY=GY2
        While Mouse Key=1
            Box GX1,GY1 To GX2,GY2
            GX2=X Screen(X Mouse) : GY2=Y Screen(Y Mouse)
            Box GX1,GY1 To GX2,GY2
        Wend
        Box GX1,GY1 To OGX,OGY
        Box GX1,GY1 To GX2,GY2 : GOTCHA=True
        If GX1>GX2 : T=GX1 : GX1=GX2 : GX2=T : End If
        If GY1>GY2 : T=GY1 : GY1=GY2 : GY2=T : End If
    End If
Until GOTCHA
Gr Writing 1
End Proc
    

Ce petit programme est une astuce sympathique. Une fenêtre apparaît à l'écran et vous pouvez tirer le coin inférieur droit tout en cliquant avec le bouton gauche de la souris. La fenêtre peut alors être redimensionnée à n'importe quelle taille sur l'écran, et lorsqu'on relâche le bouton, la fenêtre s'ajuste à cette nouvelle forme.

Ce petit programme est une astuce sympa. Une fenêtre apparaît à l'écran et vous pouvez tirer sur le coin inférieur droit tout en cliquant avec le bouton gauche de la souris. La fenêtre peut alors être redimensionnée à n'importe quelle taille sur l'écran, et lorsque vous relâchez le bouton, la fenêtre prend cette nouvelle forme. Et mieux encore, comme il s'agit d'une fenêtre AMOS, la ligne de texte remonte automatiquement en s'ajustant à la nouvelle taille de la fenêtre chaque fois que vous la redimensionnez avec la souris.

Pour sélectionner quelque chose à l'écran (contrairement au code Intuition très pratique qui fait tout pour vous), vous devez dessiner une fenêtre, puis définir une Zone autour d'elle pour détecter la présence d'un clic de souris. Une fois la présence détectée, vous devez voir où le curseur se déplace, puis redimensionner la fenêtre avec WIND SIZE.

Dans ce programme, nous commençons par ouvrir un écran en haute résolution et régler les couleurs (bla bla) comme d'habitude. Ensuite, nous activons WIND SAVE, ce qui signifie que nos fenêtres sont intelligentes et ne corrompent pas ce qui se trouve en dessous. C'est vraiment génial car cela signifie que vous pouvez ouvrir une fenêtre au-dessus d'un écran de jeu par exemple, comme un fichier IFF, et rien sur l'écran ne sera effacé lorsque vous fermerez la fenêtre.

Ensuite, nous faisons RESERVE ZONE, ce que vous devez faire à chaque fois que vous allez utiliser SET ZONE. Cela signifie que si vous écrivez :

Reserve Zone 1

vous dites en gros : « je vais définir une zone plus tard dans le programme, donc réserve-moi de la mémoire pour ça et je reviendrai plus tard ».

Maintenant nous définissons toutes les caractéristiques de la fenêtre que nous allons créer, dans ce cas la Fenêtre 1 est une fenêtre de 20x20 caractères, dont le coin supérieur gauche est situé à la position 10,50 sur l'écran. Après cela, nous utilisons les fonctions BORDER et TITLE TOP pour décrire un peu plus la fenêtre, comme le texte du titre, en l'occurrence le moins que l'on puisse dire « Resize me, babe », et les couleurs de la bordure.

La partie suivante est la plus intéressante. Ensuite, nous ouvrons la Zone que nous avions promis plus tôt. Elle couvre la zone occupée par la fenêtre, et on le fait en spécifiant le numéro de Zone, ici 1, ainsi que les coordonnées du coin supérieur gauche et du coin inférieur droit de la Zone. (Le coin inférieur droit est ici calculé paresseusement en multipliant les valeurs supérieures gauches par 160, c?est-à-dire 8*20, 8 étant le nombre de pixels par caractère, et 20 la largeur de la fenêtre.)

Nous entrons maintenant dans la boucle principale du programme. Celle-ci vérifie les fonctions MOUSE KEY et MOUSE ZONE pour voir si la souris se trouve dans la Zone et si le bouton gauche de la souris est enfoncé. Si c'est le cas, la procédure RESIZE est activée.

La procédure RESIZE effectue alors tout le travail : elle crée un effet d?élastique (rubber band) pour montrer où se trouvent les côtés de la fenêtre, modifie les variables contenant les coordonnées de la fenêtre, et vérifie si le bouton de la souris a été relâché grâce à une boucle WHILE...WEND. Une fois le bouton relâché, la fenêtre est redessinée à la nouvelle taille.

Une fois les nouvelles coordonnées enregistrées, l?ancienne Zone est annulée puis redéfinie à la nouvelle taille, et tout est prêt pour recommencer.

Au fait, ne réduisez pas la fenêtre trop petite sinon vous risquez de faire planter le programme avec une erreur Window Too Small. La raison est que les fenêtres ont besoin d?espace pour leur bordure, et si cet espace n?est pas suffisant, AMOS ne peut pas dessiner la fenêtre, ce qui provoque une erreur.

Vous pourriez bien sûr prévoir une routine de capture d?erreurs (error trapping) qui dirait : si la fenêtre est trop petite, la redessiner avec la taille minimale. Je vais laisser ce petit projet fermenter dans votre esprit pendant un moment et passer à ce qui rend les fenêtres AMOS encore plus amusantes : les sliders.

Faites glisser, Charlie Brown

En plus des fenêtres, vous pouvez aussi ajouter des sliders (barres de défilement) à vos écrans, comme ceux que vous voyez sur les écrans classiques de l'Amiga. Par exemple :

Rem * Slider bars.AMOS *
Rem
Screen Open 0,640,256,16,Hires
Flash Off : Curs Off : Double Buffer : Cls 0
Paper 0 : Pen 4
Set Slider 2,4,11,12,4,5,6,9
Reserve Zone 2
Set Zone 1,0,175 To 319,195
HSLIDE[10] : Screen Swap : Wait Vbl : HSLIDE[10]
Set Zone 2,0,0 To 25,170
VSLIDE[10] : Screen Swap : Wait Vbl : VSLIDE[10]
Autoback 0
Do
 If Mouse Zone=1 and Mouse Key
   X=X Screen(X Mouse)
   If X<>XM and Mouse Key=1 : XM=X : End If
 End If

 If Mouse Zone=2 and Mouse Key
   Y=Y Screen(Y Mouse)
   If Y<>YM and Mouse Key=1 : YM=Y : End If
 End If

 Locate 5,0 : Print "X slider=";X;" "
 Locate 22,0 : Print "Y SLIDER=";Y;" "
 VSLIDE[Y] : HSLIDE[X]
 Screen Swap : Wait Vbl
Loop

Procedure HSLIDE[X]
 Hslider 0,180 To 319,190,319,X,5
End Proc

Procedure VSLIDE[Y]
 Vslider 0,0 To 10,170,170,Y,5
End Proc
    

Bon, d'accord, je n?ai jamais vu de sliders tout à fait comme ça auparavant, mais vous non plus ! Toute la configuration des sliders se fait avec la commande SET SLIDER au début. Comme pour notre fenêtre redimensionnable, les sliders doivent avoir une Zone autour d?eux pour fonctionner. Donc, si vous voulez que les fenêtres et les sliders se redimensionnent dans la même zone, vous allez devoir faire des calculs très astucieux ou vous assurer que vos Zones ne se croisent jamais.

Dans ce cas, les Zones entourent les sliders, et elles détectent la souris de la même façon que précédemment. Mais cette fois, au lieu de redimensionner la barre, elle repositionne simplement le curseur dans le slider à la position de la souris. Vous pouvez ensuite utiliser cette position pour faire défiler un écran ou du texte dans une mémoire tampon, ou toute autre action du genre. Toutes les raisons habituelles de vouloir saisir un slider et le faire glisser, en fait.

Pas de texte, s'il vous plaît

Le texte dans vos programmes est quelque chose que l'on prend facilement pour acquis. Je l?ai fait par le passé, et je sais qu?il est difficile de penser au-delà de ce qui était possible dans le vieux AmigaBASIC un peu poussif, ce qui constitue l?expérience de programmation de la plupart des gens avant de découvrir AMOS. Mais AMOS ouvre des perspectives entièrement nouvelles en matière de programmation, et ce très simplement. Alors voyons comment vous pouvez donner un peu de piquant à vos textes, que ce soit pour un titre de jeu, un tableau des meilleurs scores, ou simplement un écran d?accueil pour un utilitaire.

Le texte dans un programme informatique remplit deux rôles. Les mots écrits à l?écran vous disent quoi faire, et le style avec lequel ils le font vous en dit long sur le souci du détail du programmeur. Les astuces de texte les plus courantes incluent une mise en forme astucieuse et des changements de couleur. Mais les plus impressionnantes sont les variations de police et de taille. C?est comme la différence entre taper à la machine et composer votre texte dans un logiciel de PAO.

Pour utiliser du texte dans une fenêtre, il vous suffit d?utiliser l?instruction PRINT après avoir sélectionné la fenêtre. Mais vous pouvez aussi changer la police en utilisant GET FONTS puis WINDOW FONT pour choisir la police que vous souhaitez utiliser.

Utiliser des polices sur n?importe quel écran, même dans une fenêtre, est facile avec AMOS. Alors examinons un peu plus en détail les types de textes que vous pouvez utiliser.

Deux types de texte

Il existe deux types de texte dans AMOS : le texte normal et ce qu'ils appellent le texte graphique. Le texte normal est affiché à l'écran avec l'instruction PRINT, mais le texte graphique doit être placé à l'écran avec TEXT, comme ceci :

Rem * Simple Font Change.AMOS *
Rem
Get Fonts
Paper 8
Set Font 8
Ink 2 : Text 5,50,"Mastering AMOS"
    

La commande GET FONTS scanne la ROM et le répertoire FONTS: sur disque pour trouver les polices, et SET FONT sélectionne la police appropriée dans l'ordre de priorité. La couleur des polices graphiques est définie avec INK plutôt que PEN (car elles sont dessinées, non imprimées, étant des graphismes !)

Une fois que vous maîtrisez le texte graphique, vous pouvez réaliser toutes sortes d'effets techniques, comme ajouter des ombres au texte :

Rem * Fontshade.AMOS *
Rem
Paper 8 : Curs Off : Hide : Cls
Get Fonts
For F=1 To 30
 If Font$(F)<>""
  Clw
  Print Font$(F)
  Set Font F
  For Y=20 To 150 Step 20
    SHAD[10,Y,"Mastering AMOS",1]
  Next
  Wait Key
 End If
Next

Procedure SHAD[X,Y,A$,D]
 Gr Writing 0
 Ink 0
 For DX=-D To D
   Text X+DX,Y-D,A$ = Text X+DX,Y+D,A$
 Next
 For DY=-D+1 To D-1
   Text X-D,Y+DY,A$ : Text X+D,Y+DY,A$
 Next
 Ink 2 : Text X,Y,A$
End Proc
    

Cela utilise le mode JAM1 via la commande GR WRITING pour garantir un bon rendu. Si vous êtes vraiment malin, vous pouvez même ajouter une ombre portée en modifiant simplement les deux dernières lignes :

Ink 2 : Text X-2,Y-2,A$
End Proc
    

Cela décale l'impression finale des caractères en blanc vers le haut et la gauche de l'ombre noire, créant ainsi une ombre portée. Expérimentez avec le code et voyez combien d'effets vous pouvez obtenir. Par exemple, pourquoi ne pas imprimer la dernière fois avec la même couleur que le PAPER pour obtenir un texte en contour ? Ou pour quelque chose de plus sophistiqué :

  1. Utilisez un fond gris.
  2. Imprimez d'abord en blanc, décalé de deux pixels vers le haut et la gauche.
  3. Puis une deuxième fois en noir ou gris foncé, deux pixels en bas et à droite.
  4. Enfin, imprimez une troisième fois avec le gris du fond.

Voilà ! Vous avez une méthode pour transformer n'importe quelle police en bas-relief. Malin, non ?

Un mot à propos de CText

Des effets plus exotiques peuvent être obtenus avec le programme CText d'Aaron Fothergill, qui pousse le texte graphique à l'extrême. Si vous obtenez ce programme (auprès du club AMOS d'Aaron ou de Deja Vu Software), vous pouvez créer une police dans Deluxe Paint et l'inclure dans votre programme comme les pros.

La police est stockée dans un fichier image IFF (comme l'exemple affiché sur cette page), puis scannée dans CText une lettre à la fois. Vous pouvez ensuite l'afficher à l'écran comme du texte ordinaire, voire créer un message défilant sur un autre écran. Mais je reviendrai sur tout cela plus en détail au Chapitre 7.

La malédiction des curseurs

Vous pouvez aussi modifier l?apparence du curseur, pas seulement l?activer ou le désactiver avec CURS OFF. Si le curseur vous gêne, le modifier peut être plus adapté.

SET CURS permet d?entrer un petit graphique en guise de curseur, comme ceci :

Rem * Arrow Cursor.AMOS *
Rem
C1=%1000OO00
C2=%1000OOO
C3=%1000O0
C4=%1000O
C5=%1000OO
C6=%1000OO0
C7=%1000OOO0
C8=%O
Set Curs C1,C2,C3,C4,C5,C6,C7,C8
Wait Key
    

Cela ne fera peut-être pas ce que vous pensez. Les chiffres binaires sont tronqués pour supprimer les zéros initiaux. Quand je les ai saisis, ça ressemblait à ça :

C1=%1000O0OO
C2=%010000O0
C3=%O0100000
C4=%0OO10000
C5=%0010000O
C6=%O100000O
C7=%10000OO0
C8=%00OOO0OO
    

Là où il y a des 1 dans l?image binaire du curseur, un pixel de couleur 3 apparaît. Ainsi, la petite flèche pointe vers la droite, un peu comme un symbole de supériorité (>) ou le curseur d'AmigaDOS.

Donc vous avez des fenêtres plein l?écran, du texte stylé, des curseurs de formes variées... que manque-t-il à votre application pour être complète ? Exact : les menus.

Menus simples

Si vous programmez autre chose qu'un jeu, vous devrez vous habituer à générer des menus. C'est bien plus facile dans AMOS que dans, disons, AmigaBASIC, où vous devez tout spécifier si précisément que vous pourriez aussi bien les dessiner à la main.

Créer un écran est assez simple avec la commande Screen Open, mais que faut-il faire pour que les menus agissent comme dans un programme Amiga classique ? Procédons étape par étape :

Screen Open 0,640,256,16,Hires
    

Simple et efficace. Un écran en moyenne résolution pour donner un look utilitaire. Maintenant nous définissons nos menus :

Menu$(1)=" Projet "
Menu$(1,1)="Charger "
Menu$(1,2)="Charger sous... "
Menu$(1,3)="Sauver "
Menu$(1,4)="Sauver sous... "
    

Voilà le menu 1 configuré, et comme vous pouvez le voir, c'est très simple à nommer. 1 est le titre du menu, et 1,1 est un sous-menu. On fait de même pour le menu suivant, avec une petite subtilité :

Menu$(2)=" À propos de ce jeu "
Menu$(2,1)="Démarrer une nouvelle partie"
Menu$(2,1,1)="Êtes-vous sûr ?"
Menu$(2,1,1,1)="Oui - GO !"
Menu$(2,1,1,2)="Non - Annuler"
Menu$(2,2)="Nouveau joueur..."
Menu$(2,3)="Nouvel adversaire..."
Menu$(2,4)="Modifier le terrain"
    

Vous pouvez continuer à ajouter des sous-menus comme 2,1,1,1,1,1 à l'infini, mais gardez en tête que plus de deux niveaux de sous-menus deviennent vite agaçants pour l'utilisateur. Enfin, nous activons les menus :

Menu On
    

À ce moment, les menus sont actifs. Vous pouvez bien sûr les désactiver plus tard si vous ne voulez pas que l'utilisateur y accède à un moment donné du programme. Pour finir, quelques détails cosmiques et de diagnostic :

Curs Off : Cls 0
Do
 Print "Menu= ";Choice(1);" Sélection= ";Choice(2)
Loop
    

Vous pouvez maintenant exécuter le programme. Remarquez comment les numéros de menu et de sélection changent selon l'élément choisi. C'est comme ça que vous savez ce que l'utilisateur a sélectionné : il suffit de lire les variables Choice(1) et Choice(2).

Menus avancés

Pour vraiment maîtriser les menus, surtout si vous en avez plusieurs, vous devez utiliser le système de menu automatique d'AMOS avec ON MENU ON. Cela demande un peu de pratique, mais c'est assez simple. Le programme révisé commence plus ou moins de la même manière :

Screen Open 0,640,256,16,Hires
Cls 0 : Curs Off
Menu$(1)=" Projet "
Menu$(1,1)="Charger "
Menu$(1,2)="Charger sous... "
Menu$(1,3)="Sauver "
Menu$(1,4)="Sauver sous... "
Menu$(2)=" À propos du jeu "
Menu$(2,1)="Démarrer une nouvelle partie"
Menu$(2,1,1)="Êtes-vous sûr ?"
Menu$(2,1,1,1)="Oui - GO !"
Menu$(2,1,1,2)="Non - Annuler"
Menu$(2,2)="Nouveau joueur"
Menu$(2,3)="Nouvel adversaire"
Menu$(2,4)="Modifier le terrain"
    

Mais à partir de là, on entre dans un nouveau territoire :

On Menu Proc PROJET,APROPOS
On Menu On
Menu On
Wait Key
    

Cela active le système de menu automatique d'AMOS et attend soit une sélection depuis les menus, soit l'appui sur une touche. Les PROC que vous avez mentionnés dans l'instruction ON MENU sont ensuite définis ailleurs dans le programme, comme ci-dessous :

Procedure PROJET
 Cls
 Y=Choice(2)
 Locate 0,22 : Print "Menu : Projet"
 Locate 0,23
 If Y=1 Then Print "Charger quoi ?"
 If Y=2 Then Print "Charger sous quel nom ?"
 If Y=3 Then Print "Sauver quoi ?"
 If Y=4 Then Print "Sauver sous quel nom ?"
 OM
End Proc

Procedure APROPOS
 Cls
 Y=Choice(2)
 Locate 0,22 : Print "Menu : À propos du jeu"
 Locate 0,23
 If Y=1 Then Print "Oui ou non ? Lequel ?"
 If Y=2 Then Print "Non, je refuse !"
 If Y=3 Then Print "Il se débrouillera tout seul"
 If Y=4 Then Print "Fonction non implémentée"
 OM
End Proc

Procedure OM
 On Menu On
End Proc
    

Et voilà. Les réponses sont gérées dans des PROCs, ce qui simplifie beaucoup les choses. Vous n'avez qu'à vérifier la variable Choice(2), car le premier choix (le menu lui-même) est automatiquement déterminé, et vous êtes dirigé vers le PROC correspondant.

Une fois que vous avez des sous-programmes qui acceptent des entrées depuis les menus, vous disposez de la base d'un programme utilitaire piloté par menu.

Menus graphiques

C'est un domaine qui contient quelques couches de subtilité rarement abordées. Les raccourcis clavier sont une chose, les menus graphiques en sont une autre (et ça, vous ne pouvez pas le faire facilement avec Intuition, hein ?), sans parler des menus déplaçables.

Il y a tant de choses dans le système de menus d'AMOS que vous seriez surpris. Le système est bien plus flexible qu'AmigaDOS, ce qui pousse à se demander pourquoi certains programment encore en C ou en assembleur.

Voici un programme qui illustre l'utilisation des menus de façon très inhabituelle, et difficilement réalisable avec les menus classiques d'AmigaDOS :

Rem * Bobs on a menu.AMOS *
Rem
Load "df0:sprite_600/aliens/alien1.abk"
Load "df0:sprite_600/space/ship1.abk",1
Flash Off : Cls 0
Get Sprite Palette
Menu$(1)="(Bob 1)Insectes" : Menu$(1,1)="(Bob 2)Cet insecte" : Menu$(1,2)="(Bob 3)Cet autre"
Menu$(2)="(Bob 21)Vaisseaux" : Menu$(2,1)="(Bob 22)Ce vaisseau" : Menu$(2,2)="(Bob 23)Celui-là"
Menu On
Do
Loop

Ce programme utilise les Bobs du set Sprite_600, prévoyez donc ces fichiers sur df0:. Les Bobs apparaissent dans les menus et fonctionnent comme des menus normaux, avec en plus de superbes images. Ces images peuvent être explicatives, ou même être du texte graphique ! Imaginez vos textes de menu en graffiti ou en nuages, selon le style de votre programme. Vous pouvez faire de même avec des Sprites et des Icônes.

Curseurs personnalisés

Concevoir un curseur ? Pas la priorité absolue, mais si vous programmez des choses orientées texte, vous serez content de vous débarrasser du curseur AMOS par défaut. Pour tous ceux qui veulent créer leurs propres curseurs, essayez le programme Swiz du disque AMOS PD Library 394. C'est un éditeur de curseurs avec des exemples :

Rem * Alien *
Set Curs %00111100,%01111110,%10011001,%10011001,%11111111,%00111100,%00100100,%01100110
Wait Key

Rem * Flèche 2 *
Set Curs %00000000,%00000100,%00000110,%11111111,%01111111,%00000011,%00000100,%00000000
Wait Key

Rem * Grande flèche *
Set Curs %11000000,%11110000,%11111100,%11111111,%11111111,%11111100,%11110000,%11000000
Wait Key

Rem * Smiley *
Set Curs %00111100,%01000010,%10100101,%10000001,%10000001,%10011001,%01000010,%00111100
Wait Key

Rem * Petite flèche *
Set Curs %10000000,%11000000,%11100000,%11110000,%11110000,%11000000,%11000000,%10000000
Wait Key

Rem * Cœur *
Set Curs %00000000,%01101100,%11111110,%11111110,%01111100,%00111000,%00010000,%00000000
Wait Key

L'avantage du programme Swiz est qu'il vous permet de vous concentrer sur le design du curseur, tout en sauvegardant les données en ASCII, prêtes à être intégrées à vos programmes.

Vous pouvez aussi jouer avec les curseurs via les commandes Cline, Cup, Cdown, Cleft et Cright :

Rem * Cline, Cup & Friends.AMOS *
Rem
Screen Open 0,640,256,16,Hires
Hide : Paper 0 : Pen 4 : Cls 0
Wait 100 : Bell : Print "Salut les copains !"
Cdown : Wait 100 : Cdown
Bell : Pen 6 : Centre "Le curseur vient de sauter ici"
Cdown : Wait 100
Bell : Pen 2 : Print "puis ici..."
Cdown : Cdown

For LEFT=1 To 50
 Cleft
 Wait 1
Next LEFT

Wait 100 : Pen 12 : Bell
Print "et maintenant là"

Wait 100 : Cdown : Cdown
Wait 100 : Cright : Cright : Cright

Bell : Pen 14 : Print "Encore plus à droite"

For UP=0 To 6
 Cup
 Wait 1
Next UP

Wait 100 : Bell : Pen 10
Print "Et finalement ici"

Wait 100
Cmove 5,20
Pen 3 : Wait 50 : Print "Ou bien on saute directement avec CMOVE"
Wait 100
Pen 4 : Locate ,24 : Centre "ET MAINTENANT, ON EFFACE TOUT UNE LIGNE À LA FOIS"
Wait 100

Home : Paper 6
For X=0 To 30
 Cline
 Locate ,X
 Wait 10
Next

Wait 200
Locate ,10 : Pen 2 : Centre "Et voilà, les commandes de curseur !"
Wait 500 : Edit

Hyper Hypertexte

Que faire de ce système de fenêtres, de menus et de textes ? Eh bien, le choix logique est un système d'hypertexte, comme ceux qu'on trouve dans le CanDo d'INOVAtronics ou d'autres. Il suffit de créer des boutons à l'écran avec des Zones, de charger des images depuis un CD ou des fichiers texte dans des fenêtres défilantes, avec des barres de défilement pour le contrôle, et des zones sur certains mots pour aller ailleurs.

Les possibilités sont infinies.

← Retour au sommaire