ok, bin je pensais pas que c'était aussi simple :mrgreen:
merci à tous :ccool:
Version imprimable
ok, bin je pensais pas que c'était aussi simple :mrgreen:
merci à tous :ccool:
Je reviens à la charge, mais en fait le copymemory ne fonctionne pas, access violation à chaque coup (même avec un sendmessage etc).
du coup j'essaye par ce code :
SendMessage (FindWindow (nil, 'XXX'), PM_NEW_VALUE, PInteger (@NewValue.Value)^, 0);
avec NewValue.Value bien en Single. compilation ok, le code s'execute sans planter.
par contre quand je veux le récupérer via Single (Msg.LParam); dans le programme qui récupère le message PM_NEW_VALUE, ça ne compile pas, invalid type cast.
désolé d'être un boulet mais delphi n'est pas mon langage de prédilection :calim2:
et c'est un tort ! :D
alors Integer et Single occupent le même espace mémoire, c'est pourquoi on peut stocker l'un dans l'autre.
pour t'éviter la gymnastique des pointeurs tu peux faire les choses de façon plus simple.
tu peux utiliser aussi un type complexe (union en C) dont la déclaration est un peu tordue mais qui donne un résultat très lisible:Code:
1
2
3
4
5
6
7
8
9
10
11
12 var i: Integer; s: Single; begin s := 12.5; // la valeur que tu veux envoyer Move(s, i, SizeOf(i)); // et hop ! c'est un entier SendMessage(..., i); // de l'autre côté Move(Msg.lParam, s, SizeOf(s)): // et hop ! c'est un Single end;
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 type Convert = record case boolean of True : (AsInt: Integer); False: (AsFloat: Single); end; var i: Integer; s: Single; begin s := 12.5; SendMessage(... Convert(s).AsInt); // s := Convert(Msg.lParam).AsFloat; end;
J'ai utilisé la technique de Move, ça fonctionne :ccool:
merci, j'ai appris beaucoup de choses :mrgreen: