Было:
Надо:
Cardinal => PAnsiChar.
Вообще полезно просмотреть все исходники на предмет наличия масок:
Pointer(Cardinal
Pointer(Integer
Pointer(Longint
PChar(Cardinal
PChar(Integer
PChar(Longint
procedure _DIBDrawTo(DestCanvas: TCanvas; fhdib: THANDLE; orgx, orgy, orgdx, orgdy, destx, desty, destdx, destdy: integer); var bminfo: ^TBITMAPINFO; begin bminfo := GlobalLock(fhdib); SetStretchBltMode(destcanvas.handle, COLORONCOLOR); if bminfo^.bmiHeader.biBitCount <= 8 then // <=256 colors StretchDIBits(destcanvas.Handle, destx, desty, destdx, destdy, orgx, orgy, orgdx, orgdy, pointer(Cardinal(bminfo) + sizeof(TBITMAPINFOHEADER) + (1 shl bminfo^.bmiHeader.biBitCount) * 4), bminfo^, DIB_RGB_COLORS, SRCCOPY) else // >256 colors StretchDIBits(destcanvas.Handle, destx, desty, destdx, destdy, orgx, orgy, orgdx, orgdy, pointer(Cardinal(bminfo) + sizeof(TBITMAPINFOHEADER)), bminfo^, DIB_RGB_COLORS, SRCCOPY); GlobalUnLock(fhdib); end;
Надо:
procedure _DIBDrawTo(DestCanvas: TCanvas; fhdib: THANDLE; orgx, orgy, orgdx, orgdy, destx, desty, destdx, destdy: integer); var bminfo: ^TBITMAPINFO; begin bminfo := GlobalLock(fhdib); SetStretchBltMode(destcanvas.handle, COLORONCOLOR); if bminfo^.bmiHeader.biBitCount <= 8 then // <=256 colors StretchDIBits(destcanvas.Handle, destx, desty, destdx, destdy, orgx, orgy, orgdx, orgdy, pointer(PAnsiChar(bminfo) + sizeof(TBITMAPINFOHEADER) + (1 shl bminfo^.bmiHeader.biBitCount) * 4), bminfo^, DIB_RGB_COLORS, SRCCOPY) else // >256 colors StretchDIBits(destcanvas.Handle, destx, desty, destdx, destdy, orgx, orgy, orgdx, orgdy, pointer(PAnsiChar(bminfo) + sizeof(TBITMAPINFOHEADER)), bminfo^, DIB_RGB_COLORS, SRCCOPY); GlobalUnLock(fhdib); end;
Cardinal => PAnsiChar.
Вообще полезно просмотреть все исходники на предмет наличия масок:
Pointer(Cardinal
Pointer(Integer
Pointer(Longint
PChar(Cardinal
PChar(Integer
PChar(Longint
PAnsiChar(Cardinal
PAnsiChar(Integer
PAnsiChar(Longint
PAnsiChar(Integer
PAnsiChar(Longint
а почему не NativeUInt?
ОтветитьУдалитьhttp://docwiki.embarcadero.com/Libraries/Berlin/en/System.NativeUInt
Логичнее же именно к числу приводить
Логично вообще-то Pointer к Pointer'у приводить. PAnsiChar - вообще-то самый подходящий. Ну или PByte = ^Byte объявлять. Ну или тогда уж IntPtr пользовать, а не NativeUInt. Ну или включать директиву PointerMath.
Удалитьhttp://docwiki.embarcadero.com/RADStudio/Seattle/en/Pointer_Math_(Delphi)
Удалить