Вверх ↑
Разработчик
Ответов: 26151
Рейтинг: 2127
#1: 2008-01-20 13:28:16 ЛС | профиль | цитата
Ну, положим я сказал несколько по-другому.
nesco писал(а):
Я попробовал все, что можно, оттуда перенести в основной метод

Так вот это я, как раз, и оставил.
Ха, интересно, сейчас попробую перенести.

------------ Дoбавленo:

Перенес. С INFINITE завис начисто, но вот так работать стал намного быстрее в мультичтении


#pas
FImgCtx.GetStateInfo(stat, sz, 0);
// WaitForSingleObject(hOK,INFINITE);
while WaitForSingleObject(hOK,10) <> WAIT_OBJECT_0 do begin
WaitMessage;
if Assigned(Applet) and (not AppletTerminated) then Applet.ProcessMessages;
end;
CloseHandle(hOK);
FImgCtx.GetStateInfo(stat, sz, 0);
FImgCtx.Disconnect;

------------ Дoбавленo:

Проверил с Bitmap.Canvas.Handle, нифига не работает, только через промежуточный контекст, те вот так


#pas
if (Bitmap <> nil) and (not Bitmap.Empty) then begin
hdcMem:= CreateCompatibleDC(0);
SelectObject(hdcMem, Bitmap.Handle);
hRect := MakeRect(0, 0, Bitmap.Width, Bitmap.Height);
ClientRect;
if (sz.cx <> 0) or (sz.cy <> 0) then begin
if (sz.cx * 100) div sz.cy > (hw * 100) div hh then
FImgCtx.StretchBlt(hdcMem, x1, y1 + (hh - (hw * sz.cy) div sz.cx) div 2, hw, (hw * sz.cy) div sz.cx, 0, 0, sz.cx, sz.cy, SRCCOPY)
else
FImgCtx.StretchBlt(hdcMem, x1 + (hw - (hh * sz.cx) div sz.cy) div 2, y1, (hh * sz.cx) div sz.cy, hh, 0, 0, sz.cx, sz.cy, SRCCOPY);
end;
DeleteDC(hdcMem);
_hi_onEvent(_event_onLoad);
end;
Кстати, в одном источнике я встречал похожее решение.
------------ Дoбавленo:

Тут еще тэги косячат, зачем-то лишнюю ";" между "<>" воткнуло
карма: 22

0