
30.05.2012, 17:02
|
 |
Новичок
|
|
Регистрация: 22.10.2011
Сообщения: 62
Репутация: 666
|
|
Попробуйте этот код (у себя не испытывал - пока не имею возможности):
Код:
procedure TForm1.ButtonClick(Sender: TObject);
Var
x1, y1, x2, y2: Integer;
PointsX, PointsY: Double;
Bitmap: TBitmap;
begin
If Not(PrintDialog.Execute) Then Exit;
BitMap:=TBitmap.Create;
Bitmap.Width:=Panel.Width;
Bitmap.Height:=Panel.Height;
Panel.PaintTo(Bitmap.Canvas, 0, 0);
Printer.BeginDoc;
Printer.Canvas.Refresh;
// Получаю данные о разрешении принтера
(* число 70 - коэффициент масштабирования (для разных принтеров может быть разный) *)
PointsX:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX)/70;
PointsY:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSY)/70;
// Рассчитываю размеры изображения
x1:=Round((Printer.PageWidth - Bitmap.Width*PointsX)/2);
y1:=Round((Printer.PageHeight - Bitmap.Height*PointsY)/2);
x2:=Round(x1 + Bitmap.Width*PointsX);
y2:=Round(y1 + Bitmap.Height*PointsY);
// Вывожу изображение на печать
Printer.Canvas.CopyRect(Rect(x1, y1, x2, y2), Bitmap.Canvas,
Rect(0, 0, Bitmap.Width, Bitmap.Height));
Printer.EndDoc;
Bitmap.Free;
end;
Надеюсь, что модуль Printers Вы подключить не забыли. И ещё, не забудьте поменять названия компонентов PrintDialog и Panel.
__________________
Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!..
|