Page 1 sur 1

MAKELPARAM ca marche comment ?

Publié : ven. 30/déc./2005 19:25
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

Publié : ven. 30/déc./2005 19:30
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

Publié : ven. 30/déc./2005 19:35
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...

Publié : ven. 30/déc./2005 19:49
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

Publié : ven. 30/déc./2005 20:01
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

Publié : ven. 30/déc./2005 20:53
par lionel_om
J'avais pas vu le dollar '$' :oops: :oops:
J'ai lu trop rapidement.
merci pour les infos... :lol: