Конференция "WinAPI" » Прозрачный текст и TPrinter
 
  • softi (07.09.11 16:37) [0]
    Здравствуйте!
    Печатаю с помощью TPrinter текст и рисунки.
    Столкнулся с тем, что надписи перекрывают собой рисунок. Т.е. нужен прозрачный фон. Однако код, как везде рекомендуют:
    <CODE
    var
    bk_mode:integer;
    ...
    bk_mode := SetBkMode(Printer.Canvas.Handle, TRANSPARENT);
    Printer.Canvas.StretchDraw(rect(0,0,10,10),Image1.Picture.Bitmap);
    Printer.Canvas.Font.Assign(mainform.font);
    Printer.Canvas.TextOut(0,0,'Текст');
    SetBkMode(Printer.Canvas.Handle, bk_mode);>

    Код вызывает ошибку доступа.
  • softi (07.09.11 16:55) [1]
    Причем глюк только при обращении к caption формы (mainform.caption). Ничего не понимаю.
  • Игорь Шевченко © (07.09.11 22:40) [2]

    > Код вызывает ошибку доступа.


    не мудрено
  • softi (08.09.11 10:13) [3]
    А что я не так делаю?
  • softi (08.09.11 10:41) [4]
    Единственное, что ошибку выдает почему-то в модуле с компонентом RzButton (я использую библиотеку Raize - раньше никогда с ними проблем не было). Получается, что из-за прозрачного фона на Printer.Canvas какая-то ерунда получается в модуле RzButton.
  • icWasya © (08.09.11 13:33) [5]
    или мы всё делаем через API,
    или всё через VCL, а значит так

    var
    TBrushStyle:b_Stype;
    ...
    b_Stype := Printer.Canvas.Handle.Brush.Style;
    Printer.Canvas.Handle.Brush.Style = bs_clear;
    Printer.Canvas.StretchDraw(rect(0,0,10,10),Image1.Picture.Bitmap);
    Printer.Canvas.Font.Assign(mainform.font);
    Printer.Canvas.TextOut(0,0,'Текст');
    Printer.Canvas.Handle.Brush.Style:=B_Style;

 
Конференция "WinAPI" » Прозрачный текст и TPrinter
Есть новые Нет новых   [134431   +10][b:0][p:0.001]