uses
printers;
procedure TForm1.Button1Click(Sender: TObject);
var
papermmx, papermmy: Extended;
begin
Printer.BeginDoc;
{
PHYSICALWIDTH = Dots horizontal of the paper
LOGPIXELSX = DPI (Dots per Inch)
25.4 = To calculte Inch to Millimeter
}
papermmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
papermmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) /
GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;
with Printer.Canvas dobegin
TextOut(200, 100, floattostr(papermmx) + ' mm x ' +
floattostr(papermmy) + ' mm');
end;
Printer.EndDoc;
end;
Here's a translation of the text into Russian:
Код-snippet на Delphi, который получает размер бумаги в миллиметрах и печатает его в консоль.
Расшифровка кода:
Процедура Button1Click вызывается при клике пользователем кнопки на форме.
Она начинает с вызова Printer.BeginDoc() для начала нового документа для печати.
Затем она получает физическую ширину и высоту бумаги в пикселях с помощью GetDeviceCaps. Метод возвращает устройственно-зависимые возможности, такие как разрешение (точек на дюйм).
Для преобразования пиксельных значений в миллиметры она делит физическую ширину и высоту бумаги на логическую ширину и высоту (LOGPIXELSX и LOGPIXELSY) и умножает результат на 25,4 (конвертирующий фактор от дюймов до миллиметров).
Используется блок временного доступа with для доступа к свойствам Canvas без необходимости их квалифицировать с помощью Printer.Canvas.
Она использует метод TextOut для печати размера бумаги в миллиметрах в консоль, используя функцию floattostr для преобразования вещественных значений в строки.
Наконец, она вызывает Printer.EndDoc() для окончания документа и закрытия сессии печати.
Альтернативное решение:
Вместо использования GetDeviceCaps, вы можете использовать свойства Printer.PaperWidth и Printer.PaperHeight, которые возвращают размер бумаги в пикселях. Затем можно преобразовать эти значения в миллиметры, как показано выше.
Если вам нужно получить размер бумаги в более читаемом формате, вы можете использовать функцию Format для форматирования строки вывода.
Вот обновленный код-snippet, который использует альтернативное решение:
uses
printers;
procedure TForm1.Button1Click(Sender: TObject);
var
paperWidth, paperHeight: Integer;
begin
Printer.BeginDoc;
paperWidth := Printer.PaperWidth / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
paperHeight := Printer.PaperHeight / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;
with Printer.Canvas do
begin
TextOut(200, 100, Format('%.2f мм x %.2f мм', [paperWidth, paperHeight]));
end;
Printer.EndDoc;
end;
Этот код-snippet более компактен и легче для чтения, чем оригинальный.
В статье описывается процесс получения размера бумаги в миллиметрах на компьютере с использованием языка программирования Delphi и функций GetDeviceCaps.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.