Показать сообщение отдельно
  #1  
Старый 12.09.2008, 11:24
Rat Rat вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 391
Репутация: 6078
По умолчанию Печать скриншота на принтере

Всем привет!

Возникла проблема при печати скриншота на принтере. Вот исходник:

Код:
program Project1;

uses
   Windows, Graphics, Forms, Printers, Types;

{$R *.res}

var
  PRect: Trect;
  PBitMap: TBitmap;
  DC: HDC;
  Canva:Tcanvas;
  Buffer: array[0..1023] of Char;
  tmp: String;
begin
  try
    Canva := TCanvas.Create;
    PBitmap := TBitMap.Create;
    DC := GetDC(0);
    Canva.Handle := DC;
    with Screen do
    begin
      PBitmap.Width := Width;
      PBitmap.Height := Height;
      PBitmap.Canvas.CopyRect(Rect(0,0, Width, Height), Canva, Rect(0, 0, Width, Height));
      SetString(tmp, Buffer, GetTempPath(Sizeof(Buffer) - 1, Buffer));
      PBitmap.SaveToFile(tmp+'tmp294u2.bmp');
    end;
      Pbitmap.LoadFromFile(tmp+'tmp294u2.bmp');
    with PRect do
    begin
      left := 0;
      top := 0;
      right := Printer.PageWidth;
      Bottom := Printer.PageHeight;
    end;
      printer.BeginDoc;
      printer.Canvas.StretchDraw(Prect, Pbitmap);
      printer.EndDoc;
  finally
    ReleaseDC(0, DC);
    PBitmap.Free;
    Canva.Free;
    end;
end.

Проблема в том, что после получения экрана в PBitmap, я не хочу его сохранять в файл, а хочу сразу выводить на принтер. Но если его не сохранять, то печатается чистый лист. Если сохранить, а потом тут же загрузить, всё печатается нормально. Я думаю, что во время загрузки файла, в PBitmap, подставляются какие то параметры, которые необходимы для печати. Только не могу понять какие. Ктонибудь сталкивался с этой проблемой?
Ответить с цитированием