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]Comment utiliser les fonctions de bases de la souris ?


Sujet :

Turbo Pascal

  1. #1
    KOD
    KOD est déconnecté
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [TP]Comment utiliser les fonctions de bases de la souris ?
    alors voila , je debute dans la programmation, mon prof nous a filer des projets ( vous savez le genre de projet a 2 balles de 1 er semestre pour les dugenoux ki save pas programmer comme moi.)
    alors voila moi j'ai pris le BackGammon ( jeu que je considerais comme antédiluvien mais au finale qui peut etre super strategique...... bref la n'est pas le sujet).
    Alors moi je veux le faire avec la souris. ( apparament il faut utiliser des fonctions asembleurs ( jamais fais mais cela a l'air tres logique apres zietage dans tuto de Haypo mais pas moyen de me faire renvoyer les coordonnées X et Y .....

    Voila je suis conscient que ce probleme n'est insurmontable qu'une seule fois ( apres comme on sait faire on se renseigne sur l'interruption et haut sa marche toujours pareil apparament.) mais la je suis bloquer et je ne peut pas faire avancer mon prog . c'est rageant SVP qu'une ame charitable puisse me transmettre son savoir et promis je lui envoie le jeu quand il est fini..........
    -=KOD=- [ZETA]

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    On utilise l'interruption 33h pour la souris, après il suffit d'utiliser les bonnes fonctions de l'interruption...
    Poste ton code si tu veux plus de renseignements

    a+

  3. #3
    KOD
    KOD est déconnecté
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut ok pour 33h...
    finalement j'ai reussi a avoir le pointeur a l'ecran. ( en utilisant la bibliotheuqe de haypo )
    mais pas moyen de recupere les coord x et y de la souris au moment du clic. je pense que je n'arrive pas a correctement declarer les parametres de la fonction LITSOURIS, et/ou ATTENDSOURIS.
    j'ai bien compris qu'elles se trouve dans le registre ( mais c koi un registre et comment on acceder au registre CX,BX etc.... ?

    Merci d'avance...
    -=KoD Zet@=-

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Si tu dois passer par l'assembleur, essaye d'abord d'en apprendre les bases (MOV, INT, CMP par exemple...). Procure-toi également de la doc sur les interruptions (la cultissime "Ralf Brown's Interrupt List", ou encore "HelpPC" de David Jurgens)

    a+

  5. #5
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut Re: ok pour 33h...
    Citation Envoyé par KOD
    finalement j'ai reussi a avoir le pointeur a l'ecran. ( en utilisant la bibliotheuqe de haypo )
    mais pas moyen de recupere les coord x et y de la souris au moment du clic.(...)
    Faut que je relise mon code ... ça date ! Je te conseille de voir les sources de :
    http://pascal.developpez.com/peripherique/souris.zip

    C'est le programme le plus simple que j'ai écrit qui utilise la souris.

    Donc, pour lire les coordonnées de la souris, tu appelles LitSouris. Cette fonction lit :
    - les coordonnées de la souris (X,Y),
    - le déplacement par rapport au dernier appel de LitSouris (PlusX, PlusY),
    - et l'état des boutons (B1, B2, B3).

    Toutes les variables sont contenus dans la structure "Souris" (Souris.X, Souris.PlusX, Souris.B1, etc.). J'ai choisi de tout mettre dans Souris, car justement on a pas besoin de passer de paramètre :-)

    @+ Haypo

  6. #6
    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 peux te passer de l'assembleur. Et vu ce que tu nous dis, dugenou , il vaudrait peut-être mieux que tu t'en passes.

    Pour afficher la souris, fonction 1 de l'int 33h. Pas de paramètres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    uses
      Dos;
     
    var
      Regs: Registers;
     
    begin
    Regs.ax := 1;
    Intr($33, Regs);
    end;
    Pour récupérer les coordonnées, fonction 3 de l'int 33h, récupération sur cx et dx, respectivement pour X et Y :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    uses
      Dos;
     
    var
      Regs: Registers;
      X, Y: Integer;
     
    begin
    Regs.ax := 3;
    Intr($33, Regs);
    X := Regs.cx;
    Y := Regs.dx;
    end.

    Et ainsi de suite...

    A+

  7. #7
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Mouarf, c'est pas si terrible de convertir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Regs.ax := 1; 
    Intr($33, Regs);
    en

  8. #8
    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
    Oui, sauf que s'il se plante avec une instruction mal écrite en asm, il peut se faire mal. Avec Registers, c'est un risque bien plus calculé. Rien ne ressemble plus à un opcode assembleur qu'une autre opcode assembleur.

    Je ne connais pas la bête, alors au cas où. Et puis s'il commence à poser beaucoup sur l'asm, on est pas sorti

    A+

  9. #9
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Ce serait possible souvent de donner des réponses Pascal à des problèmes Pascal :

    Je veux dire, ce n'est pas tout le monde qui connaît l'assembleur et qui plus est quelqu'un qui commence en Info (là il ne pige que dal ). Donc ce serait bien à mon avis qu'on propose des solutions qui n'ont rien à voir avec le Pascal (ce n'est pas très marrant d'écrire un code sans pouvoir le modifier à souhait même s'il marche correctement!)

  10. #10
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Ben, l'assembleur c'est quand même le langage ultime, le père de tous les langages, et il permet de tout faire, absolument TOUT ! Pascal est un langage de niveau supérieur, mais il se base sur l'assembleur... Et il arrive que Pascal n'est pas prévu certaines situations, qu'il ne peut résoudre seul. Dans ces cas là, la seule solution reste l'assembleur !
    En général, tout ce qui en rapport avec le système, comme la souris ou les modes graphiques, doit être géré avec des interruptions (et donc de l'assembleur, ou avec la fonction Intr de pascal...)

    a+

  11. #11
    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
    On a pas trop le choix en general , d'ou l'interet d'utiliser des lib toutes faites qui permettent de ne pas avoir a se salir les mains

  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
    Si j'ai bien capté, tu veux un code qui n'a rien à voir avec le Pascal. Soit.

    Pour récupérer les coordonnées de la souris, il faut faire appel à l'interruption numéro $33, numéro de fonction 3. Pour ce faire, il faut appeler cette fameuse interruption en ayant au préalable chargé dans le registre système AX le numéro de la fonction, à savoir 3 dans notre exemple. Par la suite, une fois l'interruption appelée, on peut récupérer les coordonnées de la souris sur les regsitres CX (pour les abscisses, X) et DX (pour les ordonnées, Y). On peut aussi obtenir l'état actuel des boutons, avec le registre BX.

    Voilà, pas de code, une solution très générale.

    Pour le code Pascal, c'est ma proposition. Pour le code assembleur, c'est la proposition de Wormful.

    Pour le pseudo-code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AX <- 3
    INT($33)
    X <- CX
    Y <- DX
    Boutons <- BX
    où INT représente un appel à une interruption système.

    Et avec ceci ? 100 balles et un Mars ?

    A+

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/04/2007, 09h08
  2. Comment utiliser les fonctions d'un autre fichier?
    Par zuzuu dans le forum Général Python
    Réponses: 8
    Dernier message: 14/12/2006, 18h22
  3. Réponses: 4
    Dernier message: 03/05/2006, 17h34
  4. comment utiliser les fonctions d'une dll
    Par sebled dans le forum MFC
    Réponses: 3
    Dernier message: 24/02/2006, 16h59
  5. Réponses: 3
    Dernier message: 31/12/2005, 23h09

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