Est-ce qu'il existe une fonction qui le permet ? Ou meme simplement de la lire sans qu'on puisse la modifier ?
Est-ce qu'il existe une fonction qui le permet ? Ou meme simplement de la lire sans qu'on puisse la modifier ?
Il va falloir que tu lises le contenu de la mémoire vidéo.
Supposons que tu possèdes une carte graphique couleur (!)...
La mémoire vidéo texte couleur est située à l'adresse B800:0000.
Chaque caratère est codé sur deux octets : le premier contenant le code ASCII et le second les attributs (couleur d'avant et d'arrière plan).
Donc, pour lire une chaîne sur l'écran, il falloir lire un octet sur deux... Ce n'est pas très réjouissant, mais bon, faut faire avec !
La position de la chaîne dans la mémoire va être donnée par :
Pos := Y * 80 * 2 + X * 2;
Admettons que l'on veuille lire une chaîne de Count caractères... Ca nous donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 var i: Integer; Pos: Integer; S: string; begin S := ''; Pos := Y * 160 + X * 2; for i := 0 to Count - 1 do S := S + Mem[$B800:Pos + i * 2]; end;
A+
je suis en mode texte, et je veux stocker dans un string le contenu d'une ligne de l'ecran. Je sais pas si c facile, mais je sais pas comment faire.
edit: avais pas vu le post + haut. merci bcp, je vais tt de suite tester .
J'ai une erreur type mismatch a la ligne
s:=s+mem[$B800:pos+i*2];
?? yspasse quoi ?
Wep, désolé, j'ai oublié le transtypage !
S := S + Char(Mem[$B800os + i * 2]);
A+
oky...ça compile mais ça me renvoie n'importe nawak come chaine...en lisant la meme chose, elle renvoie la meme chose, mais ça ne correspond pas du tout à ce qui est sur la ligne...
X et Y correspondent bien aux coordonnees du debut de la ligne que l'on veut lire, et Count au nombre de caracteres que l'on veut lire c ça ?
Yaurait pas un decalage a faire sur le transtypage ?
Je ne sais pas si c'est caratère/couleur ou couleur/caractère je ne m'en souviens plus.
ajouter +1, on ne sais jamais :
S := S + Char(Mem[$B800:Pos + i * 2 +1])
Bon, j'ai résolu le pb !
Primo, je m'étais gouré dans ma fonction, l'initialisation etait pas parfaite
Le codage est bien dans l'ordre caractere/couleur
Mais yavait aussi une legere erreur dans l'algo donné: la position initiale est:
pos:=(y-1)*80*2+(x-1)*2 (le premier caractere de l'ecran est a l'adresse $B800:0000, pas $B800:0162);
Ah non non ! Aucune erreur dans l'algo ! Mais il faudra t'y habituer... La mémoire fonctionne toujours en base zéro, et ce n'est que TP qui fait des fantaisies avec le premier caractère en (1,1). En réalité, sa position est (0,0).
Donc, mon algo fonctionne parfaitement. Mais l'écran texte fait 0..79 caractères sur 0..24 lignes...
A+
pour écrire dans le coin superieur gauche je dois faire gotoxy(1,1); et ceci sur tous les ordis sur lesquels je bosse, donc les fantaisies...m'enfin je critique pas, sans ton algo je serais encore dans la merde jusqu'au cou, donc merci beaucoup
Je dis et je répète que c'est Turbo Pascal qui fait des fantaisies. GotoXY est une fonction Pascal. En réalité, GotoXY appelle l'int 10h, en soustrayant "1" aux coordonnées X et Y données. C'est stupide, mais c'était pour ne pas martyriser les débutants !
A+
type
caractére=record
ch:char;
coul:byte;
end;
var
tabl:array[1..25,1..80] of caractére absolute $B800:0;
s:string;
i:word;
x,y:word;
begin
y=ligne;s=''
for i:=1 to 80
s=s+tabl[y,i].ch;
end.
ET ALORS
JE COUNCOUR PERSONNE MOI
JE DONNE DES IDEE C'est tt
Tu ne serais pas du genre "susceptible" ?
A chaque fois qu'on te répond, c'est pour crier.
Va crier ailleurs.
et hdd34 c est pas grave ne soit pas si agressif ... il est vrai que il fauderait evitez de ressortir les message d il y a 2 moi sa fais ... a la fin ...
ce que hdd34 dis, c'est vrai, c'est une petite fantésie de TP7. Une fant. qui m'a value des problémes, un truc sur lequel g chercher toute un week-end pour me rendre compte qu'il ne fallait pas mettre 0,12, mais 1,12 ...
mais je crois que pour l'écran graphique c'est different non ???
@+ Mathieu
Si je suis agressif avec notre ami, c'est qu'à chaque qu'il est intervenu, c'était soit pour se payer notre tête, soit pour gueuler. Allez voir aussi sur le forum asm comme on peut l'adorer.
Pour n'importe quelle mémoire, la première adresse est zéro. Point final.
Ce n'est que TP qui fait des bizarreries, en mode texte (avec Crt), comme en mode graphique (avec la BGI).
A+
Vlannn ...
on se calme, ne passe pas ton ordi par la fenétre, calme toi, y'a des imbecile partout ...
@+ Mathieu
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager