- 0
Смещение CANVSa или почему? при печати на принтер
-
Похожий контент
-
- 7 ответов
- 1 495 просмотров
-
- 1 ответ
- 1 493 просмотра
-
- 3 ответа
- 1 830 просмотров
-
- 1 ответ
- 1 599 просмотров
-
- 3 ответа
- 1 959 просмотров
-
- 1 ответ
- 2 269 просмотров
-
- 0 ответов
- 1 006 просмотров
-
- 4 ответа
- 2 926 просмотров
-
- 4 ответа
- 4 550 просмотров
-
- 2 ответа
- 2 695 просмотров
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
Sashar333
Здравствуйте!
Подскажите пожалуйста в чем причина смещения изображения при печати по горизонтали относительно листа?
procedure ThePrint(day : arraySheet; prn : TPrintDialog);
var
DestRect, Rect_cell, Rect_Size:TRectF;
i,pageall:integer;
textFill: tFillTextFlags;
poses : TPoses;
Col1 : boolean;
COLROW : integer;
sizeRow : Single;
Image : TImage;
begin
textFill := [];
COLROW := 63;
Printer.ActivePrinter := Printer.Printers[1];
Printer.ActivePrinter.SelectDPI(Printer.ActivePrinter.DPI[Printer.ActivePrinter.DPICount-1]);
Printer.BeginDoc;
sizeRow := Printer.PageHeight / COLROW;
poses := getPosY(day, sizeRow);
Printer.Canvas.BeginScene;
Printer.Canvas.Font.Size := sizeRow * 0.8;
Printer.Canvas.Font.Family := 'Times New Roman';
Printer.Canvas.Fill.Color := TAlphaColorRec.Black;
Printer.Canvas.Fill.Kind := TBrushKind.Solid;
Col1 := true;
var WCol := Printer.PageWidth / 2 - 10;
var WColW := WCol / 3;
for var s := 0 to Length(poses)-1 do
begin
if Col1 then
DestRect := RectF(0, poses[s], WCol, poses[s] + sizeRow)
else
DestRect := RectF(WCol, poses[s], Printer.Canvas.Width, poses[s] + sizeRow);
Printer.Canvas.Font.Style:= Printer.Canvas.Font.Style + [TFontStyle.fsBold];
Printer.Canvas.FillText(DestRect,day[0].listSheme[s].name,True,1,textFill,TTextAlign.Center,TTextAlign.Center);
Printer.Canvas.Font.Style:= Printer.Canvas.Font.Style - [TFontStyle.fsBold];
for var p := 0 to Length(day[0].listSheme[s].listPosition) - 1 do
begin
var nameSize := day[0].listSheme[s].listPosition[p].t + 'x' + day[0].listSheme[s].listPosition[p].w + 'x' +
day[0].listSheme[s].listPosition[p].l + '=';
if day[0].listSheme[s].listPosition[p].c.ToInteger > 1 then
nameSize := nameSize + day[0].listSheme[s].listPosition[p].c + 'л';
Rect_cell := RectF(10, poses[s] + (sizeRow * (p+1)), WCol-30, poses[s] + (sizeRow * (p+2)));
Rect_Size := RectF(0, poses[s] + (sizeRow * (p+1)), WCol - WColW, poses[s] + (sizeRow * (p+2)));
if not Col1 then
begin
Rect_cell.Left := Rect_cell.Left + WCol + 20;
Rect_cell.Right := Rect_cell.Right + WCol + 10;
Rect_Size.Left := Rect_Size.Left + WCol + 20;
Rect_Size.Right := Rect_Size.Right + WCol + 10;
end;
Printer.Canvas.FillText(Rect_cell, day[0].listSheme[s].listPosition[p].pn + ')' + day[0].listSheme[s].listPosition[p].s,
True,1,textFill,TTextAlign.Leading,TTextAlign.Center);
Printer.Canvas.FillText(Rect_Size, nameSize, True,1,textFill,TTextAlign.Trailing,TTextAlign.Center);
end;
Col1 := not(Col1);
end;
for var row := 1 to COLROW do
begin
Printer.Canvas.DrawLine(TPointF.Create(0, sizeRow * row), TPointF.Create(WCol, sizeRow * row), 0.5);
Printer.Canvas.DrawLine(TPointF.Create(WCol + 20, sizeRow * row), TPointF.Create(Printer.Canvas.Width, sizeRow * row), 0.5);
end;
DestRect := RectF(0, 0, Printer.Canvas.Width, sizeRow);
Printer.Canvas.FillText(DestRect, day[0].name, True, 1, textFill, TTextAlign.Center,TTextAlign.Center);
Printer.Canvas.DrawLine(TPointF.Create(WCol, sizeRow), TPointF.Create(WCol, Printer.Canvas.Height), 1);
Printer.Canvas.DrawLine(TPointF.Create(WCol + 20, sizeRow), TPointF.Create(WCol + 20, Printer.Canvas.Height), 1);
Printer.Canvas.DrawLine(TPointF.Create(0, sizeRow), TPointF.Create(500, Printer.Canvas.Height), 1);
Printer.Canvas.DrawLine(TPointF.Create(Printer.Canvas.Width, sizeRow), TPointF.Create(Printer.Canvas.Width, Printer.Canvas.Height), 1);
Printer.Canvas.DrawLine(TPointF.Create(WCol-WColW+20, sizeRow), TPointF.Create(WCol-WColW+20, Printer.Canvas.Height), 1);
Printer.Canvas.DrawLine(TPointF.Create(Printer.Canvas.Width-WColW+20, sizeRow), TPointF.Create(Printer.Canvas.Width-WColW+20, Printer.Canvas.Height), 1);
Printer.Canvas.EndScene;
Printer.EndDoc;
end;
ВОТ ЧТО ПОЛУЧАЕТСЯ:
Линия спецом под угол, что бы понять само смещение в лево относительно листа.
Соответственно текст тоже видно на половину
Написано на Delphi 11, FMX.Printer
Заранее спасибо!
Ссылка на комментарий
18 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.