
War bis gestern trivial THandle, dann hab ich mich mal auf Delphi verlassen, und da wurde bei MouseOver hIcon als Rückgabewert angezeigt

So ganz Falsch war das auch nicht ... war zumindest "kompatibel".
Was oftmal knallte, da Delphi teilweise falsche Typen genutzt hatte, z.B. Signed anstatt Unsigned,
dass dann teilweise irgendwann berichtigt hatte oder es mit anderen "richtigen"
API-Deklaration kollidiert,
wenn es nicht richtig zusammen passt. (oder weil der Entwickler das nicht bemerkt und seine Typen angepasst hat, oder er es eben selbst ausversehn falsch gemacht hatte)
Delphi versucht seit einer Weile Typen strikter zu prüfen.
Und wenn auch noch die Überlaufprüfung aktiv ist, dann wird nicht mehr blind überschieben oder gar abgeschnitten, sondern der tatsächliche Wertebereich zur Laufzeit geprüft, mit dem aktuellen Variablen-Inhalt.
z.B. wenn das System eine Weile läuft, dann gehen die
Handle/Indize/Counter hoch
und irgendwann sind sie eventuell "zu groß", für falsche Typen.
Wie z.B. Pointer in Integer zu casten.

Integer ist kein dynamischer Typ mehr (war es noch zwischen Win16 und
Win32), aber mit Win64 wurde er eingefrohren und ein neuer Typ (NativeInt) erfunden. (war nicht die Idee von Embarcadero, sondern Microsoft/Intel/AMD/...)
Delphi-Quellcode:
type
THandle = NativeUInt;
UIntPtr = NativeUInt;
UINT_PTR = System.UIntPtr; // NativeUInt;
HICON = type UINT_PTR;
HCURSOR = HICON; { HICONs & HCURSORs are polymorphic }
function LoadCursor(hInstance: HINST; lpCursorName: LPCWSTR): HCURSOR;
Ja, von der TypeInfo her ist es HICON (das "alte" CodeInsight ging nur auf TypeInfos),
aber wenn man in die Deklaration schaut, "eigentlich" HCURSOR.
HCURSOR ist ein Alias auf HICON. (ist also kein eigenständiger Typ)
Neuere Delphis, seit Delphi 11.irgendwas oder 12, versuchen im CodeInsight und HelpInsight das "richtiger" darzustellen.
z.B. wurde früher bei LPARAM "Integer" angezeigt (im
Win32), was im Prinzip stimmte, aber unter Win64 ist es eben ein Int64 (oder UInt64).
Wenn man da seine Variable "blind" als Integer deklariert, dann knallt es irgendwann, wenn sich der "eigentliche" Typ mal ändert, sei es durch Änderung der
API, oder weil es ein compilerabhängiger Typ ist.
Ein Therapeut entspricht 1024 Gigapeut.