procedure PrintStrings(S: TStrings; Font: TFont; Title: string);
var
LeftMargin, TopMargin, LineCoord, LineOnPage, LinesOnDoc,
CurrentLine, TextHeight, LinesPerPage, LineInterval: integer;
procedure StartDoc;
begin
LinesOnDoc := S.Count;
Printer.Canvas.Font.Assign(Font);
Printer.Canvas.TextOut(0, 0, ' ');
LeftMargin := (Printer.Canvas.Font.PixelsPerInch) div 2;
TopMargin := (Printer.Canvas.Font.PixelsPerInch) div 2;
TextHeight := Abs(Printer.Canvas.Font.Height);
LineInterval := TextHeight + (TextHeight div 2);
LinesPerPage := (Printer.PageHeight - TopMargin) div LineInterval;
CurrentLine := 0;
end;
function MorePages:boolean;
begin
Result := (CurrentLine < LinesOnDoc) andnot Printer.Aborted;
end;
procedure StartPage;
begin
LineOnPage := 0;
LineCoord := TopMargin;
end;
procedure NextPage;
beginif MorePages then Printer.NewPage;
end;
function MoreLines:boolean;
begin
Result := (LineOnPage < LinesPerPage) and
(LineOnPage < LinesOnDoc) andnot Printer.Aborted;
end;
procedure NextLine;
begin
Inc(LineOnPage);
Inc(LineCoord, LineInterval);
Inc(CurrentLine);
end;
procedure PrintLine;
begin
Printer.Canvas.TextOut(LeftMargin, LineCoord, S.Strings[CurrentLine]);
end;
begin
Printer.Title := Title;
Printer.BeginDoc;
StartDoc;
while MorePages dobegin
StartPage;
while MoreLines dobegin
PrintLine;
NextLine;
Application.ProcessMessages;
end;
NextPage;
end;
Printer.EndDoc;
end;
Программный процессор Delphi, именуемый PrintStrings, печатает коллекцию строк (TStrings) на умолчанию принтере с указанным шрифтом и заголовком.
Вот разбивка кода:
Процедура принимает три параметра: S (объект TStrings), Font (объект TFont) и Title (строка).
Она инициализирует несколько целочисленных переменных для хранения значений, связанных с печатью:
LeftMargin: левый отступ страницы
TopMargin: верхний отступ страницы
LineCoord: текущая координата строки на странице
LineOnPage: количество строк, напечатанных на текущей странице
LinesOnDoc: общее количество строк в документе
CurrentLine: текущая строка, печатаемая
TextHeight: высота одиночной строки текста
LinesPerPage: максимальное количество строк, которое может поместиться на странице
LineInterval: расстояние между последовательными строками
Процедура определяет несколько вложенных процедур и функций:
StartDoc: инициализирует процесс печати, устанавливающий отступы, рассчитывая высоту текста и подсчитывая общее количество строк.
MorePages: возвращает true, если есть еще страницы для печати.
StartPage: сбрасывает координату строки и счетчик страниц для новой страницы.
NextPage: печатает новую страницу, если есть еще страницы для печати.
MoreLines: возвращает true, если есть еще строки для печати на текущей странице.
NextLine: увеличивает счетчик строк, координату строки и текущую строку, печатаемую.
PrintLine: печатает текущую строку текста с использованием указанного шрифта и координат.
Основной логикой процедуры является внешний цикл, который проходит по каждой странице:
Она вызывает StartPage, чтобы сбросить счетчик страниц и координату строки.
Внутренний цикл печати строк до тех пор, пока не будет напечатано все количество строк на текущей странице или документ не будет окончен.
Для каждой строки она вызывает PrintLine для печати текста и увеличивает счетчик строк с помощью NextLine.
После печати всех строк на текущей странице она вызывает NextPage, чтобы перейти к следующей странице.
В целом, эта процедура обеспечивает базовое реализацию для печати коллекции строк на умолчанию принтере с регулируемыми отступами и шрифтом.
Программа PrintStrings позволяет распечатать список строк на принтере по умолчанию, используя указанный шрифт и заголовок.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.