|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Печать скриншота на принтере
Всем привет!
Возникла проблема при печати скриншота на принтере. Вот исходник: Код:
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, подставляются какие то параметры, которые необходимы для печати. Только не могу понять какие. Ктонибудь сталкивался с этой проблемой? |
#2
|
|||
|
|||
Почему нельзя пойти таким путем:
1. Сохранить в файл 2. Вывести на печать 3. Дождаться конца печати 4. Удалить Если я не ошибаюсь, то принтеры прежде чем печатать сохраняют данные где-то на диск и потом печатают (в смысле не печатают сразу из памяти). Поправьте, если я не прав. Последний раз редактировалось ProperDoze, 14.09.2008 в 22:23. |
#3
|
|||
|
|||
Встречался с такой проблеммой. Дело в том, что для печати нужен DIB, которым обычный битмап не является. Короче, надо этот битмап превратить в DIB, а потом уже печатать.
Код в свое время я нашел где-то на борландовской базе знаний. |
#4
|
|||
|
|||
Ага. А при записи он автоматом конвертируется в DIB?
Думаю, что всетаки каких то параметров просто не хватает. |