Delphi-Quellcode:
procedure TSkinEngine.SetProperty(WinHandle: HWND; Item: integer; V: LONG_PTR);
begin
if (Item > 0) and (Item < EXTEND_EXTRA + 1) and (WinHandle <> 0) then
SetWindowLongPtr(WinHandle, (Item - 1) * 4, V);
end;
Unter 32Bit werden mir immer die korrekten Pointer zurückgegeben.
Delphi-Quellcode:
function TSkinEngine.GetProperty(WinHandle: HWND; Item: integer): LONG_PTR;
begin
Result := 0;
if (Item > 0) and (Item < EXTEND_EXTRA + 1) and (WinHandle <> 0) then
Result := GetWindowLongPtr(WinHandle, (Item - 1) * 4);
end;
Delphi-Quellcode:
ImgTL := Pointer(GetProperty(pHandle, FORM_TopRight));
if Assigned(ImgTL) then
GetImageSize(ImgTL, TLW, TLH);
unter 64Bit ist alles irgendwie durcheinander die Pointer stimmen einmal dann wieder nicht.
Ist LONG_PTR für 64Bit nicht das richtige?
Die Daten werden so übergeben.
Delphi-Quellcode:
stTopRight:
begin
Path := FSkinPath(sBF, sSkinPath);
if FileExists(Path) then
SkinEngine.SetProperty(hMain, FORM_TopRight,
LONG_PTR(SkinEngine.skCreateImageFromFile(Path)));
end;
Funktioniert alles in 32Bit in 64Bit jedoch nicht.
pic 1. Der Pointer vom Image
pic 2. konvertiert zu LONG_PTR
pic 3. Die Rückgabe.. komplett falsch
Danach kracht es weil der Pointer falsch ist.
gruss