Bonjour à toutes et à tous,
Dans un programme que j'ai écrit et qui fonctionnait bien en 32 bits, le transfert de message ne fonctionne plus en 64 bits. Voici le passage concerné :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| begin
with CoordZoom^ do
begin
if Pt0.X > Pt1.X then
begin
Left:= Pt1.X; Right:= Pt0.X;
end
else
begin
Left:= Pt0.X; Right:= Pt1.X;
end;
if Pt0.Y > Pt1.Y then
begin
Top:= Pt1.Y; Bottom:= Pt0.Y;
end
else
begin
Top:= Pt0.Y; Bottom:= Pt1.Y;
end;
end;
PostMessage(Parent.Handle, cp_ZoomDemande, 0, LongInt(CoordZoom));
end; |
avec :
Quand j'en arrive à la ligne "PostMessage", aussi bien en 32 bits qu'en 64 bits, lorsque je pointe la souris sur "CoordZoom", un affichage me décrit son contenu de la même manière en donnant les valeur Left, Top, Right, Bottom de CoordZoom. C'est OK.
Voici le passage traitant le message :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| procedure TCadreAff.Zoomer(var message: TMsgZoom);
var
i: Integer;
begin
with message do
begin
Zooming.Down:= False;
Zooming.Enabled:= False;
for i:= 1 to NbEcransAff do
EcranActif[i].ZoomPermis:= False;
with Coord^ do
begin
if (Right-Left > 4) and (Bottom-Top > 4) then
AffZoom(Left, Top, Right, Bottom);
end;
end;
end; |
Avec :
1 2 3 4 5
| TMsgZoom = record {Type de message pour passer les coordonnées de zooming}
Msg: Cardinal;
Prm: Word;
Coord: ^TRect;
end; |
En 32 bits, lorsque j'arrive à la ligne "with Coord^ do", et que je pointe la souris sur "Coord", en 32 bits, je retrouve le valeurs postées alors qu'en 64 bits, j'obtiens :
message.Coord = <TRECT> = nil
Je n'arrive pas à trouver ce qu'il faut faire pour corriger ce problème.
Merci de votre aide.
Cordialement.
Pierre.
Partager