Форум: "Основная";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
ВнизНе печатаются изображения на принтере Найти похожие ветки
← →
Циркуль (2008-10-29 18:03) [0]Задача - распечатать несколько файлов изображений (сканы неких документов). Файлы в формате 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;
Код отрабатывает, принтер выплевывает нужное количество чистых листочков. Не пойму где тут грабли :(
← →
www (2008-10-29 18:34) [1]вообще-то область печати не с нуля начинается...
← →
tesseract © (2008-10-29 19:55) [2]Гм, а принтер выбран ? Printer.PageWidth какое значение показывает ?
← →
Циркуль (2008-10-29 20:02) [3]Если бы он не был выбран, он бы не "печатал" чистые листки :)
PageWidth <> 0
← →
tesseract © (2008-10-29 20:08) [4]
> Если бы он не был выбран, он бы не "печатал" чистые листки
> :)
Помню такое было с термопринтерами, вроде решал через API - отрисовывал именно через DIB всё. StretchDraw не работал 100%.
← →
Цитатник (2008-10-30 08:00) [5]Цитата:
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 - спасибо, раскопал. Мне было лень - я допер методом проб и ошибок.
← →
Цитатник (2008-10-30 08:05) [6]Цитата:
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 09:26) [7]Спасибо, работает :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c