IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Gestion de la souris sous Turbo-Pascal

Nouveauté : 09/04/03

Pascail

I) Introduction

Pour améliorer l’interface d’un grand nombre de programmes, il vaut mieux utiliser la souris. Pour faciliter la gestion de la souris, nous allons faire ensembles une unité de gestion de la souris.
Ce tutorial vous explique brièvement la manière d’accéder aux registres, et aux interruptions dites ASM.

Pour gérer la souris, nous passons par l’intermédiaire de l’interruption 33h.
Dès le départ, Microsoft a équipé sa souris d'une interface logiciel implémentée sous la forme du driver de périphérique MOUSE.SYS ou du programme MOUSE.COM. Cette interface est devenue par la suite un standard adopté par tous les constructeurs de souris afin de garantir une compatibilité totale avec la souris Microsoft.

II) Les interruptions

Pour utiliser notre souris, nous allons avoir besoin des passer par les interruptions assembleur.
Pour cela, il va nous falloir un registre, une variable logique du processeur. Ce registre, nous allons le déclarer comme cela :
var regs : registers;
Nota : Le nom de la fonction est généralement passé par le registre AX ( regs.ax ). Et surtout, il faudra faire un Uses Dos ; car Registers est situé dans l'unité Dos.
Pour information, voici une liste rapide des registres du processeur :
AX : Accumulateur, sert à toutes les opérations
BX: Base, sert dans les opérations sur la mémoire
CX: Counter, sert notamment pour les compteurs
DX: Dat, sert pour les opérations mathématiques principalement
DS: Data segment, segment mémoire pour les données
ES: Extra segment, segment temporaire
SI: Source index, sert pour les opérations sur les chaînes de caractères et les buffers.
DI: Destination index, comme SI
Pour appeler une interruption, sans rentrer dans l’ASM, il y a quelque chose de très utile :
Intr ($INT, regs ) ;

III) L’initialisation

Pour commencer de travailler avec la souris, il nous faut déjà l’initialiser.
La fonction (AX) d’initialisation est le n° $00. L’interruption de la souris est $33.
Nous allons donc ajouter cette fonction qui permet d’initialiser la souris. La fonction renvoi TRUE si l’initialisation s’est bien passée et FALSE pour le contraire.

IV) Afficher – masquer le curseur

Maintenant que nous avons initialisé la souris, nous allons pouvoir afficher le curseur à l’écran, et bien sur, le masquer. Pour le moment, nous allons juste nous occuper du mode texte. La fonction d’affichage du curseur est nommée $01.De plus, la fonction qui masque le curseur est nommée $02. L’interruption de la souris est toujours $33 … elle n’a toujours pas bougée, et ce depuis des années.
Nous allons donc ajouter, cette fois deux procédures à notre unité.

 

V) Positionnement et état de la souris

Bien. Nous avons maintenant, initialisé la souris, et nous voyons sur l’écran, lors de l’appel à Afficher, le curseur de notre souris. Maintenant, nous devons lire l’état de la souris. Tout se passera au travers de la fonction $03, toujours à partir de l’interruption $33.
C’est maintenant là que les registres sont importants :
Après votre appel à partir de intr, le registre regs contiendra les éléments suivants :
Regs.CX -> Position horizontale de la Souris
Regs.DX -> Position verticale de la souris
Regs.BX -> Etat des boutons.

a) Position de la souris

Pour la position de la souris, ce sont les registres CX et DX.
Nota : Les ordonnées renvoyées dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.
Nota : Regs.CX correspond aux X et Regs.DX correspond aux Y
Nous allons donc ajouter a notre unité, 1 procedure :

b) Etat des boutons

Voici ce que contient le registre BX, et ce qu'il signifie.

Valeur de BX Signification
0 bouton gauche de la souris appuyé
1 bouton droit de la souris appuyé
2 bouton central de la souris appuyé
3-15 Aucune (0)

Nota : sans le tableau, le résultat de la fonction ci-dessous est inutilisable.
Nous allons encore ajouter une fonction à notre unité. Cette fonction renvoi la VALEUR DU BIT. Vous devrez donc utiliser le tableau ci-dessus pour déchiffrer la valeur


VI) Fin de l’unité

Voila, maintenant, il ne vous reste plus qu’a indexer toutes les fonctions et procédures dans la partie interface de l’unité, ou de la télécharger en cliquant ici…
Ou même copier / coller le code ci dessous :

 

- Pascail - Hdd34 -