Пример показывает, как использовать PrintDlg() для того, чтобы дать
возможность пользователю выбрать принтер, и напечатать две страницы.
uses CommDlg;
{$IFNDEF WIN32}const
MAX_PATH = 144;
{$ENDIF}procedure TForm1.Button1Click(Sender: TObject);
var
Pd: TPrintDlg;
DocInfo: TDocInfo;
begin
FillChar(Pd, sizeof(Pd), #0);
Pd.lStructSize := sizeof(Pd);
Pd.hWndOwner := Form1.Handle;
Pd.Flags := PD_RETURNDC;
if PrintDlg(pd) thenbegin
FillChar(DocInfo, sizeof(DocInfo), #0);
DocInfo.cbSize := SizeOf(DocInfo);
GetMem(DocInfo.lpszDocName, 32);
GetMem(DocInfo.lpszOutput, MAX_PATH);
lStrCpy(DocInfo.lpszDocName, 'My Document');
{Add this line to print to a file }
lStrCpy(DocInfo.lpszOutput, 'C:\Download\Test.doc');
StartDoc(Pd.hDc, DocInfo);
StartPage(Pd.hDc);
TextOut(Pd.hDc, 100, 100, 'Page 1', 6);
EndPage(Pd.hDc);
StartPage(Pd.hDc);
TextOut(Pd.hDc, 100, 100, 'Page 2', 6);
EndPage(Pd.hDc);
EndDoc(Pd.hDc);
FreeMem(DocInfo.lpszDocName, 32);
FreeMem(DocInfo.lpszOutput, MAX_PATH);
end;
end;
Привет! Вот перевод текста на русский язык:
Код-набор - это пример использования функции PrintDlg в Delphi для печати двух страниц текста без использования компонента TPrinter. Он демонстрирует, как позволить пользователю выбрать принтер и затем напечатать указанный текст.
Вот шаг за шагом, что код делает:
Событийный обработчик Button1Click вызывается при клике кнопки с надписью "Печать" (или ее перевод).
Объект TPrintDlg (Pd) объявляется и инициализируется.
Функция PrintDlg вызывается для отображения диалогового окна печати, позволяющего пользователю выбрать принтер и настроить другие параметры печати. Если пользователь кликнул "ОК", функция возвращает True.
Если пользователь выбрал принтер, код настраивает информацию о документе (DocInfo) следующим шагами:
Выделяет память для DocInfo с помощью FillChar.
Устанавливает размер DocInfo в размер рекорда TDocInfo.
Инициализирует DocInfo.lpszOutput путем файла "C:\Download\Test.doc". Это будет печатать документ в этом файле вместо отправки его напрямую на принтер.
Код использует следующие функции печати:
StartDoc: Начинает новый документ.
StartPage: Начинает новую страницу в текущем документе.
TextOut: Печатает текст в указанном месте на странице.
EndPage: Конец текущей страницы.
EndDoc: Конец текущего документа.
Код освобождает память, выделенную для DocInfo.lpszDocName и DocInfo.lpszOutput.
Обратите внимание, что этот код не использует компонент TPrinter, как запрашивал автор оригинального кода. Вместо этого он использует низкоуровневые функции печати (StartDoc, StartPage, TextOut и т.д.) для печати текста.
Если вы хотите достичь аналогичного функциональности с более современным и простым подходом, рассмотрите использование компонента TPrintDialog в Delphi. Он предоставляет более дружественный интерфейс для выбора принтеров и настройки параметров печати. Вы также можете использовать компонент TPrinter для печати документов без необходимости ручного управления процессом печати.
Вот пример, как можно модифицировать код для использования компонента TPrintDialog:
procedureTForm1.Button1Click(Sender:TObject);varPrintDialog:TPrintDialog;beginPrintDialog:=TPrintDialog.Create(Self);tryifPrintDialog.Executethenbegin// Получаем DC принтера из диалогового окна печати.varPrinterDC:=PrintDialog.PrinterDC;// Начинаем новый документ.StartDoc(PrinterDC,nil);// Начинаем новую страницу в текущем документе.StartPage(PrinterDC);// Печатаем текст в указанном месте на странице.TextOut(PrinterDC,100,100,'Страница 1',6);// Конец текущей страницы.EndPage(PrinterDC);// Начинаем новую страницу в текущем документе.StartPage(PrinterDC);// Печатаем текст в указанном месте на странице.TextOut(PrinterDC,100,100,'Страница 2',6);// Конец текущей страницы.EndPage(PrinterDC);// Конец текущего документа.EndDoc(PrinterDC);end;finallyFreeAndNil(PrintDialog);end;end;
В этом примере мы создаем объект TPrintDialog и используем его метод Execute для отображения диалогового окна печати. Если пользователь кликнул "ОК", мы получаем DC принтера из диалогового окна и используем его для начала нового документа, начала новой страницы, печати текста на странице, конца страницы и finally конца документа. Этот код более компактен и легче для чтения, чем оригинальный пример с использованием PrintDlg.
В статье описывается способ печати документа без использования компонента TPrinter, показывая как использовать функцию PrintDlg() для выбора принтера и напечатать две страницы.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.