
|
auteur :
Hdd34 | Pour modifier l'apparence du curseur texte, il faut faire appel à l'interruption 10h, fonction 01h :
uses
Dos;
var
Regs: Registers;
begin
Regs.ax := $0100;
Regs.cl := $20;
Regs.ch := $20;
Intr($10, Regs);
end;
Pour le curseur, 32 lignes sont disponibles (de 0 à 31). Si jamais vous indiquez une valeur supérieure à 31, alors le curseur disparaît.
Les valeurs par défaut pour le curseur texte sont (cl, ch) = (6, 7) pour un adaptateur couleur et (12, 13) pour le monochrome (archaïque !).
|
|
auteur :
Hdd34 | Pour basculer votre application mode texte en 80x50, il faut utiliser la procédure TextMode de l'unité Crt avec l'attribut Font8x8, comme ceci :
uses
Crt;
begin
...
TextMode(CO80 or Font8x8);
...
end.
|
|
auteur :
Hdd34 | Si on écrit tout en bas à droite de l'écran celui-ci défile automatiquement. Ce peut être très gênant si on désire simplement afficher un cadre ou une barre d'état.
Il existe deux manières de parer à ce problème.
- Utiliser Crt
L'unité Crt déclare plusieurs variables pour stocker la taille de l'écran : WindMin et WindMax, correspondant respectivement aux coins supérieur gauche et inférieur droit. Ce sont deux Word dont l'octet de poids faible correspond à la coordonnée en X et l'octet de poids fort à la coordonnée en Y.
Afin de "tromper" Crt, il suffit de lui faire croire que l'écran possède une colonne de plus, en incrémentant la valeur de WindMax, comme ceci :
uses
Crt;
procedure WriteCorner(Ch: Char);
var
X, Y: Byte;
begin
X := WhereX;
Y := WhereY;
Inc(WindMax);
GotoXY(Lo(WindMax) - 1, Hi(WindMax));
Write(Ch);
Dec(WindMax);
GotoXY(X, Y);
end;
- Ecrire directement en mémoire vidéo
On peut si on le désire écrire directement dans la mémoire vidéo à la position souhaitée. Il convient alors de connaître non seulement l'adresse exacte, à savoir B800:0000 pour un adaptateur couleur, mais aussi la structure de données attendue. On peut ainsi déclarer les éléments suivants, pour un écran en 80x25 :
type
TTextScreen = array[1..25, 1..80] of record
Ch: Char;
Color: Byte;
end;
var
TextScreen: TTextScreen absolute $B800:$0000;
- Par la suite, il suffit d'écrire directement dans la variable TextScreen pour placer un caractère sur l'écran. On a alors :
procedure WriteChar(X, Y: Byte; Ch: Char; FgColor, BkColor: Byte);
begin
TextScreen[Y, X].Ch := Ch;
TextScreen[Y, X].Color := (BkColor shl 4) or (FgColor and 15);
end;
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2004
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|