IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Turbo Pascal Discussion :

[TP]lire une ligne de l'ecran et la stocker dans une chaine


Sujet :

Turbo Pascal

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut [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
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    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
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    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
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    J'ai une erreur type mismatch a la ligne
    s:=s+mem[$B800:pos+i*2];
    ?? yspasse quoi ?

  5. #5
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Wep, désolé, j'ai oublié le transtypage !

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


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

    Pour me joindre (aucune question technique, merci)

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    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
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Yaurait pas un decalage a faire sur le transtypage ?

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 10
    Points : 135
    Points
    135
    Par défaut
    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])
    @+

    Saïd LANKRI, lankri_said at yahoo.fr

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

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    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
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    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
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    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
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    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
    Inscrit en
    Mai 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    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
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    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
    Inscrit en
    Mai 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    ET ALORS
    JE COUNCOUR PERSONNE MOI
    JE DONNE DES IDEE C'est tt

  16. #16
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    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 Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    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

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 107
    Points : 279
    Points
    279
    Par défaut
    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
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    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

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 107
    Points : 279
    Points
    279
    Par défaut
    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.

Discussions similaires

  1. [XL-2010] Suppression d'une ligne dans une feuille A tout en garder les infos dans une feuille B
    Par sebastien_ofs dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/01/2015, 12h10
  2. Réponses: 13
    Dernier message: 23/05/2013, 20h38
  3. [AC-2003] Supprimer une ligne d'un tableau selon la sélection dans une liste
    Par Evolvana dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/08/2011, 09h25
  4. [AC-2000] Création d'une requête pour compter le nombre de ok dans une ligne
    Par yassine06 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/05/2010, 16h10
  5. Réponses: 1
    Dernier message: 31/08/2009, 22h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo