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
MAKELPARAM ca marche comment ?
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
MAKELPARAM ca marche comment ?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 333
- Inscription : sam. 25/juin/2005 11:18
- Localisation : Laon (02)
- Contact :
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
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...)
Les deux sembles marcher pourtant elles sont différentes...
Je continu mes fouilles...
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

Je continu mes fouilles...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
MakelParam, c'est une macro.
C'est équivalent à ça:
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
C'est équivalent à ça:
Code : Tout sélectionner
Procedure MakeLong(low.w, high.w)
ProcedureReturn low + (high<<16)
EndProcedure
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.
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 $10000lionel_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...)
Les deux sembles marcher pourtant elles sont différentes...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
![]()
Je continu mes fouilles...
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
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
J'avais pas vu le dollar '$'
J'ai lu trop rapidement.
merci pour les infos...


J'ai lu trop rapidement.
merci pour les infos...

Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !