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

Lazarus Pascal Discussion :

[Lazarus] Gestion d'un Joystick avec Lazarus - MMSystem - Marche pas [Non suivi]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 31
    Par défaut [Lazarus] Gestion d'un Joystick avec Lazarus - MMSystem - Marche pas
    Salut,

    J'ai écrit une petite appli en delphi pour gérer un joystick. Ca marche bien et je voudrais le porter sur FreePascal via Lazarus et là problème.

    J'utilise MMSystem.

    Une partie du code delphi est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormCreate(Sender: TObject); 
    var 
    myJoyCaps: TJoyCaps; 
    begin 
    ...
    J'ai remplacé TJoyCaps par JoyCaps dans Lazarus (sinon erreur). Le programme se compile et s'exécute mais le joystick ne fonctionne pas.

    Comment faire ?
    Quelqu'un a t il un exemple de prog avec joystick et Lazarus ?

    Merci,
    Abonn

  2. #2
    Membre chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Par défaut
    je n'ai pas Lazarus d'installé, mais j'ai freepascal et delphi...

    sous delphi la definition de TJoyCaps dans mmsystem est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
      tagJOYCAPSA = record
        wMid: Word;                  { manufacturer ID }
        wPid: Word;                  { product ID }
        szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
        wXmin: UINT;                 { minimum x position value }
        wXmax: UINT;                 { maximum x position value }
        wYmin: UINT;                 { minimum y position value }
        wYmax: UINT;                 { maximum y position value }
        wZmin: UINT;                 { minimum z position value }
        wZmax: UINT;                 { maximum z position value }
        wNumButtons: UINT;           { number of buttons }
        wPeriodMin: UINT;            { minimum message period when captured }
        wPeriodMax: UINT;            { maximum message period when captured }
        wRmin: UINT;                 { minimum r position value }
        wRmax: UINT;                 { maximum r position value }
        wUmin: UINT;                 { minimum u (5th axis) position value }
        wUmax: UINT;                 { maximum u (5th axis) position value }
        wVmin: UINT;                 { minimum v (6th axis) position value }
        wVmax: UINT;                 { maximum v (6th axis) position value }
        wCaps: UINT;                 { joystick capabilites }
        wMaxAxes: UINT;	 	{ maximum number of axes supported }
        wNumAxes: UINT;	 	{ number of axes in use }
        wMaxButtons: UINT;	 	{ maximum number of buttons supported }
        szRegKey: array[0..MAXPNAMELEN - 1] of AnsiChar; { registry key }
        szOEMVxD: array[0..MAX_JOYSTICKOEMVXDNAME - 1] of AnsiChar; { OEM VxD in use }
      end;
    sous freepascal on peut lire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    _JOYCAPSA = packed record
    wMid: WORD;
    wPid: WORD;
    szPname: array [0..Pred(MAXPNAMELEN)] of CHAR;
    wXmin: UINT;
    wXmax: UINT;
    wYmin: UINT;
    wYmax: UINT;
    wZmin: UINT;
    wZmax: UINT;
    wNumButtons: UINT;
    wPeriodMin: UINT;
    wPeriodMax: UINT;
    wRmin: UINT;
    wRmax: UINT;
    wUmin: UINT;
    wUmax: UINT;
    wVmin: UINT;
    wVmax: UINT;
    wCaps: UINT;
    wMaxAxes: UINT;
    wNumAxes: UINT;
    wMaxButtons: UINT;
    szRegKey: array [0..Pred(MAXPNAMELEN)] of CHAR;
    szOEMVxD: array [0..Pred(MAX_JOYSTICKOEMVXDNAME)] of CHAR;
    end;
    Pour ce dernier on manipule des array of char contre des array of ansichar dans Delphi...
    Ceci est peut-etre la cause de tes soucis...

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Citation Envoyé par Clandestino
    Pour ce dernier on manipule des array of char contre des array of ansichar dans Delphi...
    Ceci est peut-etre la cause de tes soucis...
    Je crains que non : sous Delphi, AnsiChar = Char. Les seuls différents sont les WideChar codés sur 2 octets. Donc le problème vient d'ailleurs.

    Tu peux nous montrer les prototypes des API utilisées par Lazarus ?

    @++

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 31
    Par défaut
    Merci pour vos réponses.
    Je ne suis pas un expert en Pascal, j'espère que c'est ceci dont tu parles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    procedure TForm1.Form1Create(Sender: TObject);
    var
     myJoyCaps: JoyCaps; // Syntaxe Delphi -> myJoyCaps: TJoyCaps;
    begin
     joyGetDevCaps(joystickid1,@myJoyCaps,sizeof(myJoyCaps));
     joySetCapture(self.Handle, joystickid1, 100, true);
    end;
     
    et puis par exemple ensuite j'utilise :
    procedure TForm1.MMJOY1MOVE (var LocMessage: TMMJoyStick);
    begin
    Edit1.Text := IntToStr(LocMessage.ypos); 
    Edit2.Text := IntToStr(LocMessage.xpos); 
    trackbar1.position := LocMessage.ypos;
    trackbar2.position := LocMessage.xpos;
     
    Edit3.Text := floattostr(Percentage(LocMessage.ypos));
    Edit4.Text := floattostr(Percentage(LocMessage.xpos));
    end;
    Modération par Wormful_sickfoot :
    - Balises code ajoutées
    Merci de lire les règles du forum.

  5. #5
    Membre chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Par défaut
    Tu as raison HDD34, ansichar et char sont equivalents sous Delphi... :o

    Je remarque aussi que les arrays n'ont pas la meme taille sous delphi et FPC mais ceci est-il la raison de celà?

    Je n'ai pas eu l'occasion de programmer avec ces fonctions...

Discussions similaires

  1. [Lazarus] Comment créer une DLL avec Lazarus
    Par rajawi00 dans le forum Lazarus
    Réponses: 1
    Dernier message: 19/07/2007, 13h49
  2. fopen avec localhost ne marche pas, seulement en distant
    Par __fabrice dans le forum Langage
    Réponses: 6
    Dernier message: 18/12/2006, 17h35
  3. Carte graphique fx5200 avec redhat9 ne marche pas
    Par nouri.moudhffar dans le forum Administration système
    Réponses: 2
    Dernier message: 24/06/2006, 15h31
  4. [CSS] Bug IE avec height ne marche pas avec les %
    Par El Riiico dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/06/2005, 17h11

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