Du gehst fahrlässig davon aus, dass in LPARAM ein gewisser Record-Zeiger übergeben wird, aber was sagt denn die Dokumentation dazu?
https://msdn.microsoft.com/de-de/lib.../ms645606.aspx
Zitat:
Integer(IrgendeinPointer)
Und niemals Pointer mit Integern casten.
Intel und Co. haben beschlossen, dass der Integer beim Sprung von 32 auf 64 nicht mehr mit wächst und haben ihn eingefrohren. (früher war der mal 16 Bit, in 16 Bit Systemen)
Besser Typen verwenden, die für solche Casts vorgesehn sind, wie z.B. UIntPtr und IntPtr,
oder die "neuen" Integer-Typen verwenden, welche man nun erfunden hat und die ab jetzt wachsen sollen. In Delphi sind das NativeInt und NativeUInt.
Bzw. für Casts bei Messages gibt es extra die Typen LPARAM, WPARAM und LRESULT, damit immer alles richtig läuft, auch wenn man irgendwann auf 64 Bit umstellen würde.