Re[5]: печать картинки API-ыми функциями
От: DjAndy Россия  
Дата: 12.03.03 11:41
Оценка:
А>h_dc_pic:=CreateCompatibleDC(h_dc);
А>lbmp:=SelectObject(h_dc_mem,img2.Picture.Bitmap.Handle);
А>if lbmp<>0
А>then
А>begin
А> StretchBlt (h_dc,0,0,picW,picH,h_dc_mem,0,0,img2.Picture.Bitmap.Width,img2.Picture.Bitmap.Height,SRCCOPY);
А> SelectObject(h_dc_mem,lbmp);
А>end
А>else Log('');//запись в лог
А>deleteDc(h_dc_mem);

А>может чаго не так в коде наваяла??


Ну привет, а зачем делать так?

h_dc_pic:=CreateCompatibleDC(h_dc);
lbmp:=SelectObject(h_dc_mem,img2.Picture.Bitmap.Handle);
if lbmp<>0
...
deleteDc(h_dc_mem);

Ясное дело, что в только что созданном контексте заселектен "никакой" битмап. Я правда не проверял, но подозреваю что там именно NULL. Ну и что у тебя получается, создался контекст, в него успешно заселектился твой битмап, в lbmp попал тот битмап, который там был раньше, т.е. никакой, после проверки это и выясняется, стретч не выполняется, и далее сразу идёт DeleteDC, т.о. старая ситуация . Никакая проверка не нужна, я просто не уверен, корректно ли не запоминать результат селекта, а потом перед DeleteDC селектить в контекст NULL, но перед делетом так или иначе нужно сделать селект. Лучше в дебаге уточнить конечно, так ли всё происходит.

ЗЫ. Так ты на дельфе пишешь, а я то думаю откуда в сях взялся Then
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.