------------ Дoбавленo:
Вот скажи, что здесь лишнее
#pas
procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;
var pCls:THiImageLoader; stat:DWORD; sz:TSize; bmp:PBitmap; Rect:TRect;
hdcMem: HDC;
hdcBmp: HBITMAP;
begin
pCls := THiImageLoader(pUserData);
pCls.FImgCtx.GetStateInfo(stat, sz, 0);
bmp := NewDIBBitmap(sz.cx, sz.cy, pf32bit);
Rect := MakeRect(0, 0, sz.cx, sz.cy);
// вывод чистого полученного изображения
pCls.FImgCtx.Draw(bmp.Canvas.Handle, Rect);
_hi_OnEvent(pCls._event_onLoad, bmp);
if pCls.valid then begin
bmp.Free;
hdcMem:= CreateCompatibleDC(0);
hdcBmp:= CreateCompatibleBitmap(pCls.DC, pCls.wsz, pCls.hsz);
SelectObject(hdcMem, hdcBmp);
// получение копии изображения контекста
BitBlt(hdcMem, 0, 0, pCls.wsz, pCls.hsz, pCls.DC, 0, 0, SRCCOPY);
// наложение полученного изображения на копию со вписыванием в клиентский прямоугольник
if (sz.cx * 100) div sz.cy > (pCls.wsz * 100) div pCls.hsz then begin
pCls.FImgCtx.StretchBlt(hdcMem, 0, (pCls.hsz - (pCls.wsz * sz.cy) div sz.cx) div 2, pCls.wsz, (pCls.wsz * sz.cy) div sz.cx, 0, 0, sz.cx, sz.cy, SRCCOPY);
end else begin
pCls.FImgCtx.StretchBlt(hdcMem, (pCls.wsz - (pCls.hsz * sz.cx) div sz.cy) div 2, 0, (pCls.hsz * sz.cx) div sz.cy, pCls.hsz, 0, 0, sz.cx, sz.cy, SRCCOPY);
end;
bmp := NewDIBBitmap(pCls.wsz, pCls.hsz, pf32bit);
// возврат полученного наложения на контекст
BitBlt(pCls.DC, 0, 0, pCls.wsz, pCls.hsz, hdcMem, 0, 0, SRCCOPY);
// копия наложения для вывода
BitBlt(bmp.Canvas.Handle, 0, 0, pCls.wsz, pCls.hsz, hdcMem, 0, 0, SRCCOPY);
DeleteDC(hdcMem);
DeleteObject(hdcBmp);
end;
_hi_OnEvent(pCls._event_onCopyLoad, bmp);
bmp.Free;
SetEvent(pCls.hOK);
end;