Показать сообщение отдельно
  #1  
Старый 14.05.2012, 16:36
Kramarty Kramarty вне форума
Прохожий
 
Регистрация: 28.03.2012
Сообщения: 17
Репутация: 10
Вопрос Как печатать ДВА CopyRect(a)

Господа, такая проблема:
Подаю на печать такой код:

Код:
procedure TForm0.Print1Click(Sender: TObject);
var
K,A1,B1,A2,B2,A3,B3,A4,B4,
X01,Y01,X02,Y02,X03,Y03,X04,Y04,
X1,X2,X3,X4,Y1,Y2,Y3,Y4,
X1T,Y1T,X2T,Y2T,X3T,Y3T,X4T,Y4T,
X1L,Y1L,X2L,Y2L,X3L,Y3L,X4L,Y4L,
X1T1,Y1T1,X2T1,Y2T1,X3T1,Y3T1,X4T1,Y4T1,
X1L1,Y1L1,X2L1,Y2L1,X3L1,Y3L1,X4L1,Y4L1:Integer;
begin
 Printer.BeginDoc;
Printer.Canvas.Refresh;
PointsX:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX)/120;
PointsY:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSY)/120;

//Первый Badge>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
X1:=round(Form1.ClientWidth*PointsX);
Y1:=round(500*PointsY);

Printer.Canvas.CopyRect(Rect(100,100,X1+100,Y1+100),Form1.Canvas,
Rect(0,0,Form1.ClientWidth,500));

X1T:=round(Form1.Edit1.Left*PointsX+100);
Y1T:=round(Form1.Edit1.Top*PointsY+100);
X2T:=round(Form1.Edit2.Left*PointsX+100);
Y2T:=round(Form1.Edit2.Top*PointsY+100);
X3T:=round(Form1.Edit3.Left*PointsX+100);
Y3T:=round(Form1.Edit3.Top*PointsY+100);
X4T:=round(Form1.Edit4.Left*PointsX+100);
Y4T:=round(Form1.Edit4.Top*PointsY+100);

K:= round(Form1.Edit1.Height*PointsY/10);

Printer.Canvas.Font.Size:= 14;
Printer.Canvas.Font.Name:= 'Arial';
Printer.Canvas.TextOut(X1T+K, Y1T+K, Form1.Edit5.Text);
Printer.Canvas.TextOut(X2T+K, Y2T+K, Form1.Edit6.Text);
Printer.Canvas.TextOut(X3T+K, Y3T+K, Form1.Edit7.Text);
Printer.Canvas.TextOut(X4T+K, Y4T+K, Form1.Edit8.Text);

X01:=round(Form1.Image1.Width*PointsX);
Y01:=round(Form1.Image1.Height*PointsY);
A1:=round(Form1.Shape1.Width*PointsX/3);
B1:=round(Form1.Shape1.Height*PointsY/10);

Printer.Canvas.CopyRect(Rect(A1+100,B1+100,A1+X01+100,B1+Y01+100),
 Form1.Image1.Picture.Bitmap.Canvas,
  Rect(0,0,Form1.Image1.Picture.Bitmap.Width,Form1.Image1.Picture.Bitmap.Height));

Printer.EndDoc;
end;
Bargest: оформляем код тегами!

У меня нет принтера, потому печатает один раз в файл *.xps.
Если тут же подаю на печать второй раз, то он перезагружает компьютер!!!
А печать на компе с принтером перезагружает сразу не печатая вообще!

Причину я понял: Потому что в коде между Printer.BeginDoc; и Printer.EndDoc;
Два раза стоят Printer.Canvas.CopyRect().
Когда один Printer.Canvas.CopyRect() закомментирую, то перезагрузки не происходит!

Как сделать, чтоб печатал оба КОПИРЕКТА???
Ответить с цитированием