MAKELPARAM ca marche comment ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

MAKELPARAM ca marche comment ?

Message par lionel_om »

Bonjour à tous.
Je cherche à utiliser MAKELPARAM. Mais je sais pas comment le faire fonctionner en PB. C'est pour utiliser avec un SendMessage_().

Merci d'avance.
Lionel
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
CameleonTH
Messages : 333
Inscription : sam. 25/juin/2005 11:18
Localisation : Laon (02)
Contact :

Message par CameleonTH »

Je ne sais pas ce qu'est le MAKELPARAM, pourrait tu expliquer à quoi sa sert pour qu'on puisse t'aider en comprenant à quoi sa sert. :D
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

C'est utilisé pour les message (en C)
J'ai trouvé des équivalents sur le forum allement (page en caches de google car le forum deutsch est mort lui aussi...)

Code : Tout sélectionner

Procedure.l MakeLong(a.l,b.l)
  ProcedureReturn a | ($10000*b)
EndProcedure 

Procedure.l MakeLong(a.l,b.l)
  ProcedureReturn a | (b<<16)
EndProcedure
Les deux sembles marcher pourtant elles sont différentes... :?
Je continu mes fouilles...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

MakelParam, c'est une macro.

C'est équivalent à ça:

Code : Tout sélectionner

Procedure MakeLong(low.w, high.w)
  ProcedureReturn low + (high<<16)
EndProcedure
Tu lui passes 2 Word, il te retourne un Long

Normalement, tu ne dois pas en avoir besoin.
Tu passes simplement ton Long dans le lParam de ton SendMessage_() sauf si tu fais ton Long à partir de deux Word
Dernière modification par Chris le ven. 30/déc./2005 20:04, modifié 1 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

lionel_om a écrit :C'est utilisé pour les message (en C)
J'ai trouvé des équivalents sur le forum allement (page en caches de google car le forum deutsch est mort lui aussi...)

Code : Tout sélectionner

Procedure.l MakeLong(a.l,b.l)
  ProcedureReturn a | ($10000*b)
EndProcedure 

Procedure.l MakeLong(a.l,b.l)
  ProcedureReturn a | (b<<16)
EndProcedure
Les deux sembles marcher pourtant elles sont différentes... :?
Je continu mes fouilles...
l'opération de décalage <<16 est l'équivalent d'une multiplication de 2 élévé à la puissance 16 soit 65536 ; cela revient à multiplier par 65536 dont la représentation en hexadécimal est $10000

le code ProcedureReturn a | (b<<16) est plus rapide que ProcedureReturn a | ($10000*b) mais les 2 sont justes

le mot de 16 bit a va être conservé mais le mot de 16 bit b va être décalé de 16 rangs vers la gauche pour devenir le mot de poids fort

on a donc en final un mot de 32 bit (un long) qui a été construit à partir de 2 mots de 16 bits. Certaine API fournissent (par exemple la position de la souris en x/y) dans un mot de 32 bits des valeurs qui n'ont de sens que prises individuellement comme mot de 16 bit et réciproquement
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

J'avais pas vu le dollar '$' :oops: :oops:
J'ai lu trop rapidement.
merci pour les infos... :lol:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre