![]() |
|
|
|
|
#1
|
|||
|
|||
|
У меня такая проблема мне надо вывести на печать содержимое компонента PageControl(или любого другого). Я использую пример из учебника
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
i, start, stop: integer;
begin
PrintDialog1.Options:=[poPageNums,poSelection];
PrintDialog1.FromPage:=1;
PrintDialog1.ToPage:=PageControl1.PageCount;
PrintDialog1.MinPage:=1;
PrintDialog1.MaxPage:=PageControl1.PageCount;
if not PrintDialog1.Execute then Exit;
if PrintDialog1.PrintRange=prAllPages
then
begin
Start:=PrintDialog1.MinPage-1;
Stop:=PrintDialog1.MaxPage-1;
end
else // если выбрано отличное от 'Print All'
if PrintDialog1.PrintRange=prSelection
then
begin
Start:=PageControl1.ActivePageIndex;
Stop:=Start;
end
else // если выбрано отличное от 'Выделенный фрагмент'
begin
Start:=PrintDialog1.FromPage-1;
Stop:=PrintDialog1.ToPage-1;
end;
// начало печати
Printer.BeginDoc;
for i:=start to stop do
begin
PageControl1.Pages[i].PaintTo(Printer.Handle,500,500);
if i<>stop
then Printer.NewPage;
end;
Printer.EndDoc;
end;Вопрос как мне сделать так чтобы печатало нормальным размером в центре листа? |
|
#2
|
||||
|
||||
|
Читай учебник дальше, там, как раз в следующем примере, написано как настроить масштаб.
|
|
#3
|
|||
|
|||
|
вощем добавил в код:
procedure TForm2.Button1Click(Sender: TObject); Код:
var
X1,X2,Y1,Y2:integer;
i, start, stop: integer;
PointsX,PointsY:double;
begin
PrintDialog1.Options:=[poPageNums,poSelection];
PrintDialog1.FromPage:=1;
PrintDialog1.ToPage:=PageControl1.PageCount;
PrintDialog1.MinPage:=1;
PrintDialog1.MaxPage:=PageControl1.PageCount;
if not PrintDialog1.Execute then Exit;
if PrintDialog1.PrintRange=prAllPages
then
begin
Start:=PrintDialog1.MinPage-1;
Stop:=PrintDialog1.MaxPage-1;
end
else // если выбрано отличное от 'Print All'
if PrintDialog1.PrintRange=prSelection
then
begin
Start:=PageControl1.ActivePageIndex;
Stop:=Start;
end
else // если выбрано отличное от 'Выделенный фрагмент'
begin
Start:=PrintDialog1.FromPage-1;
Stop:=PrintDialog1.ToPage-1;
end;
// начало печати
Printer.BeginDoc;
Printer.Canvas.Refresh;
PointsX:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX)/30;
PointsY:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSY)/30;
X1:=round((printer.PageWidth - Pagecontrol1.Width*PointsX)/2);
Y1:=round((printer.PageHeight - Pagecontrol1.Height*PointsY)/2);
X2:=round(X1+Pagecontrol1.Width*PointsX);
Y2:=round(Y1+Pagecontrol1.Height*PointsY);
Printer.Canvas.CopyRect(Rect(X1,Y1,X2,Y2),Pagecontrol1.Canvas,Rect(0,0,Pagecontrol1.Width,Pagecontrol1.Height));
for i:=start to stop do
begin
PageControl1.Pages[i].PaintTo(Printer.Handle,500,500);
if i<>stop
then Printer.NewPage;
end;
Printer.EndDoc;
end; |