![]() |
|
|
|
|
#1
|
|||
|
|||
|
Всем привет) такая проблема: я на панеле разместил едиты и лэйблы, мне нужно пустить на печать панель и все её содержимоё. Возился с принтдиалог, не смог распечатать.
Может кто код подскажет?)) Там мне кажется 2 строчки надо)) |
|
#2
|
||||
|
||||
|
Класс TPrinter.
|
|
#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. |