Тема: Печать Panel
Показать сообщение отдельно
  #6  
Старый 30.05.2012, 17:02
Аватар для DelphiM0ZG
DelphiM0ZG DelphiM0ZG вне форума
Новичок
 
Регистрация: 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.
__________________
Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!..
Ответить с цитированием