Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Не работает TransparentBlt


Автор: Evrp1 13.4.2004, 23:57
Народ помогите пожалуйста!!!
Кто что-нить знает о функции TransparentBlt?

она с принтером работает????

вот пример кода:



TransparentBlt(hDC ,//cnvTarget.Handle, // handle to destination DC
iBigAreaLeft, // x-coord of destination upper-left corner
iBigAreaTop, // y-coord of destination upper-left corner
iBigWidth, // width of destination rectangle
iBigHeight, // height of destination rectangle
imgTemp.Canvas.Handle, // handle to source DC
0, // x-coord of source upper-left corner
0, // y-coord of source upper-left corner
imgTemp.Width, // width of source rectangle
imgTemp.Height, // height of source rectangle
clCream // color to make transparent

ShowMessage(IntToStr(GetLastError()));

hDC- это принтера hDC.

Причем вот эта работает!!! :

StretchBlt( hDC, //cnvTarget.Handle, // handle of destination device context
iBigAreaLeft, // x-coord of destination upper-left corner
iBigAreaTop, // y-coord of destination upper-left corner
iBigWidth, // width of destination rectangle
iBigHeight, // height of destination rectangle
imgTemp.Canvas.Handle, // handle to source DC
0, // x-coord of source upper-left corner
0, // y-coord of source upper-left corner
imgTemp.Width, // width of source rectangle
imgTemp.Height, // height of source rectangle
SRCCOPY // raster operation code
);

пытаюсь на DC принтера использовать эту функцию (TransparentBlt)
Она упорно возвращает false. Смотрю GetLastError, говорит, что код ошибки 87 - короче ей
вроде не нравиться какой-то входящий параметр. Посидел подумал, что ей может не нравиться???
там же одни координаты + 2 hDC + цвет
Координаты проверил, увет тоже - а ей хоть бы хны ;(((
остаеться только DC . Самое интересное то, что на к примеру на канвасе TImage TransparentBlt работает прекрасно!!!


Если кто знает как заменить TransparentBlt по отношения к принтеру, буду очень признателен smile.gif

Автор: <Spawn> 14.4.2004, 12:23
Все прекрасно работает - данный код копирует рисунок из TImage на указаную поверхность, используя верхний левый пиксел картинки как прозрачный

Код
procedure TForm1.Button2Click(Sender: TObject);
begin
 if not TransparentBlt(Canvas.Handle, 100, 0, Image1.Picture.Bitmap.Width,
                   Image1.Picture.Bitmap.Height,
                   Image1.Picture.Bitmap.Canvas.Handle, 0, 0,
                   Image1.Picture.Bitmap.Width,
                   Image1.Picture.Bitmap.Height,
                   Image1.Canvas.Pixels[0, 0]) then
   ShowMessage(SysErrorMessage(GetLastError));
end;

Добавлено @ 12:25
Упс, не сразу дочитал вопрос)) Так на крайний случай сначала копируй на какой нить HDC, а потом его распечатай. Принтера нет, так что проверить не могу.

Автор: Evrp1 14.4.2004, 12:27
С канвасом работает, а с принтером нет!!!!
т.е если я использую Canvas.Handle - то все ок
если пишу в первый входящий параметр TransparentBlt hDC (принтера)
ни фига не пашет ;((((
Добавлено @ 12:29
Цитата

Упс, не сразу дочитал вопрос)) Так на крайний случай сначала копируй на какой нить HDC, а потом его распечатай. Принтера нет, так что проверить не могу.

что значит копируй на какой-нить hDC а потом распечатай????
объясни плиз

Автор: <Spawn> 14.4.2004, 12:35
Например, у тебя есть какая то картинка. Копируй ее куда нить при помощи TransparentBlt, а затем ту область копируй на принетер обычной BItBlt. Ну это, конечно, как вариант, если ты не сможешь разобраться с TransparentBlt

Автор: Evrp1 14.4.2004, 12:48
Спасибо за совет!!!
одно удивительно - нигде ничего не написано про то, работет ли она с принтером
smile.gif))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)