![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не печатаются изображения на принтере [D6, WinXP]
Циркуль © (2008-10-29 18:03:00)Задача - распечатать несколько файлов изображений (сканы неких документов). Файлы в формате JPEG.
Делаю так:
В стринглисте SL - список имен файлов этих самых изображений.
TmpImage: TImage;
SL: TStringList;
....
TmpImage := TImage.Create(nil);
try
Printer.BeginDoc;
try
for I := 0 to SL.Count - 1 do
begin
TmpImage.Picture.LoadFromFile(SL[I]);
Printer.Canvas.StretchDraw(Rect(0, 0, Printer.PageWidth, Printer.PageHeight), TmpImage.Picture.Graphic);
if I < SL.Count - 1 then
Printer.NewPage;
end;
finally
Printer.EndDoc;
end;
finally
TmpImage.Free;
end;
Код отрабатывает, принтер выплевывает нужное количество чистых листочков. Не пойму где тут грабли :(
Циркуль (2008-10-30 09:26:00) [1]Спасибо, работает :)
Цитатник (2008-10-30 08:05:00) [2]Цитата:
LongIsland © (08.05.03 10:53)
procedure TfmMain.bnPrintClick(Sender: TObject);
var
Info: PBitmapInfo;
InfoSize, ImageSize: DWord;
Image: Pointer;
begin
if not dgPrint.Execute then Exit;
Printer.BeginDoc;
GetDIBSizes(imMain.Picture.Bitmap.Handle, InfoSize, ImageSize);
Info:=AllocMem(InfoSize);
try
Image:=AllocMem(ImageSize);
try
GetDIB(imMain.Picture.Bitmap.Handle, 0, Info^, Image^);
StretchDIBits(Printer.Canvas.Handle,
0, 0, Printer.PageWidth, Printer.PageHeight,
0, 0, imMain.Width, imMain.Height,
Image, Info^, DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
end;
Printer.EndDoc;
end;
Таким образом у меня печатает на любой принтер и любые картинки, а StretchDraw может глючить
Цитатник (2008-10-30 08:00:00) [3]Цитата:
Sandman25 (08.05.03 16:10)
Из хелпа по Delphi6.
Note: Delphi canvases use device-dependent bitmaps to implement the Draw, StretchDraw, or CopyRect methods. Because of this, you can't use these methods with most printers. Instead, to create graphic images on the printer's canvas, create a device-independent bitmap and draw it directly to the canvas's Handle property.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Navi © (11.05.03 08:02)
To Sandman25 - спасибо, раскопал. Мне было лень - я допер методом проб и ошибок.
tesseract (2008-10-29 20:08:00) [4]
> Если бы он не был выбран, он бы не "печатал" чистые листки
> :)
Помню такое было с термопринтерами, вроде решал через API - отрисовывал именно через DIB всё. StretchDraw не работал 100%.
Циркуль (2008-10-29 20:02:00) [5]Если бы он не был выбран, он бы не "печатал" чистые листки :)
PageWidth <> 0
tesseract (2008-10-29 19:55:00) [6]Гм, а принтер выбран ? Printer.PageWidth какое значение показывает ?
www (2008-10-29 18:34:00) [7]вообще-то область печати не с нуля начинается...