Euvene Опубликовано 5 апреля, 2017 Поделиться Опубликовано 5 апреля, 2017 Добрый день. Возникла такая проблема, нужно распечатать обычную таблицу, но при печати получается все очень мелкое, может кто подскажет как это исправить... вот код: TRectF SrcRect, DestRect; int h = 40, w = 60, x0 = 50, y0 = 150, x, y; TPrinter *Printer = Fmx::Printer::Printer(); Printer->ActivePrinter->SelectDPI(1200, 1200); Printer->Canvas->Fill->Color = claBlack; Printer->Canvas->Fill->Kind = TBrushKind(1); Printer->Canvas->Stroke->Kind = TBrushKind::Solid; Printer->Canvas->Stroke->Color = claBlack; Printer->BeginDoc(); DestRect.SetHeight(h); DestRect.SetWidth(w); for (int i = 0; i < StringGrid1->RowCount; i++) { x = x0; for (int j = 0; j < StringGrid1->ColumnCount; j++) { DestRect.SetLocation(x, y0); Printer->Canvas->Font->Size = 14; // Printer->Canvas->DrawRect(DestRect, 0, 0, AllCorners, 1); // Printer->Canvas->Font->SetSettings(StringGrid1->TextSettings->Font->Family,StringGrid1->TextSettings->Font->Size,StringGrid1->TextSettings->Font->StyleExt); Printer->Canvas->FillText(DestRect, StringGrid1->Cells[j][i], false, 100, TFillTextFlags(), TTextAlign::Center, TTextAlign::Center); x += w; } y0 += h; } Printer->EndDoc(); Цитата Ссылка на комментарий
0 dnekrasov Опубликовано 6 апреля, 2017 Поделиться Опубликовано 6 апреля, 2017 (изменено) В 05.04.2017 в 11:46, Euvene сказал: Printer->ActivePrinter->SelectDPI(1200, 1200); Конечно будет очень мелкое, ведь Вы устанавливаете 1200 точек на дюйм и ширина листа А4 в портретном режиме у Вас получается чуть меньше 100000 точек. Исходя из этого просто задайте адекватные значения для h, w, x0, y0, x, y и все у Вас будет в порядке. Например, для печати битмапки, я ипользую такой код: var bmp: TBitmap; SrcRect, DestRect: TRectF; DPI: TPoint; cx, cy: Extended; begin Printer.ActivePrinter.SelectDPI(1200, 1200); DPI := Printer.ActivePrinter.DPI[Printer.ActivePrinter.ActiveDPIIndex]; {$IFDEF MSWINDOWS} cx := DPI.X / GetDeviceCaps(GetDC(GetDesktopWindow), LOGPIXELSX); cy := DPI.Y / GetDeviceCaps(GetDC(GetDesktopWindow), LOGPIXELSY); {$ENDIF} bmp := TBitmap.Create(0, 0); try FEditor.GetAsBitmap(bmp); SrcRect := TRectF.Create(0, 0, bmp.Width * cx, bmp.Height * cy); DestRect := TRectF.Create(0, 0, Printer.PageWidth, Printer.PageHeight); if SrcRect.Width / SrcRect.Height > DestRect.Width / DestRect.Height then Printer.Orientation := TPrinterOrientation.poLandscape else Printer.Orientation := TPrinterOrientation.poPortrait; if (SrcRect.Width < DestRect.Width) and (SrcRect.Height < DestRect.Height) then begin DestRect.Left := (DestRect.Width - SrcRect.Width) / 2; DestRect.Width := SrcRect.Width; DestRect.Top := (DestRect.Height - SrcRect.Height) / 2; DestRect.Height := SrcRect.Height; end else begin SrcRect.Fit(DestRect); DestRect := SrcRect; end; Printer.BeginDoc; try Printer.Canvas.DrawBitmap(bmp, TRectF.Create(0, 0, bmp.Width, bmp.Height), DestRect, 1); finally Printer.EndDoc; end; except Printer.Abort; end; FreeAndNil(bmp); end; Изменено 6 апреля, 2017 пользователем dnekrasov DimArt 1 Цитата Ссылка на комментарий
Вопрос
Euvene
Добрый день. Возникла такая проблема, нужно распечатать обычную таблицу, но при печати получается все очень мелкое, может кто подскажет как это исправить...
вот код:
TRectF SrcRect, DestRect; int h = 40, w = 60, x0 = 50, y0 = 150, x, y; TPrinter *Printer = Fmx::Printer::Printer(); Printer->ActivePrinter->SelectDPI(1200, 1200); Printer->Canvas->Fill->Color = claBlack; Printer->Canvas->Fill->Kind = TBrushKind(1); Printer->Canvas->Stroke->Kind = TBrushKind::Solid; Printer->Canvas->Stroke->Color = claBlack; Printer->BeginDoc(); DestRect.SetHeight(h); DestRect.SetWidth(w); for (int i = 0; i < StringGrid1->RowCount; i++) { x = x0; for (int j = 0; j < StringGrid1->ColumnCount; j++) { DestRect.SetLocation(x, y0); Printer->Canvas->Font->Size = 14; // Printer->Canvas->DrawRect(DestRect, 0, 0, AllCorners, 1); // Printer->Canvas->Font->SetSettings(StringGrid1->TextSettings->Font->Family,StringGrid1->TextSettings->Font->Size,StringGrid1->TextSettings->Font->StyleExt); Printer->Canvas->FillText(DestRect, StringGrid1->Cells[j][i], false, 100, TFillTextFlags(), TTextAlign::Center, TTextAlign::Center); x += w; } y0 += h; } Printer->EndDoc();
Ссылка на комментарий
1 ответ на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.