Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Распечатать TStringGrid 2

Delphi , ОС и Железо , Принтеры и Печать

Распечатать TStringGrid 2

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   printers;

 //StringGrid Inhalt ausdrucken 
procedure PrintStringGrid(Grid: TStringGrid; Title: string;
   Orientation: TPrinterOrientation);
 var
   P, I, J, YPos, XPos, HorzSize, VertSize: Integer;
   AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer;
   mmx, mmy: Extended;
   Footer: string;
 begin
   //Kopfzeile, Fu?zeile, Zeilenabstand, Schriftgro?e festlegen 
  HeaderSize := 100;
   FooterSize := 200;
   ZeilenSize := 36;
   FontHeight := 36;
   //Printer initializieren 
  Printer.Orientation := Orientation;
   Printer.Title  := Title;
   Printer.BeginDoc;
   //Druck auf mm einstellen 
  mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
     GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
   mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) /
     GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;

   VertSize := Trunc(mmy) * 10;
   HorzSize := Trunc(mmx) * 10;
   SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);

   //Zeilenanzahl festlegen 
  Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize;
   //Seitenanzahl ermitteln 
  if Grid.RowCount mod Zeilen <> 0 then
     AnzSeiten := Grid.RowCount div Zeilen + 1
   else
     AnzSeiten := Grid.RowCount div Zeilen;

   Seite := 1;
   //Grid Drucken 
  for P := 1 to AnzSeiten do
   begin
     //Kopfzeile 
    Printer.Canvas.Font.Height := 48;
     Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Title) div 2)),
       - 20,Title);
     Printer.Canvas.Pen.Width := 5;
     Printer.Canvas.MoveTo(0, - HeaderSize);
     Printer.Canvas.LineTo(HorzSize, - HeaderSize);
     //Fu?zeile 
    Printer.Canvas.MoveTo(0, - VertSize + FooterSize);
     Printer.Canvas.LineTo(HorzSize, - VertSize + FooterSize);
     Printer.Canvas.Font.Height := 36;
     Footer := 'Seite: ' + IntToStr(Seite) + ' von ' + IntToStr(AnzSeiten);
     Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Footer) div 2)),
       - VertSize + 150,Footer);
     //Zeilen drucken 
    Printer.Canvas.Font.Height := FontHeight;
     YPos := HeaderSize + 10;
     for I := 1 to Zeilen do
     begin
       if Grid.RowCount >= I + (Seite - 1) * Zeilen then
       begin
         XPos := 0;
         for J := 0 to Grid.ColCount - 1 do
         begin
           Printer.Canvas.TextOut(XPos, - YPos,
             Grid.Cells[J, I + (Seite - 1) * Zeilen - 1]);
           XPos := XPos + Grid.ColWidths[J] * 3;
         end;
         YPos := YPos + ZeilenSize;
       end;
     end;
     //Seite hinzufugen 
    Inc(Seite);
     if Seite <= AnzSeiten then Printer.NewPage;
   end;
   Printer.EndDoc;
 end;

 //Example 
procedure TForm1.Button1Click(Sender: TObject);
 begin
   //Drucken im Querformat 
  PrintStringGrid(Grid, 'StringGrid Print Landscape', poLandscape);
   //Drucken im Hochformat 
  PrintStringGrid(Grid, 'StringGrid Print Portrait', poPortrait);
 end;

Перевод контента на русский язык:

Код, предоставленный ниже, это программный код Delphi, который печатает TStringGrid-управление в принтере. Он может печатать grid в обоих ориентациях - ландшафтной и портретной.

Вот разбивка того, как работает код:

  1. Процедура PrintStringGrid принимает три параметра: TStringGrid, строка заголовка и значение TPrinterOrientation (либо poLandscape, либо poPortrait).
  2. Она инициализирует некоторые переменные для контроля процесса печати, такие как размер заголовка, размер подвала, количество строк, количество столбцов, высота шрифта и т.д.
  3. Затем она настраивает ориентацию принтера, заголовок и начинает документ.
  4. Код рассчитывает количество страниц, необходимых для печати grid, основываясь на количестве строк, столбцов и других параметрах.
  5. Он проходит по каждой странице, печатая заголовок с заголовком, подвал с текущим номером страницы, а затем печатает ячейки grid построчно.
  6. После печати всех строк для текущей страницы он проверяет, есть ли еще страницы для печати. Если да, то он начинает новую страницу; если нет, то он заканчивает документ.
  7. Процедура Button1Click демонстрирует, как использовать эту процедуру PrintStringGrid для печати grid в обоих ориентациях - ландшафтной и портретной.

Вот пример, как можно модифицировать код, чтобы сделать его более гибким:

Вместо того, чтобы жестко закодировать размер заголовка, размер подвала, количество строк, количество столбцов, высоту шрифта и т.д., вы можете передавать эти значения в процедуру PrintStringGrid как параметры. Это позволит вам настроить процесс печати без изменения кода.

Вот пример, как это можно сделать:

procedure PrintStringGrid(Grid: TStringGrid; Title: string; Orientation: TPrinterOrientation;
  HeaderSize, FooterSize, RowCount, ColCount, FontHeight: Integer);
begin
   // Код здесь...
end;

// Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
begin
  PrintStringGrid(YourGrid, 'Ваш Grid', poLandscape, 100, 200, YourGrid.RowCount,
                  YourGrid.ColCount, 36);
end;

В этом примере YourGrid - это TStringGrid, который вы хотите напечатать. Другие параметры - заголовок, ориентация, размер заголовка, размер подвала, количество строк, количество столбцов и высота шрифта.

Сделав эти изменения, ваш код будет более гибким и легче поддерживаться в будущем.

Код на Delphi, который позволяет печатать содержимое TStringGrid на принтере.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Принтеры и Печать ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:36:59/0.0033478736877441/0