![]() |
|
|
#1
|
|||
|
|||
![]() Всем привет) такая проблема: я на панеле разместил едиты и лэйблы, мне нужно пустить на печать панель и все её содержимоё. Возился с принтдиалог, не смог распечатать.
Может кто код подскажет?)) Там мне кажется 2 строчки надо)) |
#2
|
||||
|
||||
![]() Класс TPrinter.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
![]() Что класс TPrinter?))
|
#4
|
|||
|
|||
![]() Цитата:
Код:
Panel1.PaintTo(Printer.Canvas) |
#5
|
|||
|
|||
![]() Канваса не в одном свойстве нету, его тоже на форму кидать надо? Просто мало в этой теме шарю, а прогу сделать надо((
|
#6
|
||||
|
||||
![]() Попробуйте этот код (у себя не испытывал - пока не имею возможности):
Код:
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. Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!.. |