Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau membre du Club
    [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Est-ce qu'il existe une fonction qui le permet ? Ou meme simplement de la lire sans qu'on puisse la modifier ?

  2. #2
    Membre expert
    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+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  3. #3
    Nouveau membre du Club
    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 .

  4. #4
    Nouveau membre du Club
    J'ai une erreur type mismatch a la ligne
    s:=s+mem[$B800:pos+i*2];
    ?? yspasse quoi ?

  5. #5
    Membre expert
    Wep, désolé, j'ai oublié le transtypage !

    S := S + Char(Mem[$B800:Pos + i * 2]);


    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  6. #6
    Nouveau membre du Club
    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 ?

  7. #7
    Nouveau membre du Club
    Yaurait pas un decalage a faire sur le transtypage ?

  8. #8
    Membre habitué
    Ce message n'a pas pu être affiché car il comporte des erreurs.
    @+

    Saïd LANKRI, lankri_said at yahoo.fr

    Billou : "TUEZ-LES TOUS ! DIEU RECONNAITRA LES SIENS !"

  9. #9
    Nouveau membre du Club
    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);

  10. #10
    Membre expert
    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+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  11. #11
    Nouveau membre du Club
    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

  12. #12
    Membre expert
    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+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  13. #13
    Futur Membre du Club
    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.

  14. #14
    Membre expert
    Et 15 jours plus tard....
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  15. #15
    Futur Membre du Club
    ET ALORS
    JE COUNCOUR PERSONNE MOI
    JE DONNE DES IDEE C'est tt

  16. #16
    Membre expert
    Tu ne serais pas du genre "susceptible" ?

    A chaque fois qu'on te répond, c'est pour crier.

    Va crier ailleurs.
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  17. #17
    Membre averti
    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 ...
    6*8 =42

  18. #18
    Membre actif
    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
    Chaque jour, l'homme crée des choses plus grandes, meilleures et sûres, et chaque jour, la nature crée des idiots plus performants. Pour l'instant, je pense que la nature gagne.

  19. #19
    Membre expert
    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+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  20. #20
    Membre actif
    Vlannn ...
    on se calme, ne passe pas ton ordi par la fenétre, calme toi, y'a des imbecile partout ...

    @+ Mathieu
    Chaque jour, l'homme crée des choses plus grandes, meilleures et sûres, et chaque jour, la nature crée des idiots plus performants. Pour l'instant, je pense que la nature gagne.

###raw>template_hook.ano_emploi###